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