Рассмотрим решение уравнения Пуассона:


Intel Compiler 11

Применяемые опции оптимизации

  • -O0 - без оптимизации
  • -O1 - оптимизация для максимальной скорости, но без включения оптимизаций, которые увеличивают размер кода и при этом дают небольшой выигрыш по скорости
  • -О2 - оптимизация для максимальной скорости (используется по умолчанию)
  • -О3 - То же что и -O2, но включена более агрессивная оптимизация (в основном более агрессивная оптимизация для циклов), которая может не улучшать производительность для некоторых программ
  • -fast - включает в себя -O3, а также ряд других флагов оптимизации, таких как -ipo (межпроцедурный анализ, замена вызовов небольших функций на их inline подстановки) и -xHOST (в случае процессоров Intel эта опция включает специальную оптимизацию для процессоров Intel с поддержкой SSE инструкций, в случае остальных процессоров код с поддержкой SSE инструкций для остальных архитекур).

flags-O0-O1-O2-O3-fast
Решение уравнения Пуассона (сек.)19.989.046.996.96.51

Здесь применение более агрессивной оптимизации дает выигрыш по времени порядка 7%.

Использование опций оптимизации компилятора дает существенный выигрыш в производительности, но не всегда более агрессивная оптимизация даст лучший результат. Во многих случаях достаточно базовой оптимизации -O2. Для компилирования программ на кластере СКИФ МГУ для начала следует попробовать опцию -O2, а уже затем пытаться использовать более агрессивную оптимизацию. Для получения базовой информации об оптимизации по компилятору Intel можно набрать icc -help opt в коммандной строке при входе на кластер. Для получения расширенной информации об опциях оптимизации можно набрать icc -help advanced либо обратиться к документации.


GNU 4.1.2

Применяемые опции оптимизации:

  • -O0 - без оптимизации
  • -O1 - оптимизация для максимальной скорости, но без включения оптимизаций, которые увеличивают размер кода и при этом дают небольшой выигрыш по скорости
  • -О2 - оптимизация для максимальной скорости (используется по умолчанию)
  • -О3 - То же что и -O2, но включена более агрессивная оптимизация (в основном более агрессивная оптимизация для циклов), которая может не улучшать производительность для некоторых программ

flags-O0-O1-O2-O3
Решение уравнения Пуассона (сек.)22.539.299.319.26

Использование опций оптимизации дает прирост производительностиб, однако, в данном случае, использование агрессивной оптимизации не дает значительного эффекта. Для более подробной информации об оптимизации можно обратиться к документации.


PathScale Compiler Suite: Version 3.2

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

  • -O0 - без оптимизации
  • -O1 - оптимизация для максимальной скорости, но без включения оптимизаций, которые увеличивают размер кода и при этом дают небольшой выигрыш по скорости
  • -О2 - оптимизация для максимальной скорости (используется по умолчанию)
  • -О3 - То же что и -O2, но включена более агрессивная оптимизация (в основном более агрессивная оптимизация для циклов), которая может не улучшать производительность для некоторых программ
  • -O3 -ipa - тоже что и O3, но дополнительно включен межпроцедурный анализ
  • -O3 -OPT:Ofast - Более агрессивная небезопасная оптимизация, чем -O3.
  • -Ofast - Более агрессивная небезопасная оптимизация, чем -O3.
flags-O0-O1-O2-O3-O3 -ipa-O3 -OPT:Ofast-Ofast
Решение уравнения Пуассона (сек.)24.8215.619.317.797.657.677.56

Использование опций оптимизации дает существенный прирост производительности. Для более подробной информации об оптимизации можно обратиться к документации.


Portland Group Inc. Compilers 7.2-3

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

  • -O0 - без оптимизации
  • -O1 - оптимизация для максимальной скорости, но без включения оптимизаций, которые увеличивают размер кода и при этом дают небольшой выигрыш по скорости
  • -О2 - оптимизация для максимальной скорости (используется по умолчанию)
  • -О3 - То же что и -O2, но включена более агрессивная оптимизация (в основном более агрессивная оптимизация для циклов), которая может не улучшать производительность для некоторых программ
  • -fast - включает в себя -O2 и ряд других опций, таких как использование векторизации с поддержкой SSE инструкций.
  • -fastsse - то же самое что и -fast
  • -Mipa=fast - влючение межпроцедурного анализа
  • -fast -O3 - тот же самый -fast, только вместо -O2 используется -O3.
flags-O0-O1-O2-O3-fast-fastsse -Mipa=fast-fastsse -Mipa=fast -O3
Решение уравнения Пуассона (сек.)12.9510.317.957.876.416.426.37

Разработчики PGI рекомендуют в качестве универсальной оптимизации использовать -fastsse -Mipa=fast. Как видно из таблицы, время выполнения программы при использования оптимизации сократилось почти в 2 раза.

Для более подробной информации об опциях оптимизации можно набрать pgcc -help НУЖНАЯ_ОПЦИЯ_ОПТИМИЗАЦИИ либо обратиться к документации.


Сравнение

График наглядно демонстрирует, что на данном примере наилучшие результаты показали компиляторы Intel и Portland. Чуть хуже себя показал PathScale. И на последнем месте GNU Compiler.