Visual C++ .NET 2002/2003 引入多項強大優化選項。本文詳細解析 /G7 (Pentium 4/Athlon 優化)、**/arch:SSE/SSE2 (SIMD 指令集)**、**/GL (全程式優化/Whole Program Optimization)** 三大核心選項的原理、效能提升幅度、適用限制、組合使用效果,並附贈匯編碼對比實例。
// 源碼: return i * 15;
/G6 (預設, PPro/II/III 優化):
mov eax, DWORD PTR _i$[esp-4]
imul eax, 15 ; 單指令乘法,P4 上延遲高
/G7 (P4/Athlon 優化):
mov ecx, DWORD PTR _i$[esp-4]
mov eax, ecx
shl eax, 4 ; eax = i * 16
sub eax, ecx ; eax = i*16 - i = i*15
; 無 imul,P4 上 14 cycles 完成,更快但指令較長
| 選項 | 需求 CPU | 效果 |
|---|---|---|
| /arch:SSE | 支援 SSE (Pentium 3 / Athlon XP 以上) | 單精度浮點用 SSE 指令、CMOV/FCOMI 等條件移動/比較指令 |
| /arch:SSE2 | 支援 SSE2 (Pentium 4 / Athlon 64 以上) | 含 SSE 所有效果 + 雙精度浮點用 SSE2、64 位元位移用 SSE2 |
| 目標 | 編譯選項 | 備註 |
|---|---|---|
| 現代 CPU (P4+/Core/Athlon64+) 最大效能 | /O2 /GL /G7 /arch:SSE2 | Release 預設 /O2 包含速度優化 |
| 支援舊 CPU (P3/AthlonXP) 兼顧效能 | /O2 /GL /G7 /arch:SSE | /G7 仍有指令排序優化 |
| 極致體積優化 | /O1 /GL | /O1 偏向體積,/GL 仍啟用跨模組分析 |
| 偵錯建置 | /Od /Zi /RTC1 | 關閉優化,啟用運行時檢查 |
/LTCG:PGINSTRUMENT → 執行訓練負載 → /LTCG:PGOPTIMIZE,比純靜態 /GL 更精準。/fp:precise (預設) vs /fp:fast (允許重排/收縮,可能改變數值結果)。VC.NET 2003 優化三劍客:**/G7** (微架構指令排序)、**/arch:SSE2** (SIMD 向量化)、**/GL** (全程式分析/跨模組內聯/死碼消除)。組合使用可榨乾現代 CPU 效能,但需注意 **CPU 相容性** (SSE2 需 P4+) 與 **鏈接資源消耗**。現代 MSVC (VS2015+) 進一步支援 /arch:AVX2, /Qpar 自動平行化, /permissive- 標準一致性,建議持續更新工具鏈獲取最新優化紅利。