Це досить цікаве питання, тож дозвольте мені встановити сцену. Я працюю в Національному музеї обчислювальної техніки, і нам щойно вдалося придбати суперкомп’ютер Cray Y-MP EL з 1992 року, і ми справді хочемо побачити, як швидко він може йти!
Ми вирішили, що найкращий спосіб зробити це - написати просту програму на С, яка б обчислювала прості числа і показувала, скільки часу це потрібно, а потім запускала програму на швидкому сучасному настільному ПК та порівнювала результати.
Ми швидко придумали цей код для підрахунку простих чисел:
#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, тому я завантажив живий компакт-диск Ubuntu, думаючи, що Ubuntu дозволить запустити процес із повним потенціалом, як це було раніше на моєму ноутбуці.
Однак я отримав лише 5% використання! Отже, моє питання полягає в тому, як я можу адаптувати програму для запуску на моєму ігровому автоматі або в Windows 7, або в живій Linux зі 100% завантаженням центрального процесора? Ще одне, що було б чудово, але не потрібно, - якщо кінцевим продуктом може бути один .exe, який можна легко розповсюджувати та запускати на машинах Windows.
Дуже дякую!
PS Звичайно, ця програма насправді не працювала зі спеціалізованими процесорами Crays 8, і це вже зовсім інше питання ... Якщо ви щось знаєте про оптимізацію коду для роботи на супер-комп’ютерах Cray 90-х, теж нам крикніть!