To dość interesujące pytanie, więc pozwól mi ustawić odpowiednią scenę. Pracuję w National Museum of Computing i właśnie udało nam się uruchomić super komputer Cray Y-MP EL z 1992 roku i naprawdę chcemy zobaczyć, jak szybko może działać!
Zdecydowaliśmy, że najlepszym sposobem na zrobienie tego jest napisanie prostego programu w C, który obliczałby liczby pierwsze i pokazywałby, ile czasu to zajęło, a następnie uruchomienie programu na szybkim, nowoczesnym komputerze stacjonarnym i porównanie wyników.
Szybko wymyśliliśmy ten kod, aby policzyć liczby pierwsze:
#include <stdio.h>
#include <time.h>
void main() {
clock_t start, end;
double runTime;
start = clock();
int i, num = 1, primes = 0;
while (num <= 1000) {
i = 2;
while (i <= num) {
if(num % i == 0)
break;
i++;
}
if (i == num)
primes++;
system("clear");
printf("%d prime numbers calculated\n",primes);
num++;
}
end = clock();
runTime = (end - start) / (double) CLOCKS_PER_SEC;
printf("This machine calculated all %d prime numbers under 1000 in %g seconds\n", primes, runTime);
}
Który na naszym dwurdzeniowym laptopie z systemem Ubuntu (Cray działa z UNICOS) działał idealnie, uzyskując 100% wykorzystanie procesora i zajmując około 10 minut. Kiedy wróciłem do domu, zdecydowałem się wypróbować go na moim nowoczesnym komputerze do gier z sześciordzeniowym rdzeniem i tutaj pojawiają się nasze pierwsze problemy.
Po raz pierwszy dostosowałem kod do uruchamiania w systemie Windows, ponieważ właśnie tego używał komputer do gier, ale ze smutkiem stwierdziłem, że proces pobierał tylko około 15% mocy procesora. Pomyślałem, że to musi być Windows to Windows, więc uruchomiłem Live CD Ubuntu, myśląc, że Ubuntu pozwoli na uruchomienie procesu z pełnym potencjałem, tak jak to miało miejsce wcześniej na moim laptopie.
Jednak mam tylko 5% wykorzystania! Więc moje pytanie brzmi: jak mogę dostosować program do działania na moim automacie do gier w systemie Windows 7 lub Linux na żywo przy 100% wykorzystaniu procesora? Inną rzeczą, która byłaby świetna, ale niekonieczna, jest to, że produktem końcowym może być jeden plik .exe, który można łatwo dystrybuować i uruchamiać na komputerach z systemem Windows.
Wielkie dzięki!
PS Oczywiście ten program tak naprawdę nie działał ze specjalistycznymi procesorami Crays 8 i to jest zupełnie inna kwestia… Jeśli wiesz cokolwiek o optymalizacji kodu do pracy na super komputerach Cray z lat 90-tych, daj nam znać!