覚書。
A. -O3とMSVCの最適化レベルについて
GCC / Clang 編(Unix系に多い)
-O0:最適化なし
-O1:軽めの最適化
-O2:基本的な最適化(バランス型)
-O3:最大限の最適化(アンローリング含む・コード肥大化あり)
-Ofast:未定義動作上等(規格違反でも速度最優先)
-O3 では明示的にループアンローリング等が入る。
MSVC 編(Visual Studio系)
MSVCの最適化オプション(IDEの設定などで使うもの):
オプション 説明
/Od 最適化なし(デバッグ向き)
/O1 サイズ優先最適化(コード小さく)
/O2 スピード優先最適化(ガチ)
/Ox 最大限最適化(/O2 + 明示的強化)※非推奨
/GL リンク時のコード生成最適化(LTCG)
MSVCにおける/O2が、GCCでの-O3に相当する最強チューニング。
MSVCでは:
ループアンローリングも /O2 で自動的に入る(条件付き)
/Oxはマイクロソフトも「非推奨」っぽく扱っている(古い)
参考:
/O2 + /GL + /favor:INTEL64 + /arch:AVX2 あたりでガチ組み
引用 ChatGPT