假设我选择perf事件instructionsLLC-load-missesLLC-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/

10-14 09:22