SPEC CPU2000. Часть 5 ? Компиляторы. Дополнение 2


Идя навстречу нашим читателям, мы решили дополнить тесты компиляторов и результатами работы под операционной системой Linux. Отмечу, что я не считаю себя специалистом по ОС Linux, однако имею некоторый опыт общения с ней и, благодаря поддержке посетителей нашей конференции, практически все получилось сделать :)

В качестве дистрибутива был взят Red Hat Linux 7.3. На жестком диске было освобождено порядка 4Gb, и на него была произведена установка операционной системы с графической оболочкой GNOME. Тесты запускались из окна терминала. Напомню еще раз, что исследуется только скорость работы кода, получаемого различными компиляторами на тестах SPEC CPU2000, а не их "личные" качества в плане собственно компиляции. Еще одним моментом, который не стоит забывать, является ориентация теста на вычислительные приложения.

Конфигурация ПК аналогична прошлому дополнению:

  • Intel Pentium 4 1.7GHz
  • Epox 4T2A i850
  • 256MB PC800 RDRAM

В сравнении участвовали компиляторы:

Также на диаграммах вы увидите и результаты компиляторов от Intel при работе под Windows 2000 Pro.

gcc 2.95.3 и gcc 3.1 устанавливались в отдельные директории с компиляцией из исходных текстов. Отметим, что в состав этих пакетов не входит компилятор для языка Fortran 90, так что четыре теста из состава CFP2000 с gcc не могли быть проверены в принципе. Компиляторы Intel и PGI, в отличие от gcc, поставляются в виде исполняемых файлов и были установлены в систему согласно руководству.

Кстати, для анализа результатов полезно вспомнить, какие языки программирования в каких подтестах использовались:

CINT2000CFP2000
C164.gzip
C175.vpr
C176.gcc
C181.mcf
C186.crafty
C197.parser
C++252.eon
C253.perlbmk
C254.gap
C255.vortex
C256.bzip2
C300.twolf
F77168.wupwise
F77171.swim
F77172.mgrid
F77173.applu
C177.mesa
F90178.galgel
C179.art
C183.equake
F90187.facerec
C188.ammp
F90189.lucas
F90191.fma3d
F77200.sixtrack
F77301.apsi

Напомним, что SPEC CPU2000 проверяет и качество работы кода, сравнивая результаты с эталоном (например, побитное сравнение получаемого архива или рассчитанных коэффициентов и т.п.). Некоторые варианты оптимизации могут привести к отличиям в численных расчетах и иногда приходится их запрещать. Поскольку задачи получить любой ценой результаты этих компиляторов не стояло, то некоторые из подтестов не были выполнены по разным причинам. Это будет указано ниже.

Использовались ключи оптимизации:

  • gcc 2.95.3: -O3 -fomit-frame-pointer
  • gcc 2.96: -O3 -fomit-frame-pointer
  • gcc 3.1: -O3 -fomit-frame-pointer
  • gcc 3.1 /P4 (версия для Pentium 4): -O3 -march=pentium4 -ffast-math -fomit-frame-pointer
  • Intel 6.0 полностью аналогичны тесту под Win32 (используется SSE2, IPO)
  • pgi fast: -fast
  • pgi fastsse: -fastsse

Ключи были выбраны по рекомендациям из документации для компиляторов, другим источником информации послужила конференция на сайте.

Если с последними двумя компиляторами никаких проблем не возникло, то gcc показали себя немного хуже, и это необходимо учесть при анализе результатов:

  • тест 252.eon проходил проверку на качество только при компиляции с ключом -O0
  • gcc 3.1 /P4 не смог скомпилировать 176.gcc
  • тест 200.sixtrack с gcc 3.1 и gcc 3.1 /P4 не прошел проверку на качество

Сначала мы сравним производительность разных версий компилятора gcc между собой:



В целом, как и ожидалось, версия 2.96 является промежуточной. 2.95.3 - одна из лучших версий прошлого года. Последний майский релиз компилятора, версия 3.1, показывает лучшие результаты во всех тестах. Однако отметим, что попытка получить оптимизированный для Pentium 4 код в большинстве подтестов привела к незначительному снижению производительности. Только на 177.mesa мы видим пользу от SSE2 (напомним, что и компилятор Intel в наших прошлых тестах также успешно применил SIMD именно в этом тесте).

Перейдем к компиляторам PGI. У нас есть только одна версия, зато можно попробовать использовать различные опции оптимизации. Использование -fastsse включает генерацию кода для SIMD инструкций процессора Pentium 4, а также некоторые другие флаги оптимизации.



Как видно из диаграмм, на все тесты CINT2000 оптимизация под SIMD не повлияла никак. Видимо, компания не использует возможности SSE2 по работе с векторами из целых чисел. Что касается CFP2000, то 171.swim получил более чем 100% прирост, два других (177.mesa и 187.facerec) прибавили более 50%. А интегральная оценка подросла на 8%. Причем реальное использование SIMD — это не специфика только компилятора с языка Fortran, так как 177.mesa написан на C.

