运行时性能(速度)优化 - 缓存大小考虑因素

时间:2014-08-23 14:14:35

标签: c++ performance caching

C ++程序员在尝试在缓存环境中优化代码时应该知道哪些基本提示和技巧?

这是需要考虑的事情:

  • 例如,我知道减少函数的占用空间会使代码运行得更快,因为处理器的指令寄存器I中的总指令较少。

  • 尝试分配std::array<char, <size>>时,理想的大小可以使您的读写速度更快吗?

  • 对象决定将它放在堆而不是堆栈上有多大?

1 个答案:

答案 0 :(得分:1)

在大多数情况下,了解问题的正确答案后,您的整体表现会低于1%。

我想到的一些(数据)缓存优化是:

  • 对于数组:使用较少的RAM。尝试较短的数据类型或简单的压缩算法,如RLE。这也可以同时节省CPU,或者在相反的浪费CPU周期中进行数据类型转换。特别是浮点到整数转换可能非常昂贵。
  • 避免从不同的线程访问同一个高速缓存行(通常大约64个字节),除非所有访问都是只读的。
  • 经常一个一个地使用的组成员。优先顺序访问随机访问。

如果您真的想了解有关缓存的所有信息,请阅读What Every Programmer Should Know About Memory。虽然我不同意这个标题,但它是一篇非常深入的文档。

因为您的问题表明您实际上只是按照上述提示获得收益(在这种情况下您会感到失望),以下是一些常规优化提示:

提示#1:大约90%的代码应该针对可读性进行优化,而不是性能。如果您决定尝试优化性能,请确保实际测量增益。当它低于5%时,我通常会回到更易阅读的版本。

提示#2:如果您有现有的代码库,请先对其进行配置。如果您不对其进行分析,您将错过一些非常有效的优化。通常会调用耗时的函数,这些函数可以完全消除,或者结果缓存。

如果您不想使用分析器,至少在几个地方打印当前时间,或者使用调试器中断程序几次,以检查它最常花费时间的位置。