繁体   English   中英

为什么uint32_t与uint64_t的速度不同?

[英]why a uint32_t vs uint64_t speed difference?

试图了解有关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秒。

为什么会这样呢?

一些可能的原因:

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

您可以通过提供一些程序集来继续进行调查/练习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM