對Intel Sandybridge 系列CPU 中的管道進行去最佳化
簡介
簡介
簡介
是任務透過利用Intel Sandybridge 處理器來降低Monte-Carlo 模擬程式的效率建築學。此處理器具有無序管道,具有暫存器重命名和儲存緩衝等功能,因此降低指令級並行性 (ILP) 並引入危險具有挑戰性。
程式分析
程式是蒙特卡羅模擬,用於計算歐洲普通買權和賣權的價格。此程式的關鍵組件是:-
迭代指定次數的循環
- 高斯隨機數產生Black-Scholes 選擇權定價公式
-
最佳化技術
- 以下技術可用於降低程式效率:
-
錯誤依賴關係:在指令之間引入不必要的依賴關係,以增加危險停頓。
-
記憶體瓶頸:導致快取未命中和記憶體存取因資料不對齊或使用非連續記憶體存取模式而導致延遲。
-
延遲指令:使用具有較長延遲且可能被管道延遲的指令。
效率較低的運算:使用效率較低的數學運算,例如除法,而不是乘法。
分支錯誤預測:
引入不可預測的分支導致管道刷新。 儲存轉送停頓:使用雙精確度高位元組異或等技術引起儲存轉送指令快取未命中:將程式分成小塊以導致指令快取未命中。 具體建議 基於上述技術,這裡有一些悲觀化的具體建議節目:
- 使用 std::atomic; for 迴圈計數器並使其不對齊。
- 在非原子變數之間引入錯誤共享。
- 具有單一共用 std::atomic 循環計數器的多執行緒。
- 以關聯/分配等價重寫表達式以增加工作。
- 小心使用內部函數以避免管道停頓。
- 使用內聯彙編來分解 uop 快取。
- 使用 CPUID/RDTSC 來計時每次迭代並引發序列化.
- 以非連續順序遍歷數組並使用帶填充和未對齊的數組元素。
- 使用 雙精確度 精確度取代 float 來增加延遲。
- 強制從整數轉換為浮點數,然後再回傳。
-
使用 -O0 停用編譯器最佳化並使用-march=i386 用於較慢的指令。
- 經常設定不同 CPU 的 CPU 關聯性。
以上是我們如何取消優化英特爾 Sandybridge 處理器的蒙特卡羅模擬?的詳細內容。更多資訊請關注PHP中文網其他相關文章!