在进行基准测试时,我测得的吞吐量比我计算的要低得多,我将其缩小到LZCNT指令(TZCNT也是如此),如以下基准测试所示: xor ecx, ecx_benchloop: lzcnt eax, edx add ecx, 1 jnz _benchloop和: xor ecx, ecx_benchloop: xor eax, eax ; this shouldn't help, but it does lzcnt eax, edx add ecx, 1 jnz _benchloop第二个版本要快得多。不应该这样 没有理由为什么LZCNT应该对其输出具有输入依赖性。与BSR / BSF不同,xZCNT指令始终覆盖其输出。我正在4770K上运行它,因此LZCNT和TZCNT不会作为BSR / BSF执行。这里发生了什么?
3 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
没什么可不幸的。您似乎已经排除了对齐方式,而我们只是排除了部分标志的依赖性。“当您消除了不可能的事物时,无论多么不可能,仍然是必须存在的事实。”我们可能还没有消除所有其他事物,但是看起来越来越像在您的处理器上实现的xZCNT依赖于其输出寄存器重命名。
- 3 回答
- 0 关注
- 616 浏览
添加回答
举报
0/150
提交
取消