我在ubuntu(Vmware工作站9)上运行c ++代码。现在,基本上我有三个用c ++编写的不同函数。我想在使用valgrind cachegrind的平均记忆访问次数的基础上对三者进行比较。现在,我想说清楚这会影响我在虚拟机而不是主机上运行三个函数的比较吗?
某处我读到了这个:
“如果您要将VM上的结果与未在VM上运行的结果进行比较,那么 不,结果不可信。另一方面,如果两个测试 在相同的环境中运行,是的,结果是可信的。 两个测试在VM内部都会变慢,但差异仍然存在 是可信的。“
更多详情:
我有三个用c ++编写的应用程序代码。每个应用程序都有一个名为CheckInput()的函数。此CheckInput函数在每个应用程序中执行不同的算法。所以,我感兴趣的是哪个应用程序的CheckInput函数将在较少的内存访问中完成其工作
答案 0 :(得分:0)
当产品针对特定硬件时,通过额外的抽象层评估性能很少一个好主意。
您的虚拟机堆栈会为您的应用程序添加许多无用的标头,并且如您的引用所说:“如果您要将VM上的结果与未在VM上运行的结果进行比较,那么结果是不可信的。 “,你可能会在这两种环境中获得截然不同的结果。
由于Cachegrind正在监视您的CPU缓存,因此结果可能与您在VM上的结果大不相同,因为像VmWare这样的虚拟机管理程序可能会使用自己的百分比来运行您的代码。