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上,您可以使用