64位机器,性能为int64和int16

时间:2011-11-07 07:53:19

标签: multithreading performance caching

我有64位机器,以及-32000:32000范围内的一些数据集,因此int16_t足以存储它。

问题:

  1. 如果它是64位机器,那么int64_t上的操作是原子的,而成本(就速度而言)与int16_t上的操作相同?如果是这样,以64位存储数据可以节省空间但不能节省速度吗?

  2. 对于并行应用程序,我可以实际通过存储在int16_t中来节省速度,因为 cache 也是64位,并且我存储在缓存中的更多数据 - 线程可以访问它的速度越快?

  3. 是吗?

3 个答案:

答案 0 :(得分:2)

如果不了解算法和时间,就无法确定。你忘了考虑错误的共享,这对于16位整数来说会更加重要。

所以,要回答这个问题,你必须做一些时间安排。

答案 1 :(得分:2)

如果您的编译器可以将代码转换为使用SSE或AVX,则使用64位整数而不是16位整数会使代码在理论上减慢到4倍。 即使您的编译器无法自行完成此优化,您也可以手动转换代码,以便它使用SSE,并以此方式获得良好的加速。

如果你不能使用SSE,使用32位整数可能是最好的选择,因为你仍然需要更少的内存,64位CPU仍然经过优化,可以处理32位值,速度高达64位,因为很多程序还没有使用64位。 / p>

答案 2 :(得分:1)

没有一般可以给出的答案,因为有许多64位架构。 有不同的x86风格,Itanium,旧的Alpha,Sparc,现在是ARM。

通常它是正确的,较小的数据类型意味着您可以将更多数据放入缓存中,这对速度(以及空间)也有好处。

操作是否处于相同的速度在很大程度上取决于架构。如前所述,有cpus具有向量单元,可以在64位数据类型上工作,或者在16位值上工作4倍。可能减慢16位操作的一点是对齐。某些64位处理器要求其数据是8字节对齐的(未对齐,但速度较慢)。