2011-01-21 145 views
2

我正在运行密集型数值模拟。我经常使用长整数,但是我意识到使用整数是安全的。这会显着提高我的模拟速度吗?数据类型大小对性能的影响

+3

这取决于。它取决于处理器,如果你在GPU或CPu上运行它。这取决于您消耗的内存量与需要分配的虚拟内存量之间的关系。这取决于...你明白了吗?给我们更多的信息。 – wheaties 2011-01-21 20:30:59

回答

3

取决于。如果内存中连续存在大量的数字,则它们更有可能适合L2缓存,因此缓存未命中的次数更少。二级缓存未命中 - 取决于您的平台 - 可能会对性能产生重大影响,因此尽可能使缓存适合缓存(如果可以,请预取),这绝对是一个好主意。但是不要指望你的代码突然飞起来,因为你的类型更小。

编辑:还有一点 - 如果你选择一个尴尬的类型(如32位或64位平台上的16位整数),你可能会因为CPU不得不手术提取16位值并将其转化为可以使用的东西。但通常,整数是个不错的选择。

2

取决于您的数据集大小。显然,将整数大小减半可以使适合CPU缓存的数据量增加一倍,因此访问数据的速度会更快。有关更多详情,我建议您阅读着名的Ulrich Drepper的论文What Every Programmer Should Know About Memory

0

这就是为什么typedef是你的朋友。 :-)

如果数学上可能,尝试使用浮点数而不是整数。我在某处读到浮点运算(特别是乘法运算)在某些处理器上实际上可能会更快。

最好的事情是实验和基准测试。几乎不可能分析出哪些微优化效果最好。

编辑:这个post讨论整数和浮点之间的性能差异。

0

所有的答案已经处理了CPU缓存问题:如果你的数据是两倍小,那么在某些情况下,它可以完全适合二级缓存,从而提高性能。

但是,还有另一个非常重要和更一般的东西:内存带宽。如果你的算法是线性的(又称复杂性)并且顺序地访问内存,那么它可能是内存限制的。这意味着内存读取/写入是瓶颈,而CPU只是浪费了大量的等待内存操作完成的周期。在这种情况下,减少两次总内存大小可以提供可靠的2x性能提升。 此外,在这种情况下,切换到字节可能会产生更多的性能提升,尽管事实上CPU的计算可能会比其他应答者已经提到的字节慢。一般来说,答案取决于以下几种情况:您的算法使用的数据总大小,内存访问模式(随机/随机),算法渐近复杂度,每内存比率计算(主要用于线性算法)。