【问题标题】:C++ Time measurement of functionsC++ 函数的时间测量
【发布时间】:2013-10-20 15:45:49
【问题描述】:

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

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

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

它是这样的:

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

【问题讨论】:

标签: c++ gprof time-measurement


【解决方案1】:

如果您使用的是 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 累积样本。通过多次运行程序,可以得到一个 更好地了解时间花在哪里。例如,一个慢例程可能不会被调用 对于所有输入值,因此您可能会误导阅读在哪里可以找到 性能问题。

【讨论】:

  • 如前所述尝试过......我没有得到任何关于我需要的函数的信息......只有一些数据类型的类运算符
  • 我已经更新了我的答案。请立即尝试,告诉我进展如何。
  • 您能说得更具体些吗?什么不起作用?什么错误?
  • 啊,我以为标志 -f 只会打印我这个函数的输出......它可以工作,但会显示每个函数。
  • 不,我不......在一个类似的程序上,它只显示了三个功能,而且两个标志都不会改变。
【解决方案2】:

如果您需要更高的精度(对于不超过几(或更少)毫秒的函数),您可以使用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 标准的一部分。

【讨论】:

  • 谢谢,但实际上我不需要更高的精度
  • @Biler 它也适用于低精度,它是 STL 的一部分。您可以将结果转换为您需要的任何时间单位,这非常方便。
  • 我必须将数据保存在一个变量中,并将其用作函数参数来总结整个函数调用的时间。
  • @Biler 如果您需要在函数内部进行测量,那么恐怕唯一的解决方案是将bool 添加到参数列表中,以指示是否测量时间。然后,该函数将 - 当它调用自身时 - 只是传递 false ,因此不会在所有递归内测量时间。用户应用程序将传递 true ,这将导致在第一次调用函数时进行时间测量。这样你就不需要总结一切了
  • 谢谢,但请看看我的第一篇文章。情况就是这样,我不知道如何获得每个功能的整体时间测量。这样我就可以在主函数中打印函数1、函数2、函数3的运行时间
猜你喜欢
  • 2018-06-09
  • 2023-03-31
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2011-07-25
  • 2020-07-08
相关资源
最近更新 更多