Это довольно интересный вопрос, так что позвольте мне задать сцену. Я работаю в Национальном музее вычислительной техники, и нам только что удалось получить работающий в 1992 году суперкомпьютер Cray Y-MP EL, и мы действительно хотим увидеть, насколько быстро он может работать!
Мы решили, что лучший способ сделать это - написать простую программу на языке C, которая вычисляла бы простые числа и показывала, сколько времени это заняло, а затем запускала программу на быстром современном настольном ПК и сравнивала результаты.
Мы быстро придумали этот код для подсчета простых чисел:
#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);
}
Который на нашем двухъядерном ноутбуке с Ubuntu (Cray работает под UNICOS) работал отлично, достигая 100% загрузки ЦП и занимая около 10 минут. Вернувшись домой, я решил попробовать его на своем современном игровом ПК с шестиядерным процессором, и именно здесь мы столкнулись с нашими первыми проблемами.
Я сначала адаптировал код для работы в Windows, так как именно его использовал игровой ПК, но был опечален, обнаружив, что процесс потреблял только около 15% мощности процессора. Я решил, что Windows должна быть Windows, поэтому я загрузился в Live CD с Ubuntu, думая, что Ubuntu позволит процессу работать с его полным потенциалом, как это было раньше на моем ноутбуке.
Однако я получил только 5% использования! Итак, мой вопрос: как я могу адаптировать программу для работы на моей игровой машине в Windows 7 или Live Linux при 100% загрузке ЦП? Еще одна вещь, которая была бы замечательной, но не обязательной, - это если бы конечным продуктом мог быть один .exe, который можно было бы легко распространять и запускать на машинах Windows.
Большое спасибо!
P.S. Конечно, эта программа на самом деле не работала со специализированными процессорами Crays 8, и это уже совсем другая проблема ... Если вы что-нибудь знаете об оптимизации кода для работы на суперкомпьютерах Cray 90-х, сообщите нам тоже!