C ++函数的时间测量

时间:2013-10-20 15:45:49

标签: c++ gprof time-measurement

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

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

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

它是这样的:

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

2 个答案:

答案 0 :(得分: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累积样品。通过多次运行程序,可以得到一个     更好地了解时间花在哪里。例如,可能不会调用慢速例程    对于所有输入值,因此您可能误导读取在哪里找到   性能问题。

答案 1 :(得分: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标准版的一部分。