首頁 > 後端開發 > C++ > 我們如何故意去優化 Intel Sandybridge CPU 的程式?

我們如何故意去優化 Intel Sandybridge CPU 的程式?

Mary-Kate Olsen
發布: 2024-12-02 11:43:09
原創
954 人瀏覽過

How Can We Intentionally Deoptimize a Program for Intel Sandybridge CPUs?

對Intel Sandybridge 系列CPU 中的管道進行去最佳化

簡介

本作業的目標是修改給定作業的程序以降低其性能,稱為去優化。此任務需要了解英特爾 i7 管道架構以及如何重新排序指令路徑以引入危險。

去最佳化技術

1.錯誤共享
安排非原子變數儲存在同一快取行中,導致儲存轉送停頓。

2.儲存轉送停頓
使用XOR 翻轉雙精度數的符號位,而不是使用「-」運算符,強制將窄儲存僅儲存雙精度數的一個位元組。

3.記憶體消歧
將資料4096B分開放置,以觸發儲存到不同頁面的錯誤依賴關係。

4.未對齊的資料
使用 __attribute__((packed)) 強制跨快取行或頁邊界的變數未對齊,從而增加快取未命中率。

5. Stride:
以 4096 位元組的步幅循環數組,導致記憶體存取不連續,降低快取利用率。

6.鍊錶
將結果儲存在鍊錶中,引入指標追逐負載依賴關係以及記憶體中潛在的分散節點。

基於編譯器的去最佳化

1。原子變數:
使用std::atomic;和 std::atomic由於記憶體柵欄導致程式碼速度較慢且開銷較多。

2. Long double:
使用 long double 變數強制 x87 模擬,即使使用支援 SSE2 的 CPU。

3.整數轉換
在整數和浮點類型之間重複轉換,引入高延遲的轉換指令。

4.系統呼叫
引入頻繁的不必要的系統呼叫來強制上下文切換和快取/TLB 未命中。

結論

透過採用這些技術,可以顯著悲觀給定的程式並使其運行速度比原始版本慢得多。成功去優化的關鍵是用「惡魔般的無能」而不是惡意的意圖來證明每一步的合理性。

以上是我們如何故意去優化 Intel Sandybridge CPU 的程式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板