SPEC CPU2000. Часть 17. AMD64/EM64T и 64-битный код. Третья попытка


Прошло уже четыре месяца с тех пор, как мы тестировали 64-бит компиляторы на платформе AMD64. Сегодня мы продолжим наши исследования и посмотрим, изменилось ли что-то за это время, поскольку 32-х битный продукт от Intel часто был впереди 64-х битных компиляторов. А главной интригой будет появление 64-бит компилятора от Intel. Конечно, первоначально он создавался для процессоров этой компании с поддержкой технологии EM64T, однако и на AMD64 работает замечательно.

Тестирование проводилось на ПК следующей конфигурации:

  • процессор AMD Athlon 64 3500+ (2,2 ГГц, 512 КБ L2, Socket 939)
  • материнская плата Gigabyte K8NSNXP-939
  • два модуля памяти Kingston HyperX KHX4000/512 (работала как DDR400)
  • операционная система SuSE Linux 9.1 x86-64 (ядро 2.6.5-7.108, компилятор gcc 3.3.3-33)

Использовались компиляторы:

  • GNU gcc
  • PGI Workstation 5.2-2
  • Pathscale EKO Compiler Suite 1.3-108
  • Intel Compilers 8.0 (C/C++ 8.0.070, Fortran 8.0.050)
  • Intel Compilers 8.1 for EM64T (C/C++/Fortran 8.1.020)

Для тех, кто не следит за нашими публикациями, коротко расскажем об участниках.

Стандартный для Linux систем компилятор gcc остается самым популярным для некоммерческих применений. Мы использовали версию из поставки (точнее обновления) SuSE, поскольку новая (на момент проведения тестов) версия (мы попробовали 3.4.2) не дала существенного роста скорости в тестах SPEC CPU2000.

PGI является первым 64-битным коммерческим компилятором для AMD64. В комплект PGI Workstation 5.2 входят компиляторы с языков C, C++, Fortran и Fortran90 (а также отладчик и профайлер). Есть поддержка OpenMP и MPI. За время своего существования он сменил несколько (под)версий и сейчас остановился на 5.2-2. Отметим однако, что на самом деле новые версии PGI выходят чуть ли не каждый день, но производитель, к сожалению, не нумерует их и определить «свежесть» можно только по дате файла дистрибутива. Компилятор с языка Fortran из этого пакета используется и в коммерческих приложениях. В частности им скомпилирована 64-бит версия LS-DYNA для платформы AMD64.

PathScale EKO Compiler Suite появился относительно недавно, релиз первой (1.0) версии был весной этого года. Интересно, что этот продукт создавался сразу для работы именно на AMD64. В комплект входят компиляторы C, C++ и Fortran 77/90/95. Отладчиков и других утилит нет. Компилятор работает только под 64-х битными версиями Linux (заявлена поддержка RedHat, Fedora, SuSE). В конце августа была представлена версия 1.3 пакета. Производитель пытается привлечь внимание к качеству (скорости получаемого кода) своего продукта устраивая конкурсы типа «You'll Win if Your Code Runs 10% Faster». Кроме того на сайте приводятся многочисленные результаты тестирования в различных приложениях (партнером часто выступает «64bit Commercial Compiler» :) ). Поскольку у этого компилятора нет явной 32-х битной версии (но возможность получить 32-х битный код есть, более того, она используется в peak метрике), а компания любезно предоставляет в поставке полный конфигурационный файл для SPEC CPU2000, то для него дополнительно были получены peak метрики. Отметим, что эти результаты идут вне конкурса, поскольку для остальных компиляторов мы использует только base метрики.

Компиляторы компании Intel всегда показывали высокое качество оптимизации кода как на синтетических тестах, так и в жизни. Крупнейший производитель процессоров смог составить серьезную конкуренцию чисто софтверным компаниям. Конечно, можно посетовать на то, что он был в курсе всех тонкостей работы своих железных продуктов, однако и значительные инвестиции в R&D тоже сыграли роль. Мы тестируем компиляторы Intel начиная с версии 5.0 и каждая новая версия приносит значимые улучшения в скорости получаемого кода.

Во многом благодаря именно этим компиляторам, процессоры Intel Pentium 4 показывают высокие результаты на ресурсоемких задачах, если разработчик не поленился использовать компиляторы Intel :). Ну и конечно широкое распространение SIMD тоже можно приписать им.

Интересно, что и на процессорах других :) компаний компиляторы Intel показывают отличную скорость. Правда с версии 8.0 компания ввела проверку на производителя CPU, однако возможность оптимизации (включая векторизацию и SIMD) под «generic» процессор осталась. Кстати только недавно 64-бит компиляторы для AMD64 смогли обойти в SPECfp_base2000 32-х битный компилятор Intel, а в SPECint_base2000 он продолжает быть лидерами.

