关于c ++:高效缓存和BLOB – 分析缓存命中/未命中

Efficient cache and BLOB's - profiling cache hits/misses

为了使程序具有高速缓存的效率,所使用的数据应该线性存储,对吗?

因此,我使用线性分配器将数据放入BLOB,而不是动态分配。这是否有助于提高绩效?我应该怎么做才能更有效地提高缓存效率?

我知道这个问题并不具体,但我不知道如何解释…

哪些程序可以帮助我配置文件缓存命中/未命中?


如果你在寻找一个Windows的分析器,你可以尝试AMD的代码分析师或Verysleepy,这两个都是免费的,AMD是两者中功能更强大的(并且在英特尔硬件上工作,但是IIRC你不能使用基于硬件的分析工具),它包括监控分支预测未命中和缓存利用率。分析是很好的,因为它告诉你要优化什么,但你并不总是知道如何优化,为此,你应该看看Agner Fog的优化手册和Intel的优化手册(其中包含很多关于局部性和可计算性的优化)


如果你在Linux上,你可以使用valgrind(特别是cachegrind工具)。

如果您使用的是Windows,那么VS2010(2008)专业版有一个内置的探查器,但是我不知道它的缓存分析工具的任何细节。还有情报vtune分析器(放大器)。这两个都是商业产品,不过我想你可以拿到30天的评估副本。

其他一些问题可能会有所帮助:

  • 你最喜欢的剖析工具(C++)
  • C和C++源代码剖析工具


在Linux上,您可以使用perf mem对内存访问进行采样,包括以非常细粒度的方式(包括未命中地址)进行的未命中,如本文所述。