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