мы находимся в процессе изменения версии компилятора Intel с v14 на v18 в наших системах, и, запустив тесты, мы заметили, что O3 в некоторых случаях дает неправильные результаты, тогда как тот же код работает правильно с O3 и v14. Мне было интересно, каковы различия в оптимизации между этими двумя версиями и как я могу получить полный список флагов, которые активируются с помощью O3 в каждой версии. Всем заранее спасибо за помощь и предложения.
какие флаги компиляции активируются с помощью O3
Ответы (1)
Поведение -O3
задокументировано на веб-сайте Intel: https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference/compiler-options/compiler-option-details/optimization-options/o.html
O3
- Выполняет
O2
оптимизацию и обеспечивает более агрессивные преобразования циклов, такие как Fusion, Block-Unroll-and-Jam и сворачивающие операторы IF.- Этот параметр может устанавливать другие параметры. Это определяется компилятором в зависимости от того, какую операционную систему и архитектуру вы используете. Установленные параметры могут меняться от выпуска к выпуску.
- Когда O3 используется с опциями
-ax
или-x
(Linux) или с опциями/Qax
или/Qx
(Windows), компилятор выполняет более агрессивный анализ зависимостей данных, чем дляO2
, что может привести к увеличению времени компиляции.- Оптимизация
O3
может не привести к повышению производительности, если не выполняются преобразования циклов и доступа к памяти. Оптимизация может в некоторых случаях замедлить код по сравнению с оптимизацией O2.- Параметр
O3
рекомендуется для приложений с циклами, которые интенсивно используют вычисления с плавающей запятой и обрабатывают большие наборы данных.- Многие подпрограммы в общих библиотеках более оптимизированы для микропроцессоров Intel®, чем для микропроцессоров других производителей.
В нижней части страницы перечислены альтернативные варианты, в которых перечислены только -Od
(что отключает все оптимизации: возможно, это не то, что вам нужно).
Таким образом, похоже, что -O3
активирует оптимизации, которые не могут быть представлены с помощью других флагов (поэтому -O3
не имеет эквивалентной версии в длинной форме).
Глядя на страницу Intel о методах, используемых для высокоуровневой оптимизации, похоже, что они не могут быть включены по меню, так что с HLO все или ничего и включается с помощью O2
или O3
(за исключением того, что O2
использует подмножество методов O3
).
Сравните это с -Ofast
, у которого есть полный эквивалент:
Ofast
- Он устанавливает параметры компилятора
-O3
,-no-prec-div
и-fp-model fast=2
.
O3
, являются делом «все или ничего». Нет никаких флагов для выборочного включения/отключения этих оптимизаций.
- person Dai; 01.10.2020
O3
? Проходят ли ваши тесты, когда вы используетеO2
с v18? - person Dai   schedule 01.10.2020