Как добиться 100% -ного использования ЦП программой на языке C

Это довольно интересный вопрос, так что позвольте мне задать сцену. Я работаю в Национальном музее вычислительной техники, и нам только что удалось получить работающий в 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-х, сообщите нам тоже!

78
задан Mysticial 12 February 2012 в 01:47
поделиться