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