1

我需要测量一个 C++ 程序的时间,尤其是一些递归函数的整体运行时间。其他函数内部有很多函数调用。我的第一个想法是在实际代码中实现一些时间测量功能。

gprof 的问题是,它打印出数据类型的类运算符的时间,但我只需要有关函数的信息,“-f func_name prog_name”将不起作用。

那么,科学中测量数值程序时间的最常用方法是什么?

它是这样的:

function2()
{
}
function1()
{
  function2();
  funtcion1();
}
int main(){
function1();
}
4

2 回答 2

2

如果您使用的是 GNU 软件包,即 gcc,您可以尝试 gprof。只需使用 -g 和 -pg 标志编译您的程序,然后运行 gprof <your_program_name>

gprof:http ://www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html

编辑:为了提高详细程度,您可以使用其他标志运行 gprof:

-l (--line) 启用逐行分析,为您提供直方图命中,以计入单独的代码行,而不是函数。

-a 不要在输出中包含私有函数。

-e<function>排除函数的输出<function>。当有不会改变的功能时使用它。例如,一些网站的源代码已获得监管机构的批准,无论多么低效,代码都将保持不变。

-E<function>还从百分比表中排除函数花费的时间。

-f<function>与 -e 相反:只跟踪<function>.

-F<function>仅在<function>计算百分比时使用时间。

-b 不打印解释性文本。如果您更有经验,您可以欣赏此选项。

-s 累积样本。通过多次运行该程序,可以更好地了解时间花费在哪里。例如,可能不会为所有输入值调用一个缓慢的例程,因此您可能会误导您在何处查找性能问题。

于 2013-10-20T16:04:45.167 回答
1

如果您需要更高的精度(对于不超过几毫秒(或更少)毫秒的函数),您可以使用std::chrono::high_resolution_clock

auto beginT = std::chrono::high_resolution_clock::now();
//Your computation here
auto endT = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(endT - beginT).count()

std::chrono::high_resolution_clock可以在标题中找到,chrono并且是 C++11 标准的一部分。

于 2013-10-20T16:05:07.363 回答