1

社区使用什么工具来帮助确定缓存未命中是否是一个问题,以及它们是否是代码中出现的问题?

第一个问题是:

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

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

谢谢你的帮助!

4

1 回答 1

0

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

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

这是可行的,因为正在处理缓存未命中的硬件线程仍在运行。所有现有的 x86 都不执行 SoEMT(Swith On Event Multithreading)。它不适用于操作系统/磁盘等待,因为磁盘上的 w5aiting 进程已关闭。”

它实际上仍然适用于多线程 CPU,例如英特尔超线程。但有时如果禁用超线程,结果会更清晰。同样地,推土机上的 AMD 集群线程 - 它应该可以工作,但也许只是为了以防万一......

于 2012-04-28T05:56:26.390 回答