測試背景與環境
| 項目 | 配置 |
| 處理器 | Intel Pentium 4 1.8 GHz |
| 記憶體 | 256 MB |
| 作業系統 | Windows XP |
| 開發環境 | Visual C++ 6.0 + Intel C++ 9.0 |
| 測試方法 | 各項目重複 5~10 次取平均,忽略執行緒本身開銷 |
一、執行緒額外開銷測試
測試指標與方法
| 指標 | 測試場景 |
| 執行緒切換時間 | 兩同優先級執行緒交替運行,累計切換次數 |
| 高優先級搶佔時間 | 高/低優先級執行緒互相降低優先級觸發搶佔 |
| 訊號量響應時間 | 兩執行緒透過雙訊號量交替同步 |
| 異常轉向/恢復時間 | 單執行緒重複拋出/捕獲 C++ 異常 |
測試結果 (微秒)
| 指標 | VC6 編譯 | Intel C++ 9.0 | 提升幅度 |
| 執行緒切換 | 1.12 | 1.09 | ~2.7% |
| 高優先級搶佔 | 2.27 | 2.26 | ~0.4% |
| 訊號量響應 | 2.38 | 2.37 | ~0.4% |
| 異常處理 | 14.59 | 9.21 | 36.9% |
結論
- Intel 編譯器對同步原語(切換、搶佔、訊號量)幾乎無優化,因這些主要由 OS 核心實現,編譯器難以介入
- 異常處理顯著加速 (37%):Intel 對堆疊展開、RTTI 查找、catch 區塊定位等編譯器層面邏輯有深度優化
- 推測中斷處理同樣受益(異常與中斷機制相似)
二、數學函數運算測試
測試配置
- 雙精度參數,各函數執行 1,000,000 次
- 相同參數序列,Release 模式,Intel 優化選項啟用
結果 (秒)
| 函數 | VC6 | Intel C++ 9.0 | 加速比 | 耗時比例 |
| sin | 0.171 | 0.054 | 3.17x | 31.6% |
| cos | 0.139 | 0.097 | 1.43x | 69.8% |
| tan | 0.228 | 0.081 | 2.81x | 35.5% |
| sqrt | 0.046 | 0.031 | 1.48x | 67.4% |
| pow | 0.373 | 0.104 | 3.59x | 27.9% |
| fmod | 0.262 | 0.049 | 5.35x | 18.7% |
| log10 | 0.120 | 0.062 | 1.94x | 51.7% |
結論
- Intel 編譯器對超越函數有極大優化(sin/cos/tan/log/pow/fmod 平均 2.8x)
- 優化手段:向量化 (SSE2)、多項式近似替換、查表法、內聯數學庫 (Intel MKL 前身)
fmod 加速 5.35x 最驚人,pow 3.59x 次之
- 對科學計算、訊號處理、金融建模等數學密集型應用效益顯著
三、綜合評估與建議
| 應用類型 | Intel C++ 9.0 效益 | 建議 |
| 高併發伺服器 (大量執行緒同步) | 低 | 優化鎖自由資料結構、IOCP 架構優於依賴編譯器 |
| 科學計算/工程模擬 | 極高 | 首選,搭配 /QaxW (SSE2) /O3 /Qip (跨檔優化) |
| 遊戲/即時渲染 | 中高 | 數學運算加速明顯,配合 Profile-Guided Optimization (PGO) |
| 一般商務應用 | 低 | VC6/VC7 足矣,除非有特定熱點函數 |
使用 Intel C++ 編譯器的關鍵選項
/QaxW # 針對 SSE2 指令集優化 (P4 必備)
/O3 # 最大速度優化
/Qip # 跨檔案過程間優化 (Whole Program Optimization)
/Qprec_div # 提高除法精度 (略犧牲速度)
/Qfast_transcendentals # 快速超越函數 (犧牲精度換速度)
總結
Intel C++ 9.0 在 數學運算 (平均 2.8x) 與異常處理 (37%) 兩大編譯器可控領域展現強大優化能力,但在 OS 核心同步原語 上無能為力。對數學密集型應用,它是除手寫組語/內建函數外的最強單一加速手段;對同步密集型應用,架構層面優化(無鎖、IOCP、工作盜演算法)遠勝編譯器旗標。