假设我选择perf
events instructions
、LLC-load-misses
、LLC-store-misses
。进一步假设我测试一个程序 prog
改变其输入。对于相同的输入和相同的计数器,valgrind 是否应该为我提供“相同”的功能结果?也就是说,如果 perf
中的一个值上升,valgrind
中的值应该总是相同吗?在分析我的代码期间,我应该注意 valgrind
作为模拟是否有任何影响?
编辑:顺便说一句,在人们因为我没有亲自尝试而拷问我之前,我不得不说我(有点)有,问题是我有一个 Sandybridge 处理器,并且 perf
有一个“错误”,阻止我测量 LLC-* 事件。有补丁,但我不想重新编译我的内核...
最佳答案
嗯,Cachegrind 是一个缓存模拟器。尽管它尝试模仿硬件的某些特征(缓存大小、关联性等),但它并不会模拟系统的每个功能和行为。因此,在某些情况下您可能会看到一些差异。
例如,Valgrind 的文档指出“Cachegrind 模拟了 2004 年左右主流桌面/服务器处理器的典型分支预测器”。 Sandy Bridge 处理器于 2011 年首次出现,您可以猜测自 2004 年以来分支预测器已经有了很大的改进。
话虽这么说,Valgrind 仍然是您工具箱中的一个很棒的工具。
Sandy Bridge 处理器上的 perf LLC 事件有什么问题?我每天在我的 Sandy Bridge 笔记本电脑上工作时使用这些事件,它按预期工作(archlinux 64 位,linux 3.6)。
关于Valgrind 与 Linux 性能相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906911/