Valgrind在代码性能方面有什么影响?

时间:2014-03-04 12:04:40

标签: c++ c++11 profiling callgrind

我正在使用Callgrind来查看调用特定函数的次数。但是,我也对执行时间感兴趣。

我知道在Callgrind上运行时程序需要更长时间,因为它必须获取信息。然而,我感到惊讶的是时间如何变化。就我而言,我在2D和3D网格上运行两种不同版本的快速行进方法(FMM和简化FMM)。结果如下:

enter image description here

在2D中,FMM / SFMM的比率根本没有保留,但至少它总是> 1(FMM总是比SFMM要长)。然而,在3D中,Callgrind的效果完全相反,时间完全改变了:SFMM需要更短的调用时间,但在常规执行时会更长。

我正在使用的编译(-Ofast,-fno-finite-math-only)始终是相同的,并且在callgrind和常规运行中运行相同的二进制文件./bin-name

时间测量功能来自std :: chrono。

因此,问题是:因为我在所有情况下都使用相同的二进制文件,所以相同的二进制文件如何表现得如此不同?在这种情况下,我得到的其他数据(函数调用,%时间成本等)是否可靠?使用常规执行命令运行二进制文件时,预计会出现类似Callgrind的结果。

编辑:在实现中,主要的变化是在FMM中我使用的是Boost Fibonacci堆,在SFMM中我使用了一个带有Boost Priority Queue的小修改。

谢谢!

0 个答案:

没有答案