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 ГГц.
Это, конечно, действительно загадочно и совершенно нелогично. Кто-нибудь может сказать мне, что происходит?