在现代处理器 (AMD Phenom II 1090T) 上执行时,以下代码更有可能消耗多少时钟滴答:3 还是 11?
label: mov (%rsi), %rax
adc %rax, (%rdx)
lea 8(%rdx), %rdx
lea 8(%rsi), %rsi
dec %ecx
jnz label
问题是,当我对此类代码执行多次迭代时,每次迭代的结果不时变化接近 3 或 11 个滴答声。我无法决定“谁是谁”。
UPD 根据指令延迟表 (PDF),我的一段代码在 AMD K10 微架构上至少需要 10 个时钟周期。因此,每次迭代不可能有 3 个刻度是由测量中的错误引起的。
已解决 @Atom注意到,现代处理器
中的循环频率不是恒定的。当我在 BIOS 中禁用三个选项时 -和Core Performance Boost
,我的“六条指令”的消耗稳定在3 个时钟周期:-)AMD C1E Support
AMD K8 Cool&Quiet Control