Выхода компиляторов для EM64T — версии Intel 64-бит технологии, расширяющей IA32 — ждали все. Поскольку процессоры с EM64T были представлены этим летом, то компания не могла оставить их без программной поддержки и уже осенью увидел свет соответствующий компилятор. В этой специальной версии компилятора предусмотрена генерация кода как для процессоров Intel с EM64T (ядра Prescott, SSE3) так и для совместимых с 64-х битным режимом процессоров других компаний (уже без SSE3 и некоторых тонких оптимизаций работы с памятью). Конечно под последними следует понимать AMD Athlon 64/Opteron :).

При проведении тестов использовались следующие ключи оптимизации:

  • gcc/g++/g77: -O3 -funroll-all-loops +PGO (-fprofile-arcs/-fbranch-probabilities), дополнительный ключ -m32 для теста 32-х битного кода;
  • PGI: -fastsse -Mipa=fast (два прохода компилятора для использования IPA);
  • Pathscale: конфигурационный файл из поставки пакета
  • Intel 8.0: -xW -O3 -ipo +FDO
  • Intel 8.1/EM64T: -xW -O3 -ipo +FDO

Как и ранее, результаты следует отнести по терминологии SPEC к «estimated», поскольку не все компиляторы смогли отработать полный комплект тестов (у gcc нет компилятора Fortran 90, а Intel/EM64T не смог скомпилировать 252.eon). Однако все остальные формальные требования были выполнены.

  gcc32 gcc64 pgi32 pgi64 psc1.3 psc1.3 peak ic80.xW ic81e.xW
164.gzip 1006 1164 777 1009 1347 1351 1192 1214
175.vpr 871 930 801 804 910 936 982 897
176.gcc 1190 1217 1105 1062 1218 1219 1047 1156
181.mcf 1029 667 977 670 665 1043 1041 683
186.crafty 1284 1873 1013 1498 1881 1898 1542 1930
197.parser 1028 974 748 707 927 1110 1175 838
252.eon 1173 1868 293 390 2035 2184 1589  
253.perlbmk 1438 1507 1234 1217 1490 1597 1486 1450
254.gap 1200 1162 967 977 1386 1383 1497 1221
255.vortex 1513 1575 1308 1381 2139 2331 2064 2040
256.bzip2 979 1078 893 962 1125 1133 1070 1076
300.twolf 1005 868 960 827 926 1108 1074 883
SPECint_base2000 (est.) 1128 1186 875 907 1261 1380 1280  

В SPECint_base2000 все компиляторы ведут себя примерно одинаково, кроме PGI,  рекордно низкий результат которого в 252.eon не позволяет получить достойную интегральную оценку (спорный вопрос — стоит ли глубоко «копаться» в синтетике, или проще ограничиться интегральными оценками — предлагается решать в частном порядке). Если же искать лидера, то по интегральной оценке им является 32-х битный компилятор от Intel (напомним, что peak результат Pathscale идет вне конкурса). С ним серьезно соперничает Pathscale, по отдельным тестам разница варьируется от -36% до +28%. Интегральная оценка у него меньше всего на 1,5%.

gcc и PGI в общем не так уж и плохи, на некоторых задачах они показывают хорошую скорость. Intel/EM64T (пока?) проигрывает своему предшественнику и может рассматриваться сейчас только как потенциально интересный компилятор.

Так что резюме по CINT2000 будет в этот раз таким: если вам важна скорость, то стоит попробовать на своей задаче все описанные компиляторы, очень может быть, что один из них сможет существенно поднять скорость выполнения кода.

С точки зрения совместимости, уверенная компиляция двенадцати разнообразных приложений (за единственным исключением) не дает повода сомневаться в качестве рассмотренных продуктов.

  gcc32 gcc64 pgi32 pgi64 psc1.3 psc1.3 peak ic80.xW ic81e.xW
168.wupwise 1089 1245 1456 1668 1694 1965 1713 1863
171.swim 1413 1443 2041 2111 2372 2433 2026 1983
172.mgrid 749 857 1138 1236 1465 1470 1165 1237
173.applu 836 949 1253 1335 1512 1820 1234 1356
177.mesa 1063 1626 983 1198 1668 1869 1708 1532
178.galgel     2027 2264 2202 2421 1786 1815
179.art 600 1129 1200 1169 1315 1858 1367 2197
183.equake 1471 1380 1193 1193 1496 1525 1412 1620
187.facerec     1481 2124 1751 1929 1456 1436
188.ammp 825 1022 843 981 1015 1083 910 996
189.lucas     1557 1613 1535 1774 1625 1774
191.fma3d     1346 1461 1358 1441 1309 1384
200.sixtrack 455 550 654 673 665 669 558 550
301.apsi 680 828 1042 1169 1201 1211 1020 1083
SPECfp_base2000 (est.)     1245 1373 1455 1598 1317 1414

