用64 位元取代32 位元循環計數器可能會導致Intel CPU 上的_mm_popcnt_u64 出現顯著的效能偏差
出現此問題的原因錯誤的資料依賴性,具體來說,
_mm_popcnt_u64指令對其目標暫存器存在錯誤依賴性,導致其在執行之前等待目標暫存器準備就緒。這種依賴性可以跨循環迭代進行,使處理器難以並行化不同的循環迭代。
循環變數類型的選擇(無符號與uint64_t)影響暫存器分配器
將暫存器分配給變量,導致_mm_popcnt_u64的暫存器分配和錯誤依賴鏈存在差異
在大小變數前面插入static 關鍵字
可以改變暫存器分配並打破錯誤的依賴鏈。在某些情況下,這可以透過消除對目標暫存器的交叉迭代依賴來提高效能。
要緩解此問題並實現一致的性能:
以上是為什麼更改循環計數器的位寬會影響 Intel CPU 上的 _mm_popcnt_u64 效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!