【发布时间】:2016-08-15 06:49:15
【问题描述】:
以下两个 x86_64 代码的 sn-ps 哪个应该是最快的?还是根本没有区别?
; #1
bsf rax, rdi
mov rdx, -1
cmove rax, rdx
对比
; #2
mov rdx, -1
bsf rax, rdi
cmove rax, rdx
(或 #1 的替代方案,使用寄存器更经济。
; #1a
bsf rax, rdi
mov rdi, -1
cmove rax, rdi
)
是的,我知道我应该只对它们进行基准测试,但我没有工具,并且由于目前长期致残的疾病,我现在无法进行设置。
【问题讨论】:
-
这样的问题通常最好通过简单地编写代码并在多次迭代中计时。
-
@DavidHoelzer:我不同意:微基准测试很难,并且很可能由于某些不相关的原因一个版本看起来比另一个版本快。当序列的延迟和吞吐量不同时,也很容易出错。 microbench 可能会测试吞吐量,而实际使用对延迟敏感。这不是一个好问题,但答案只是“阅读 Agner Fog 的东西”,而不是“尝试自己计时”。如果你不知道我给出的答案,除了运气之外,你将无法写出好的微基准测试。
标签: assembly x86 x86-64 micro-optimization