В тестах CFP2000 лидером остается Pathscale. На втором месте идет новый продукт от Intel, который только в одном подтесте существенно проиграл своему собрату. При этом интегральная оценка возросла на 7,4%. Однако этого оказалось мало, чтобы занять позицию лидера, от которого его отделяет всего около 3%.

PGI отстает от лидера на 5,6% по SPECfp_base2000, однако по отдельным тестам идет разброс от -28% до +21%.

Судя по результатам, срочно бежать менять компилятор конечно не стоит. Однако, как и для CINT2000, можно сказать, что и для счетных задач есть смысл попробовать другие компиляторы, благо разброс скорости исполнения различных подтестов достаточно велик.



Кроме тестов на платформе AMD64 мы смогли провести несколько измерений и на Intel Xeon/Nocona. Использовались те же самые версии ОС от SuSE. Причем инсталлировались именно первоначальные релизы — от апреля 2004 года. Конечно, после установки мы обновили ОС, однако никаких проблем с работоспособностью замечено не было. Следует отметить, что использовалась не сильно нагруженная машина (2 х Intel Xeon 3.0 ГГц (Nocona), Supermicro X6DA8-G2 (Intel E7525), 2x512 МБ DDR2-400 SDRAM и жесткий диск Western Digital WD360 (SATA)) и, на наш взгляд, не следует воспринимать результат как «100% железно все работает!», однако этот факт совместимости, безусловно, положительный.

На этой системы были проведены тесты SPEC CPU2000 с компиляторами gcc, PGI и Intel. К сожалению Pathscale не успели прогнать, но постараемся исправиться в следующем материале :).

Ключи оптимизации и остальные настройки аналогичны приведенным выше для AMD64 (конечно для IC использовался ключ -xP вместо -xW). Отметим, что в таблице нет результатов для ic81e.xP для тестов 252.eon, 253.perlbmk, 254.gap и 255.vortex. Скорее всего, по 252.eon его не будет никогда (тест использует старый метод работы с потоками, который, видимо, не будет поддерживаться новыми версиями компиляторов), а вот для других трех тестов, возможно, что-то и получится в новых релизах.

Абсолютные результаты рассматривать в рамках вечного спора Intel vs AMD практически нет смысла — процессор использовался не самый быстрый, да и использование DDR2 пока играет скорее отрицательную роль.

  gcc32 ic80.xP pgi32 gcc64 ic81e.xP pgi64
164.gzip 729 984 737 846 1016 791
175.vpr 739 822 685 708 743 658
176.gcc 1378 1593 1224 1244

1366

1123
181.mcf 845 853 806 498 564 488
186.crafty 868 1109 698 1249 1305 940
197.parser 840 1096 704 841 881 634
252.eon 756 1167 188 1168   208
253.perlbmk 1201 1531 1192 1268   1130
254.gap 1182 1588 1148 1239   1087
255.vortex 1239 2125 1195 1449   1245
256.bzip2 776 935 795 893 964 810
300.twolf 1004 1147 986 791 850 716
SPECint_base2000 (est.) 940 1197 790 974   749
  gcc32 ic80.xP pgi32 gcc64 ic81e.xP pgi64
168.wupwise 1042 2314 1241 1016 2561 1026
171.swim 1559 1919 1949 1453 1909 1915
172.mgrid 714 1226 1116 695 1317 1035
173.applu 752 1227 1276 816 1287 1063
177.mesa 769 1300 934 1324 1526 1030
178.galgel   2063 2197   2030 2100
179.art 413 891 846 800 2725 807
183.equake 1555 1538 1409 1413 1814 1282
187.facerec   1571 1275   1643 1590
188.ammp 561 669 712 736 846 660
189.lucas   1704 1534   1648 1353
191.fma3d   1177 1143   1352 1039
200.sixtrack 286 539 514 406 530 339
301.apsi 582 911 864 620 972 816
SPECfp_base2000 (est.)   1260 1136   1461 1050

Как видно по результатам, наиболее предпочтительным для Xeon/Nocona является компилятор от Intel. Впрочем, это можно было предположить и до тестирования :). Однако то, что одна из первых 64-х битных версий вполне работоспособна безусловно радует.

Отметим, что код, полученный с помощью gcc и PGI работал на новом процессоре Intel  безо всяких плясок с бубном, что очень приятно и вселяет надежду, что и другое ПО, уже портированное на AMD64, сможет заработать на EM64T без особых проблем.

