帮助配置缓存未命中的工具

时间:2011-12-14 21:25:49

标签: caching profiling oprofile

社区使用哪些工具来帮助确定缓存未命中是否是一个问题,以及它们是否存在于代码中的问题?

第一个问题是:

如何确定因缓存未命中而等待主内存中的数据所花费的时间?像OProfile这样的采样分析器会将等待时间用于等待此数据的函数吗?例如,他们不会将时间归因于等待来自磁盘读取的数据的函数,因此人们不得不怀疑从内存中等待数据是否也是如此。

第二个问题是: 如果我发现缓存未命中确实是一个瓶颈,我该如何识别代码的哪些部分正在请求未缓存的内存?我应该使用OProfile和LLC_MISSES作为事件吗?还有其他我不了解的工具吗?我宁愿远离专有解决方案,除非有令人信服的理由使用它们,因为我不希望将来锁定某个工具链。

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

“像OProfile这样的采样分析器会将时间等待到等待这些数据的函数吗?例如,它们不会将时间归因于等待来自磁盘读取的数据的函数,因此人们不得不怀疑等待数据是否也是如此来自记忆。“

答:是的,在单线程CPU上,像OProfiler或VTune这样的探查器会将时间归因于等待缓存未命中的函数。

这样可行,因为正在执行缓存未命中的硬件线程仍在运行。所有现有的x86都不做SoEMT(Swith On Event Multithreading)。它不适用于OS /磁盘等待,因为磁盘上的进程已被切换。“

它实际上仍适用于多线程CPU,如Intel超线程。但是,如果禁用超线程,有时结果会更清晰。同样,在Bulldozer上使用AMD集群线程 - 它应该可以工作,但是为了以防万一......