高效的缓存和BLOB - 分析缓存命中/未命中

时间:2011-08-21 11:48:36

标签: c++ caching blob

要使程序具有高效缓存,所使用的数据应该线性存储吗?

因此,我使用线性分配器将数据放入blob中而不是动态分配。这是否应该提高性能?我该怎么做才能进一步提高缓存效率?

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

哪些程序可以帮我查看缓存命中/未命中?

3 个答案:

答案 0 :(得分:5)

如果您正在寻找适用于Windows的分析器,您可以尝试AMD's CodeAnalystVerySleepy,这两个都是免费的,但AMD是两者中更强大的(并且适用于英特尔硬件,但是iirc你不能使用基于硬件的分析内容),它包括监视分支预测未命中和缓存利用率等事情。分析很棒,因为它告诉你要优化什么,但你并不总是知道如何,为此,你应该看看Agner Fog's optimization manuals结合Intel's optimization manual(其中包含很多关于局部性和可扩展性的优化)

答案 1 :(得分:3)

如果您使用的是Linux,则可以使用Valgrind(特别是cachegrind工具)。

如果你在Windows上,那么VS2010(2008)专业版有一个内置的分析器但是 我不知道有关它的缓存分析设施的任何细节。还有英特尔 VTune分析仪(放大器)。它们都是商业产品,但我认为你可以获得30天的评估版。

关于SO的其他一些问题可能会有所帮助:

答案 2 :(得分:0)

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