Исходя из предыдущего вопроса , я поиграл с настройками оптимизатора в моей сборке релиза, чтобы увидеть, какие преимущества можно извлечь из использования оптимизации компилятора. До сих пор я использовал / Ob1 (только inline, где inline явно указан) и / Oi (Включить встроенные функции). Я попытался изменить это, чтобы включить / Ot (благоприятный быстрый код), / Oy (пропустить указатели фреймов) и / Ob2 (встроенный любой подходящий), и, к моему удивлению, набор регрессии, который занимал 2 часа 58 минут, теперь занял 3 часа 16 минут. Мое первое предположение состояло в том, что мое собственное встраивание было более агрессивным, чем компилятор, но переход от / Ob2 к / Ob1 только улучшил ситуацию до 3h12m. Я все еще запускаю больше тестов, но может показаться, что в некоторых случаях / Ot (поддержка быстрого кода) на самом деле замедляет работу. Программное обеспечение является многопоточным и требует значительных вычислений (моделирование поверхностей, манипуляции и визуализация), и уже было в значительной степени оптимизировано вручную на основе результатов профилировщика. Программа также работает с большими объемами данных и довольно часто использует #pragma pack (4).
Так вот вопросы. Для оптимизированной вручную программы может ли оптимизация компилятора в VS2008 принести больше вреда, чем пользы? Иными словами, существуют ли известные документированные сценарии, в которых оптимизация компилятора снижает производительность? (Нет. Профилирование оптимизированного компилятором кода является болезненным, поэтому до настоящего времени профилирование выполнялось для неоптимизированного кода).
Редактировать Согласно советам Коди Грея и других, я добавил / O2 в настройки оптимизации и повторно выполнил мой набор тестов. Это привело к времени выполнения 3 ч 01, которое было сопоставимо с минимально оптимизированным прогоном. Учитывая (немного устаревшие) инструкции MSDN по оптимизации и публикацию из GOZ, я собираюсь проверить / O1, чтобы увидеть, действительно ли меньше в моем случае быстрее. Обратите внимание, что текущий EXE-файл составляет около 11 МБ. Я также попробую собрать VS2010 вместе и посмотрю, как это будет.
Edit2 С / O1 время выполнения составило 3 часа, а exe-файл 11 Мб был на 62k меньше. Обратите внимание, что причина этого и предыдущего связанного сообщения заключалась в том, чтобы проверить, перевешивают ли преимущества включения оптимизации компилятора недостатки с точки зрения профилирования и отладки. В данном конкретном случае они, по-видимому, не являются таковыми, хотя я признаюсь, что был удивлен, что ни одна из попытавшихся комбинаций не принесла какого-либо преимущества и некоторого ощутимого снижения производительности. FWIW, согласно этому предыдущему потоку , я, как правило, делаю большую часть своей оптимизации во время разработки и использую профилировщик в основном для проверки предположений проектирования, я думаю, что я буду придерживаться этого подхода. У меня будет последний финал VS2010 с включенной оптимизацией всей программы, и я оставлю все как есть.
Спасибо за все отзывы!