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

Caching 帮助配置文件缓存未命中的工具,caching,profiling,oprofile,Caching,Profiling,Oprofile,社区使用什么工具来帮助确定缓存未命中是否是一个问题,以及它们是否是代码中出现的问题 第一个问题是: 如何确定由于缓存未命中而等待来自主内存的数据花费了多少时间?像OProfile这样的采样探查器会为等待此数据的函数指定时间吗?例如,它们不会将时间归因于等待磁盘读取数据的函数,因此人们不得不怀疑等待内存数据是否也是如此 第二个问题是: 如果我确定缓存未命中确实是一个瓶颈,那么如何确定代码的哪些部分正在请求未缓存内存?我是否应该使用带有LLC_失误的OProfile作为事件?还有其他我不知道的工具吗

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

第一个问题是:

如何确定由于缓存未命中而等待来自主内存的数据花费了多少时间?像OProfile这样的采样探查器会为等待此数据的函数指定时间吗?例如,它们不会将时间归因于等待磁盘读取数据的函数,因此人们不得不怀疑等待内存数据是否也是如此

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


谢谢你的帮助

像OProfile这样的采样探查器会为等待此数据的函数指定时间吗?例如,它们不会将时间归因于等待磁盘读取数据的函数,因此人们不得不怀疑等待内存数据是否也是如此

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

这是可行的,因为获取缓存未命中的硬件线程仍在运行。所有现有x86都不使用事件多线程进行SoEMT切换。它不适用于操作系统/磁盘等待,因为磁盘上的进程w5aiting已关闭


它实际上仍然适用于多线程CPU,如Intel Hyperreading。但有时如果禁用超读,结果会更清晰。同样,在推土机上wrt AMD cluster threading-它应该可以工作,但mayber只是以防万一…

您应该让我们知道您使用的是什么技术以及您实际分析的是什么。Cachegrind和Valgrind?恐怕我不确定您使用的是什么技术我使用gcc在x86体系结构上编译。我经营Fedora15。我通常使用OProfile来配置文件。该代码是一个大型数值计算-不清楚内存访问模式是什么。因此,目前尚不清楚是否存在缓存未命中的问题。我可以使用Cachegrind来分析缓存未命中,但我如何知道它们是否值得优化呢?例如,假设函数foo生成100000次未命中。我如何知道运行时有多少贡献?