Интересно сравнить эффект от перехода на 64-бит на разных платформах. Безусловно, в таком сравнении очень много условностей — далеко не однозначен выбор процессоров, платформ, опций компилятора, и поэтому рекомендуем не делать далеко идущих выводов, а скорее рассматривать эти цифры как еще один кусочек информации о 64 vs 32, Intel vs AMD, gcc vs IC и так далее. Тем более что все параметры все равно никогда не выровнять, так что в любом случае придется ориентироваться именно на такие цифры. В следующей таблице приводится % изменений от перехода с 32- на 64-бит ПО.

  gcc/Intel gcc/AMD ic/Intel ic/AMD pgi/Intel pgi/AMD
164.gzip 16,05 15,71 3,25 1,85 7,33 29,86
175.vpr -4,19 6,77 -9,61 -8,66 -3,94 0,37
176.gcc -9,72 2,27 -14,25 10,41 -8,25 -3,89
181.mcf -41,07 -35,18 -33,88 -34,39 -39,45 -31,42
186.crafty 43,89 45,87 17,67 25,16 34,67 47,88
197.parser 0,12 -5,25 -19,62 -28,68 -9,94 -5,48
252.eon 54,50 59,25     10,64 33,11
253.perlbmk 5,58 4,80   -2,42 -5,20 -1,38
254.gap 4,82 -3,17   -18,44 -5,31 1,03
255.vortex 16,95 4,10   -1,16 4,18 5,58
256.bzip2 15,08 10,11 3,10 0,56 1,89 7,73
300.twolf -21,22 -13,63 -25,89 -17,78 -27,38 -13,85
SPECint_base2000 3,62 5,14     -5,19 3,66
  gcc/Intel gcc/AMD ic/Intel ic/AMD pgi/Intel pgi/AMD
168.wupwise -2,50 14,33 10,67 8,76 -17,32 14,56
171.swim -6,80 2,12 -0,52 -2,12 -1,74 3,43
172.mgrid -2,66 14,42 7,42 6,18 -7,26 8,61
173.applu 8,51 13,52 4,89 9,89 -16,69 6,54
177.mesa 72,17 52,96 17,38 -10,30 10,28 21,87
178.galgel     -1,60 1,62 -4,42 11,69
179.art 93,70 88,17 205,84 60,72 -4,61 -2,58
183.equake -9,13 -6,19 17,95 14,73 -9,01 0,00
187.facerec     4,58 -1,37 24,71 43,42
188.ammp 31,19 23,88 26,46 9,45 -7,30 16,37
189.lucas     -3,29 9,17 -11,80 3,60
191.fma3d     14,87 5,73 -9,10 8,54
200.sixtrack 41,96 20,88 -1,67 -1,43 -34,05 2,91
301.apsi 6,53 21,76 6,70 6,18 -5,56 12,19
SPECfp_base2000     15,98 7,37 -7,57 10,28

Из цифр видно, что gcc в практически одинаково ведет себя на разных процессорах — если есть существенный рост или падение, то он наблюдается (почти всегда) на обеих платформах. Так что для готовых дистрибутивов Linux эффект от перехода на 64 бит не будет зависеть от того, на какую версию 64 бит переходить.

Для компиляторов Intel ситуация интереснее. Во-первых отметим значительное снижение показателей во многих тестах CINT2000 на обеих платформах. Хочется надеяться, что в новых версиях компилятора это поправят. При этом на AMD иногда эффект иногда «чуть более положительный». Что касается CFP2000, то почти +16% в интегральной оценке смотрятся неплохо. На AMD эффект похуже, но с этим уже ничего не сделаешь :(. Остается только использовать другие компиляторы.

PGI на процессоре Intel в режиме 64-бит показал себя совсем плохо. Увы, эта комбинация не может быть рекомендована для использования на счетных задачах. Хотя стоит отметить, что с распространением процессоров с EM64T компилятор могут и «подправить». А для AMD продукт Portland Group на тестах CFP2000 показывает рост на подавляющем числе задач.

Заключение

Появление нового конкурента на рынке 64-х битных компиляторов для платформы AMD64/EM64T оживило наметившийся было застой. Конечно Intel 8.1/EM64T при работе на платформе AMD не раскрывает полных возможностей процессора, однако это не мешает ему уверенно занять второе место после Pathscale по SPECfp_base2000 на AMD Athlon 64. С тестами SPECint_base2000 дело обстоит хуже — к сожалению новый продукт от Intel отстает даже от своего 32-х битного партнера.

Что касается версии 64-битного процессора от компании Intel, то первые испытания показали, что существующее 64-х битное ПО для платформы AMD64 вполне работоспособно и на новом процессоре конкурента. Особенно радует наличие полного комплекта компиляторов и их совместимость с AMD64. Так что скорее всего портирование на EM64T будет заключаться всего лишь в проверке функционирования ПО на новом ядре от Intel.




Дополнительно

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.