虛假數據依賴性影響Intel CPU 上的Popcount 性能
問題:
您觀察到顯著使用32 位元和64 位元循環計數器進行popcount操作之間的效能偏差英特爾 CPU。使用 64 位元計數器時效能下降 50%,最初歸因於編譯器錯誤。
說明:假資料依賴
Intel CPU 存在錯誤依賴於 popcnt 指令中的目標暫存器上,這會影響緊密循環的多次迭代。這種依賴性會暫停指令,直到目標暫存器可用。受此依賴關係影響的指令數量取決於循環的位置,從而導致效能變化。
依賴關係的後果:
編譯器行為:
GCC 與Visual Studio都沒有意識到這種錯誤的依賴關係,從而導致基於寄存器分配的不可預測的性能。其他編譯器,例如 Clang 和 ICC,也缺乏這方面的知識。
AMD 效能:
AMD處理器似乎沒有這種錯誤的依賴關係,這有助於其更高的性能流行計數中的表現
緩解措施:
以上是為什麼由於錯誤的資料依賴性,64 位元 Popcount 在 Intel CPU 上比 32 位元慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!