虚假数据依赖性影响 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中文网其他相关文章!