如何比较ASM指令速度?

时间:2014-02-19 20:34:24

标签: performance assembly latency instructions

我知道xorq %rax,%raxmovq $0,%rax快,因为我的编译器告诉我。但是,如果我不知道答案,我应该怎么做才能比较 xorq movq 表演?

我试过的是:

int main(void)
{
  long a;
  long i = 0;
  for (i = 0; i < 10000000000l; i++) {
    a = 10;
    __asm__(
#if 0
            "movq $0, %%rax"
#else
            "xorq %%rax, %%rax"
#endif
            : "=a" (a) : "a" (a))
  }
  return 0;
}

然而,当我计划程序时(一次使用#if 0,一次使用#if 1),我会得到非常相似的结果(5.876±0.001秒)。仅供参考,我已将缩放调控器设置为最低频率,并且已检查time(1)返回的用户行。

我还尝试过使用addq %rax,%rax vs imulq $2,%rax,但没有运气。

我知道现代处理器在优化代码执行方面非常聪明,我想这就是为什么我没有得到有用的结果。所以我在这里问:我该怎么办?我在正确的道路上吗?

1 个答案:

答案 0 :(得分:1)

你将不得不多次展开循环的内容,比如10或100.否则主要是你测量循环开销。另外我建议for (i = 1000...; --i>=0;)可以编译成更少的指令。

相关问题