Теперь сравним компиляторы разных компаний между собой:



Как видно по диаграммам, в целом заметно лидирует Intel. И только в подтесте 256.bzip2 gcc 3.1 с ним сравнялся. К сожалению, тест 252.eon во всех версиях gcc работал только при компиляции без оптимизации, так что его низким результатам не стоит уделять много внимания.

PGI при работе с целыми числами практически везде отстает от gcc 3.1. На вещественной арифметике он ведет себя заметно лучше, и в некоторых тестах приближается к Intel, а на 191.fma3d даже опережает его. Особенно хочется отметить их близкие результаты в подтестах 171.swim и 179.art.

На последней паре диаграмм приведены результаты сравнения компиляторов Intel при работе в двух совершенно разных операционных системах — Windows 2000 Pro (win32) и Linux. Версии компиляторов одинаковые, ключи оптимизации — тоже, и поэтому сравнение можно расценить как исследование влияния операционной системы на скорость работы счетных задач.



Коротко результаты я бы прокомментировал так: "Природу не обманешь" :) Да, есть тесты, в которых разница превышает 30%, но для других она составляет менее 5%! Удивительное единодушие для нашего непостоянного времени.

Ну а в целом мы видим, что компилятор от Intel лучше себя чувствует в среде win32, чем в linux. По интегральным оценкам версия для linux проигрывает 7% и 3% в CINT2000 и CFP2000 соответственно. Наиболее заметно она опережает своего win32 собрата в подтесте — 183.equake — на 18%.

Заключение

Возвращаясь к основной теме этого цикла, тесту SPEC CPU2000, следует отметить, что мы еще раз убедились, что компиляторы от Intel по праву занимают первое место по цитируемости на www.spec.org для x86 систем.

Что касается собственно рассмотренных в этой статье компиляторов, то можно констатировать, что gcc в целом не сильно проигрывает своему коммерческому конкуренту — продукту компании Intel. Компилятор от PGI имеет некоторые положительные качества, но при работе с целочисленной арифметикой проигрывает бесплатному компилятору gcc.

Такие современные способы увеличения производительности, как использование SIMD, хорошо даются только автору этого набора команд — компании Intel.




8 июля 2002 Г.

SPEC CPU2000: 5 — . 2

SPEC CPU2000. 5 — . 2

, Linux. , Linux, , , :)

Red Hat Linux 7.3. 4Gb, GNOME. . , , SPEC CPU2000, "" . , , .

:

  • Intel Pentium 4 1.7GHz
  • Epox 4T2A i850
  • 256MB PC800 RDRAM

:

Intel Windows 2000 Pro.

gcc 2.95.3 gcc 3.1 . , Fortran 90, CFP2000 gcc . Intel PGI, gcc, .

, , :

CINT2000 CFP2000
C164.gzip
C175.vpr
C176.gcc
C181.mcf
C186.crafty
C197.parser
C++252.eon
C253.perlbmk
C254.gap
C255.vortex
C256.bzip2
C300.twolf
F77168.wupwise
F77171.swim
F77172.mgrid
F77173.applu
C177.mesa
F90178.galgel
C179.art
C183.equake
F90187.facerec
C188.ammp
F90189.lucas
F90191.fma3d
F77200.sixtrack
F77301.apsi

, SPEC CPU2000 , (, ..). . , . .

:

  • gcc 2.95.3: -O3 -fomit-frame-pointer
  • gcc 2.96: -O3 -fomit-frame-pointer
  • gcc 3.1: -O3 -fomit-frame-pointer
  • gcc 3.1 /P4 ( Pentium 4): -O3 -march=pentium4 -ffast-math -fomit-frame-pointer
  • Intel 6.0 Win32 ( SSE2, IPO)
  • pgi fast: -fast
  • pgi fastsse: -fastsse

, .

, gcc , :

  • 252.eon -O0
  • gcc 3.1 /P4 176.gcc
  • 200.sixtrack gcc 3.1 gcc 3.1 /P4

gcc :



, , 2.96 . 2.95.3 - . , 3.1, . , Pentium 4 . 177.mesa SSE2 (, Intel SIMD ).

PGI. , . -fastsse SIMD Pentium 4, .



, CINT2000 SIMD . , SSE2 . CFP2000, 171.swim 100% , (177.mesa 187.facerec) 50%. 8%. SIMD — Fortran, 177.mesa C.

:



, Intel. 256.bzip2 gcc 3.1 . , 252.eon gcc , .

PGI gcc 3.1. , Intel, 191.fma3d . 171.swim 179.art.

Intel — Windows 2000 Pro (win32) Linux. , — , .



: " " :) , , 30%, 5%! .

, Intel win32, linux. linux 7% 3% CINT2000 CFP2000 . win32 — 183.equake — 18%.

, SPEC CPU2000, , , Intel www.spec.org x86 .

, , gcc — Intel. PGI , gcc.

, SIMD, — Intel.