我正在运行密集型数值模拟。我经常使用长整数,但是我意识到使用整数是安全的。这会显着提高我的模拟速度吗?数据类型大小对性能的影响
回答
取决于。如果内存中连续存在大量的数字,则它们更有可能适合L2缓存,因此缓存未命中的次数更少。二级缓存未命中 - 取决于您的平台 - 可能会对性能产生重大影响,因此尽可能使缓存适合缓存(如果可以,请预取),这绝对是一个好主意。但是不要指望你的代码突然飞起来,因为你的类型更小。
编辑:还有一点 - 如果你选择一个尴尬的类型(如32位或64位平台上的16位整数),你可能会因为CPU不得不手术提取16位值并将其转化为可以使用的东西。但通常,整数是个不错的选择。
取决于您的数据集大小。显然,将整数大小减半可以使适合CPU缓存的数据量增加一倍,因此访问数据的速度会更快。有关更多详情,我建议您阅读着名的Ulrich Drepper的论文What Every Programmer Should Know About Memory。
这就是为什么typedef是你的朋友。 :-)
如果数学上可能,尝试使用浮点数而不是整数。我在某处读到浮点运算(特别是乘法运算)在某些处理器上实际上可能会更快。
最好的事情是实验和基准测试。几乎不可能分析出哪些微优化效果最好。
编辑:这个post讨论整数和浮点之间的性能差异。
所有的答案已经处理了CPU缓存问题:如果你的数据是两倍小,那么在某些情况下,它可以完全适合二级缓存,从而提高性能。
但是,还有另一个非常重要和更一般的东西:内存带宽。如果你的算法是线性的(又称复杂性)并且顺序地访问内存,那么它可能是内存限制的。这意味着内存读取/写入是瓶颈,而CPU只是浪费了大量的等待内存操作完成的周期。在这种情况下,减少两次总内存大小可以提供可靠的2x性能提升。 此外,在这种情况下,切换到字节可能会产生更多的性能提升,尽管事实上CPU的计算可能会比其他应答者已经提到的字节慢。一般来说,答案取决于以下几种情况:您的算法使用的数据总大小,内存访问模式(随机/随机),算法渐近复杂度,每内存比率计算(主要用于线性算法)。
- 1. int数组的大小对类型等价性的影响
- 2. 大PermGen的大小+性能的影响
- 3. 大型变量表的性能影响
- 4. 文件大小如何影响性能?
- 5. 表大小是否影响INSERT性能?
- 6. mysql/innodb数据库大小如何影响性能?
- 7. 哪种操作对性能,最小/最大或模数的影响最小?
- 8. 缩小catch块的类型是否有性能影响?
- 9. 做数据类型选择会影响性能吗?
- 10. 主键数据类型是否影响性能? SQL Server 2008
- 11. Systemtap对性能的影响
- 12. connection.commit()对性能的影响
- 13. 嵌套数组影响性能的列表大小是多少?
- 14. Signalr调用与longPolling传输类型相当大 - 性能影响
- 15. 对于大型.maxstack,性能会有什么影响?
- 16. 快捷类影响性能?
- 17. 函数调用次数对性能有多大影响?
- 18. 性能影响
- 19. JAR文件的大小是否会影响JVM的性能?
- 20. file()会影响大小约2 MB的文件的性能吗?
- 21. 巨大的性能影响(Angular2)
- 22. Access数据库中的子数据表属性对性能的影响
- 23. 性能的影响
- 24. Direct 3D影响数据类型double
- 25. ReadProcessMemory - 缓冲区大小影响功能的正确性
- 26. 数据库(最大)字段长度是否会影响性能?
- 27. 什么是Redis数据库索引对性能的影响
- 28. 数据库字段名称长度对性能的影响?
- 29. SQL中的隐式数据类型转换是否会影响性能?
- 30. 对于数据库,选择正确的数据类型是否会影响性能?
这取决于。它取决于处理器,如果你在GPU或CPu上运行它。这取决于您消耗的内存量与需要分配的虚拟内存量之间的关系。这取决于...你明白了吗?给我们更多的信息。 – wheaties 2011-01-21 20:30:59