Подтвердить что ты не робот

Кто-нибудь здесь имеет сравнительный компилятор Intel С++ и GCC?

Я не уверен, должен ли я публиковать этот вопрос здесь, потому что это, кажется, ориентированный на программирование веб-сайт.

В любом случае, я думаю, что здесь должны быть некоторые гуру, которые это знают.

Теперь у меня есть сервер AMD Opteron, работающий с CentOS 5. Я хочу иметь компилятор для довольно большой программы на основе С++ Boost. Какой компилятор я должен выбрать?

4b9b3361

Ответ 1

Надеюсь, это поможет больше, чем болит:)

Я сделал небольшую перестрелку, когда-то более года назад, и я ухожу из памяти.

  • GCC 4.2 (Apple)
  • Intel 10
  • GCC 4.2 (Apple) + LLVM

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

Время компиляции: компилятор Intel был самым медленным компилятором - более чем в 2 раза медленнее, чем другой опубликованный.

GCC обработал глубокие шаблоны очень хорошо по сравнению с Intel.

Компилятор Intel генерировал огромные объектные файлы.

GCC + LLVM дал наименьший двоичный файл.

Сгенерированный код может иметь значительную дисперсию из-за конструкции программы и где можно использовать SIMD.

Для того, как я пишу, я обнаружил, что GCC + LLVM создал лучший код. Для программ, которые я написал до того, как я серьезно относился к оптимизации (как я писал), Intel, как правило, лучше.

Результаты Intel варьировались; он обрабатывал некоторые программы намного лучше, а некоторые программы намного хуже. Он обрабатывал сырую обработку очень хорошо, но я даю GCC + LLVM торт, потому что, когда он помещается в контекст более крупной (нормальной) программы... это лучше.

Intel выиграла из-за коробки, количество хрустов на огромных наборах данных.

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

Я никогда не измерял плохо написанные программы в этом тесте (т.е. результаты превосходили распределения популярных библиотек производительности).

Наконец, программы были написаны в течение нескольких лет, используя GCC в качестве основного компилятора за это время.

Обновление: я также включил оптимизацию/расширения для Core2Duo. Программы были достаточно чистыми, чтобы обеспечить строгий псевдоним.

Ответ 3

Команда MySQL однажды сообщила, что icc дал им около 10% -ного повышения производительности по сравнению с gcc. Я попытаюсь найти ссылку.

В общем, я обнаружил, что "родные" компиляторы работают лучше, чем gcc на своих соответствующих платформах.

Редактирование: Я был немного выключен. Типичная прибыль составляла 20-30%, а не 10%. В некоторых случаях с узкими краями было удвоение производительности. http://www.mysqlperformanceblog.com/files/presentations/LinuxWorld2004-Intel.pdf

Ответ 4

Я полагаю, это зависит от кода, но с кодовой базой, над которой я сейчас работаю, ICC 11.035 дает почти 2x улучшение по сравнению с gcc 4.4.0 на Xeon 5504.

Параметры icc: -O2 -fno-alias
Параметры gcc: -O3 -msse3 -mfpmath=sse -fargument-noalias-global

Параметры специфичны только для файла, содержащего интенсивный вычислительный код, где я знаю, что нет наложения псевдонимов. Однопоточный код с 5-уровневым вложенным циклом.

Хотя autovectorization включен, ни один компилятор не генерирует векторизованный код (а не ошибку компиляторов)


Обновление (2015/02/27): Оптимизируя некоторый код геофизики (Q2, 2013) для работы на Sandy Bridge-E Xeons, у меня была возможность сравнить производительность ICC 11.1 с GCC 4.8.0, а GCC теперь генерирует более быстрый код, чем ICC. Код, сделанный с использованием встроенных AVX-функций, и использовал 8-позиционные векторизованные инструкции (ни один из компиляторов не автогенерировал код должным образом из-за определенных требований к компоновке данных). Кроме того, реализация GCC LTO (с ядром IR, встроенным в файлы .o) была намного проще в управлении, чем в ICC. GCC с LTO работает примерно в 3 раза быстрее, чем ICC без LTO. Я не могу найти номера прямо сейчас для GCC без LTO, но я помню, что он был еще быстрее, чем ICC. Это отнюдь не общее выражение о производительности МУС, но результатов было достаточно для того, чтобы мы продолжили работу с GCC 4.8. *.

Ожидание GCC 5.0 (http://www.phoronix.com/scan.php?page=article&item=gcc-50-broadwell)!

Ответ 5

Мы используем компилятор Intel для нашего продукта (DB2), Linux и Windows IA32/AMD64 и OS X (т.е. все наши порты платформы Intel, кроме SunAMD).

Я не знаю числа, но производительность достаточно хороша, чтобы мы:

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

Ответ 6

PHP. Компиляция из источника с помощью ICC, а не GCC, должна приводить к улучшению скорости от 10% до 20% - http://www.papelipe.no/tags/ez_publish/benchmark_of_intel_compiled_icc_apache_php_and_apc

MySQL. Компиляция из источника с помощью ICC, а не GCC, должна приводить к улучшению скорости на 25% до 50% - http://www.mysqlperformanceblog.com/files/presentations/LinuxWorld2005-Intel.pdf

Ответ 7

Я работал над довольно большой системой обработки сигналов, которая работала на большом кластере. Раньше мы считали, что компилятор с тяжелой математикой дает нам примерно на 10% меньше нагрузки процессора, чем GCC. Это очень ненаучно, но это был наш опыт (это было около 18 месяцев назад).

Что было бы интересно, так это если бы мы могли использовать математические библиотеки Intel, которые более эффективно используют свой набор микросхем.

Ответ 8

Я использовал UnixBench (v. 5.1.3) в openSUSE 12.2 (ядро 3.4.33-2.24 по умолчанию x86_64) и скомпилировал его сначала с помощью GCC, а затем с компилятором Intel.

С 1 параллельной копией UnixBench, скомпилированный с Intel, примерно на 20% быстрее, чем версия, скомпилированная с помощью GCC. Однако это скрывает огромные различия. Dhrystone примерно на 25% медленнее с компилятором Intel, в то время как Whetstone работает в 2 раза быстрее.

С четырьмя экземплярами UnixBench, работающими параллельно, улучшение компилятора Intel по GCC составляет всего 7%. Опять же, Intel намного лучше на Whetstone ( > 200%) и медленнее у Dhrystone (около 20%).

Ответ 9

Многие оптимизации, которые компилятор Intel выполняет, требуют регулярного синтаксиса источника и использования -O3 -ffast-math для gcc. К сожалению, компонент -funsafe-math-optimizations -ffast-math -O3 -march = native оказался несовместимым с -fopenmp, поэтому я должен разбить исходные файлы на группы с разными параметрами в Makefile. Сегодня я столкнулся с сбоем, когда сборка g++ с использованием -O3 -ffast-math -fopenmp -march = native смогла записать на экран, но не перенаправить файл. Одно из наиболее вопиющих различий, на мой взгляд, - это оптимизация icpc только для std:: max и min, где gcc/g++ хочет, чтобы fmax | min [f] с -ffast-math менял свой смысл от стандартного.