işlemcinin saniye başına hesapladığı komut sayısı
başlık "azraili bekleyen adam" tarafından 16.11.2024 18:39 tarihinde açılmıştır.
1.
basit bir c programıyla bile öğrenilebilir!
kratertepesi@msi:~/masaüstü/programlar$ ./program
100 milyon sayı içinde 10030385 asal sayı vardır.
işlemci döngüsü: 4772581176
hesaplama süresi: 1.0846775400 saniye
1 saniyenin 10,000'de kaçı: 10846.7754000000
kod:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <x86intrin.h> // rdtsc için gerekli
#define lımıt 180000000 // 1 milyar sınırı
#define cpu_frequency 4.4 // ghz cinsinden işlemci frekansı (örneğin 3.0 ghz)
int main() {
unsigned long long i, j, count = 0;
bool *is_prime = malloc((lımıt + 1) * sizeof(bool));
if (is_prime == null) {
fprintf(stderr, "bellek tahsis edilemedi.\n");
return 1;
}
// zaman ölçüm başlangıcı
unsigned long long start = __rdtsc();
// bütün sayıları asal varsayıyoruz
for (i = 0; i <= lımıt; i++) {
is_prime[i] = true;
}
// 0 ve 1 asal değildir
is_prime[0] = is_prime[1] = false;
// eratosthenes eleği algoritması
for (i = 2; i * i <= lımıt; i++) {
if (is_prime[i]) {
for (j = i * i; j <= lımıt; j += i) {
is_prime[j] = false;
}
}
}
// asal sayıları sayıyoruz
for (i = 2; i <= lımıt; i++) {
if (is_prime[i]) {
count++;
}
}
// zaman ölçüm bitişi
unsigned long long end = __rdtsc();
// döngü farkını hesapla
unsigned long long cycles = end - start;
// döngü süresi saniye olarak
double time_seconds = cycles / (cpu_frequency * 1e9); // ghz'den hz'e dönüşüm
// sonuçları yazdır
printf("100 milyon sayı içinde %llu asal sayı vardır.\n", count);
printf("işlemci döngüsü: %llu\n", cycles);
printf("hesaplama süresi: %.10f saniye\n", time_seconds);
printf("1 saniyenin 10,000'de kaçı: %.10f\n", time_seconds * 10000);
// belleği serbest bırak
free(is_prime);
return 0;
}
kratertepesi@msi:~/masaüstü/programlar$ ./program
100 milyon sayı içinde 10030385 asal sayı vardır.
işlemci döngüsü: 4772581176
hesaplama süresi: 1.0846775400 saniye
1 saniyenin 10,000'de kaçı: 10846.7754000000
kod:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <x86intrin.h> // rdtsc için gerekli
#define lımıt 180000000 // 1 milyar sınırı
#define cpu_frequency 4.4 // ghz cinsinden işlemci frekansı (örneğin 3.0 ghz)
int main() {
unsigned long long i, j, count = 0;
bool *is_prime = malloc((lımıt + 1) * sizeof(bool));
if (is_prime == null) {
fprintf(stderr, "bellek tahsis edilemedi.\n");
return 1;
}
// zaman ölçüm başlangıcı
unsigned long long start = __rdtsc();
// bütün sayıları asal varsayıyoruz
for (i = 0; i <= lımıt; i++) {
is_prime[i] = true;
}
// 0 ve 1 asal değildir
is_prime[0] = is_prime[1] = false;
// eratosthenes eleği algoritması
for (i = 2; i * i <= lımıt; i++) {
if (is_prime[i]) {
for (j = i * i; j <= lımıt; j += i) {
is_prime[j] = false;
}
}
}
// asal sayıları sayıyoruz
for (i = 2; i <= lımıt; i++) {
if (is_prime[i]) {
count++;
}
}
// zaman ölçüm bitişi
unsigned long long end = __rdtsc();
// döngü farkını hesapla
unsigned long long cycles = end - start;
// döngü süresi saniye olarak
double time_seconds = cycles / (cpu_frequency * 1e9); // ghz'den hz'e dönüşüm
// sonuçları yazdır
printf("100 milyon sayı içinde %llu asal sayı vardır.\n", count);
printf("işlemci döngüsü: %llu\n", cycles);
printf("hesaplama süresi: %.10f saniye\n", time_seconds);
printf("1 saniyenin 10,000'de kaçı: %.10f\n", time_seconds * 10000);
// belleği serbest bırak
free(is_prime);
return 0;
}
devamını gör...