在进行基准测试时,我测得的吞吐量比我计算的要低得多,我将其缩小到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执行。
这里发生了什么?
芜湖不芜