Время от времени на LOR возникает топик с предложением потестироваться. Не избежал и я соблазна собрать небольшую статистику по процессорам и компиляторам.
Для теста предлагается скомпилировать и замерить время выполнения классического теста Whetstone, когда-то разработанного фирмой ICL для измерения скорости на вычислительных задачах.
Первый тест простой, не очень точный, но любопытный тем, что именно этот код использовался ещё для оценки быстродействия компьютеров в 80-е годы, включая БЭСМ-6 и другие.
И так ставим в систему fortran, если его ещё не было.
apt-get install gfortran
или как там у вас ставится, компилируем (опции в принципе те же, что у gcc) и запускаем этот код, обратите внимание там в комментариях внутри файла есть результаты для других машин
Сообщаем результат. Вместе с процессором, версией компилятора, режимом (32 бит или 64) и опциями оптимизации (-O2, -O3 и др., если были) У меня получилось: 64 бита, gfortran-4.5 c -O2 для Athlon 64 X2 5200+
**** TEST WHETSTONE ****
TOTAL TIME - 0.266 SEC. ( 0 MIN. 0.3 SEC.)
500.0 MILLION WHETSTONE, 1882.353 MILLION WHETSTONE/SEC
ARRAY ELEMENTS.......... 0.00 0.0%
ARRAY AS PARAMETER...... 0.01 2.9%
CONDITIONAL JUMPS....... 0.01 2.9%
INTEGER ARITHMETIC...... 0.00 0.0%
TRIG. FUNCTIONS......... 0.04 14.7%
PROCEDURE CALLS......... 0.05 17.6%
ARRAY REFERENCE......... 0.02 5.9%
STANDART FUNCTIONS...... 0.15 55.9%
Следующий тест посложнее, взят он с сайта Linux. Кластер и вообще говоря, предназначен для тестирования быстродействия кластера. Но можно и просто машину с многоядерным процессором (несколькими процессорами) протестировать и даже с одним процессором и ядром, как вырожденный случай.
Ставим библиотеку для параллельных вычислений - OpenMPI. У каждого по разному, я для этого ставил библиотеку libopenmpi, libopenmpi-dev, openmpi-common, openmpi-bin уже не помню всё выбирал или по зависимостям.
Качаем файлы whetstoned.f и mwips.f
компилируем
gfortran-4.5 -O2 mwips.f whetstoned.f -o mwips-45 -I /usr/include/mpi/ -lmpif77
Запускаем на одном процессоре. У меня получилось
Cluster Double Precision Whetstone Test ---------
Quantity of processors = 1
Calculation time = 260.52 seconds
Cluster speed = 2303 MWIPS
-------------------------------------------------
Cluster node N00 speed = 2303 MWIPS (ml)
-------------------------------------------------
Nodes minimal speed = 2303 MWIPS
Acceleration factor = 1.00
-------------------------------------------------
Затем на двух или сколько у вас ядер (процессоров), для этого используется mpirun
mpirun -np 2 mwips-45
у меня получилось
Cluster Double Precision Whetstone Test ---------
Quantity of processors = 2
Calculation time = 251.46 seconds
Cluster speed = 4772 MWIPS
-------------------------------------------------
Cluster node N00 speed = 2454 MWIPS (ml)
Cluster node N01 speed = 2418 MWIPS (ml)
-------------------------------------------------
Nodes minimal speed = 2418 MWIPS
Acceleration factor = 1.97
-------------------------------------------------
Интересно ещё сравнить с результатом, полученным с помощью Intel Fortran. Если верить вышеуказанному сайту быстродействие выше в несколько раз, чуть ли не на порядок, то есть GNU Fortran очень слаб для вычислений.
Добавление: действительно результат Intel Fortran резко лучше. Но также и у gfortran-4.6 он лучше.
Добавление второе: есть еще один тест, не дающий такой разницы между компиляторами gfortran разных версий - flops.f - компилировать с mpi