为什么uint32_t vs uint64_t的速度差异?

时间:2013-11-17 14:14:28

标签: c++ performance

尝试理解g ++ / cpu如何在运行时处理整数。

我正在测量以下功能运行的时间:

template<class T>
void speedTest() {
    for(T d=0;d<4294967295u;d++)int number;
}

这个简单的方法将多次运行uint32_t的最大值的哑循环

当我打电话时:

speedTest<uint32_t>();

该软件平均需要8.15秒,但是当我打电话时:

speedTest<uint64_t>();
该软件平均需要10.35秒。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

一些可能的原因:

  • 较大的数据类型通常需要更多的内存带宽
  • 即使该循环计数器保存在寄存器内,CPU也可能花费更多时间进行大值计算,特别是如果它需要多个寄存器(例如,如果你的CPU只有32位宽的寄存器),
  • 编译器需要发出额外的机器指令来模拟CPU不直接支持的任何类型
  • 这也取决于优化。无论int number;(可能只是for(T d=0;d<4294967295u;d++);
  • ,都可以完全优化这种没有副作用的循环

您可以通过提供一些装配来继续您的调查/练习。