TL; DR: я занимаюсь производительными вычислениями, и я обнаружил, что якобы «более слабая» машина опережает «более сильную» машину на порядки. Зачем?

Я написал немного кода C для проекта. Он включает в себя 10 000 итераций длительного процесса, который генерирует псевдослучайные данные и после каждой итерации записывает данные в файл. Я использовал #pragma omp parallel for многопоточности задачи.

Я могу запустить свою программу на двух машинах: назовем их s и d. Вот соответствующие спецификации (пожалуйста, попросите другие спецификации, которые могут иметь значение):

  • s: Linux Mint 15, Samsung 840 EVO SSD, 8 ГБ ОЗУ, четырехъядерный процессор Intel i3 @ 2,40 ГГц
  • d: Linux Mint 16, твердотельный накопитель Intel, 8 ГБ ОЗУ, восьмиъядерный процессор AMD FX-8320 при 3,5 ГГц

Вот большой сюрприз: s выполняет задачу на порядок быстрее, чем d. Я запускал программу несколько раз на обеих машинах, и s выполняет задачу за 3-4 минуты, тогда как d занимает от 12 до 30 минут (я потерял счет времени). Оба они полностью исчерпывают свои ядра (то есть все ядра на 100%) во время вычислений. Это явление даже в том случае, если вспомогательные программы (Firefox и т.д.) Открыты на s, а на d больше ничего не работает.

Но код тот же. Флаги компилятора одинаковы. Даже вывод такой же. Я даже удалил диски из s и d, и поменял их местами, а затем снова запустил программу, просто чтобы проверить, что она каким-то образом не связана с операционной системой. В результате явление сохранилось: четырехъядерный процессор с частотой 2,4 ГГц значительно превзошел восьмиъядерный процессор с частотой 3,5 ГГц.

Это, конечно, действительно загадочно и совершенно нелогично. Кто-нибудь может сказать мне, что происходит?

1 ответ1

1

То, о чем вы говорите, это миф о мегагерцах, большее число не всегда означает лучшее, потому что фактическая скорость вычислений зависит от архитектуры и конструктивных факторов. Вот хорошая веб-страница по этому вопросу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .