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). Однако все остальные формальные требования были выполнены.

 gcc32gcc64pgi32pgi64psc1.3psc1.3 peakic80.xWic81e.xW
164.gzip1006116477710091347135111921214
175.vpr871930801804910936982897
176.gcc11901217110510621218121910471156
181.mcf102966797767066510431041683
186.crafty12841873101314981881189815421930
197.parser102897474870792711101175838
252.eon11731868293390203521841589 
253.perlbmk14381507123412171490159714861450
254.gap120011629679771386138314971221
255.vortex15131575130813812139233120642040
256.bzip297910788939621125113310701076
300.twolf100586896082792611081074883
SPECint_base2000 (est.) 11281186875907126113801280 

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

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

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

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

 gcc32gcc64pgi32pgi64psc1.3psc1.3 peakic80.xWic81e.xW
168.wupwise10891245145616681694196517131863
171.swim14131443204121112372243320261983
172.mgrid749857113812361465147011651237
173.applu836949125313351512182012341356
177.mesa1063162698311981668186917081532
178.galgel    202722642202242117861815
179.art6001129120011691315185813672197
183.equake14711380119311931496152514121620
187.facerec  148121241751192914561436
188.ammp825102284398110151083910996
189.lucas  155716131535177416251774
191.fma3d  134614611358144113091384
200.sixtrack455550654673665669558550
301.apsi680828104211691201121110201083
SPECfp_base2000 (est.)  124513731455159813171414

В тестах 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 пока играет скорее отрицательную роль.

 gcc32ic80.xPpgi32gcc64ic81e.xPpgi64
164.gzip7299847378461016791
175.vpr739822685708743658
176.gcc1378159312241244

1366

1123
181.mcf845853806498564488
186.crafty868110969812491305940
197.parser8401096704841881634
252.eon75611671881168 208
253.perlbmk1201153111921268 1130
254.gap1182158811481239 1087
255.vortex1239212511951449 1245
256.bzip2776935795893964810
300.twolf10041147986791850716
SPECint_base2000 (est.)9401197790974 749
 gcc32ic80.xPpgi32gcc64ic81e.xPpgi64
168.wupwise104223141241101625611026
171.swim155919191949145319091915
172.mgrid7141226111669513171035
173.applu7521227127681612871063
177.mesa7691300934132415261030
178.galgel 20632197 20302100
179.art4138918468002725807
183.equake155515381409141318141282
187.facerec 15711275 16431590
188.ammp561669712736846660
189.lucas  17041534 16481353
191.fma3d 11771143 13521039
200.sixtrack286539514406530339
301.apsi582911864620972816
SPECfp_base2000 (est.) 12601136 14611050

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

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

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

 gcc/Intelgcc/AMDic/Intelic/AMDpgi/Intelpgi/AMD
164.gzip16,0515,713,251,857,3329,86
175.vpr-4,196,77-9,61-8,66-3,940,37
176.gcc-9,722,27-14,2510,41-8,25-3,89
181.mcf-41,07-35,18-33,88-34,39-39,45-31,42
186.crafty43,8945,8717,6725,1634,6747,88
197.parser0,12-5,25-19,62-28,68-9,94-5,48
252.eon54,5059,25  10,6433,11
253.perlbmk5,584,80  -2,42-5,20-1,38
254.gap4,82-3,17 -18,44-5,311,03
255.vortex16,954,10 -1,164,185,58
256.bzip215,0810,113,100,561,897,73
300.twolf-21,22-13,63-25,89-17,78-27,38-13,85
SPECint_base20003,625,14  -5,193,66
 gcc/Intelgcc/AMDic/Intelic/AMDpgi/Intelpgi/AMD
168.wupwise-2,5014,3310,678,76-17,3214,56
171.swim-6,802,12-0,52-2,12-1,743,43
172.mgrid-2,6614,427,426,18-7,268,61
173.applu8,5113,524,899,89-16,696,54
177.mesa72,1752,9617,38-10,3010,2821,87
178.galgel    -1,601,62-4,4211,69
179.art93,7088,17205,8460,72-4,61-2,58
183.equake-9,13-6,1917,9514,73-9,010,00
187.facerec  4,58-1,3724,7143,42
188.ammp31,1923,8826,469,45-7,3016,37
189.lucas    -3,299,17-11,803,60
191.fma3d  14,875,73-9,108,54
200.sixtrack41,9620,88-1,67-1,43-34,052,91
301.apsi6,5321,766,706,18-5,5612,19
SPECfp_base2000  15,987,37-7,5710,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.




4 октября 2004 Г.