2011-11-07 62 views
1

我有64位机器和一些数据集范围-32000:32000,所以int16_t足以存储它。64位机器,性能为int64和int16

问题:

  1. 如果它是64位计算机,则操作上是的int64_t原子和费用(在速度方面)相同上int16_t操作?如果是这样,以64位存储数据可以节省空间,但不会加快速度?

  2. 对于并行应用程序,我可以实际上由在int16_t存储保存的速度,因为缓存也是64位,和Te更多数据I存储在高速缓存 - 越快线程可以访问它?

是吗?

回答

2

如果您的编译器可以将您的代码转换为使用SSE或AVX,则使用64位整数而不是16位整数将会使您的代码在理论上减慢至4倍。 即使您的编译器无法对其进行优化自己,你可以手动转换你的代码,以便使用SSE,并以这种方式获得很好的加速。

如果你不能使用SSE,使用32位整数可能是最好的选择,因为你仍然需要更少的内存,并且64位CPU仍然被优化来处理32位值,与64位值一样快,因为许多程序尚未使用64位。

2

如果不知道算法和某些时机,就无法确定。你忘记了对16位整数更重要的错误分享。

所以,要回答这个问题,你将不得不做一些时间。

1

由于有很多64位体系结构,所以没有可以给出的一般答案。 有不同的x86版本,Itanium,旧的Alpha,Sparc,现在是ARM。

一般来说,它是正确的,更小的数据类型意味着您可以将更多数据放入缓存中,这对速度(以及空间也是如此)非常有用。

操作速度是否相同取决于体系结构。正如已经提到的那样,cpus有矢量单位,可以用于64位数据类型或4倍于16位的值。可能会减慢16位操作的一点是对齐。某些64位处理器要求其数据是8字节对齐的(未对齐是可能的,但较慢)。