Merhaba, c++ ile 0 dan başlayarak kullanıcının girdiği sayıya kadar olan asal sayıları hesaplayan bir kod yazdım bu kodu yazmamın amacı pi zero 2w cihazım için işlemci overclock stabilitesini sağlamak için gerekli konfigürasyonu yapmaktı. Ancak merak ettiğim ve deneyip şaşırdığım bir durum gözlemledim. Arduino ide ile derlediğim ve pi pico da çalıştırdığımda 100 bin e kadar olan asal sayıları hesaplama süresi 768 milisaniye iken pi zero 2w de ise 106 milisaniye (cpu frekansı 1350 over voltage 4) buraya kadar bir sorun yok zero 2w haliyle daha hızlı ancak kodu ryzen 5 3500u işlemcili bilgisayarımda çalıştırdığımda ise sonuç şaşırtıcı bir şekilde 1233 milisaniye olarak çıktı o sırada işlemci yük altında değil normal bir şekilde çalışıyor bu sonucun işlemci alu'su ile veya komut setleri farkı ile ilişkisi var mıdır?
(algoritma olarak kod aynı sadece biri terminalde diğeri seri ekranda)
pico için yazdığım kod:
(algoritma olarak kod aynı sadece biri terminalde diğeri seri ekranda)
pico için yazdığım kod:
pico için yazdığım kod:
#include <Arduino.h>
bool asalmi(int n) {
if (n <= 1)
return false;
if (n <= 3)
return true;
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;
return true;
}
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
Serial.println("sayı gir:");
while (!Serial.available()) {
;
}
int limit = Serial.parseInt();
unsigned long start_time = millis();
Serial.println("Asal sayılar:");
for (int i = 2; i <= limit; ++i) {
if (asalmi(i)) {
Serial.print(i);
Serial.print(" ");
}
}
Serial.println();
unsigned long end_time = millis();
unsigned long duration = end_time - start_time;
Serial.print("İşlem süresi: ");
Serial.print(duration);
Serial.println(" milisaniye");
}
void loop() {}
pi zero ve laptop için yazdığım kod::
#include <iostream>
#include <chrono>
bool asalmi(int n) {
if (n <= 1)
return false;
if (n <= 3)
return true;
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;
return true;
}
int main() {
int limit;
std::cout << "sayı gir: ";
std::cin >> limit;
auto start_time = std::chrono::steady_clock::now();
std::cout << "Asal sayılar:" << std::endl;
for (int i = 2; i <= limit; ++i) {
if (asalmi(i)) {
std::cout << i << " ";
}
}
std::cout << std::endl;
auto end_time = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
std::cout << "İşlem süresi: " << duration.count() << " milisaniye" << std::endl;
return 0;
}