我需要测量C ++程序的时间,特别是一些递归函数的整体运行时间。其他函数中有很多函数调用。我的第一个想法是在实际代码中实现一些时间测量功能。
gprof的问题是,它打印出数据类型的类操作符的时间,但我只需要关于函数的信息和“-f func_name prog_name”不起作用。
那么,测量数字程序时间的最常用科学方法是什么?
它是这样的:
function2()
{
}
function1()
{
function2();
funtcion1();
}
int main(){
function1();
}
答案 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标准版的一部分。