Как получить 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-х, напишите нам!

Ответы на вопрос(9)

Ваш ответ на вопрос