我必须分析几个程序的内存访问.我正在寻找的是一个分析器,它让我可以看到我的哪个程序存在更多内存密集的计算密集型.我对L1数据高速缓存,L2和主存储器的访问次数非常感兴趣.
它需要用于Linux,如果只能使用命令.编程语言是c ++.如果我的问题有任何问题,例如我不明白您的意思或我们需要更多数据,请在下面发表评论.
谢谢.
更新解决方案
我选择了Crashworks作为首选的答案,因为它是唯一提供我所寻找的东西的人.但问题仍然存在,如果您知道更好的解决方案,请回答.
如果您运行的是 Intel 硬件,那么适用于 Linux 的 VTune 可能是您可以使用的最好且功能最齐全的工具。
否则,您可能必须使用perfctr库直接读取性能计数器 MSR 。我自己在 Linux 上没有任何经验,但我找到了一些可能对您有帮助的论文(假设您使用的是 x86 ——如果您正在运行 PPC,请回复,我可以提供更详细的答案): http ://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel5/11169/35961/01704008.pdf?temp=x http://www.cise.ufl.edu/~sb3/files/pmc。 pdf
一般来说,这些工具无法准确告诉您缓存未命中发生在哪些行,因为它们通过轮询计数器来工作。您需要做的是轮询您感兴趣的每个函数的开头和结尾处的“l1 缓存未命中”计数器,以查看该函数内部发生了多少次未命中,当然您可以分层执行此操作。这可以通过例如发明一个类来简化,该类记录进入范围时的启动计时器并计算离开范围时的增量。
VTune 的检测模式会在整个程序中自动为您执行此操作。等效的 AMD 工具是 CodeAnalyst。Valgrind声称是一个开源缓存分析器,但我自己从未使用过它。
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |