测量执行时间 - 在程序代码或外壳中

Measuring execution time - in program code or in shell?

本文关键字:外壳 代码 程序 执行时间 测量      更新时间:2023-10-16

我有一个程序,我想测量其执行时间(wallclock(时间的不同输入尺寸的时间。

在其他一些类似的问题中,我读到,在源代码中使用clock_gettime是由于CPU分支预测器,注册重命名,投机执行,排序执行等方移动clock_gettime除了我放置的地方以外的其他地方。

,但是我读到的这些问题是关于衡量特定功能的时间。如果我要衡量整个程序(即main函数(,这些问题仍然存在吗?我正在寻找相对测量值,执行时间如何变化不同的输入大小,而不是绝对值。

我将如何获得更好的结果?在代码中使用定时功能:

start = clock_gettime();
do_stuff();
end = clock_gettime();
execution_time = end - start;

或用bash中的time命令:

time ./program

在程序中进行测量将为您提供更准确的答案。当然,从理论上讲,在某些情况下,您可以将clock_gettime调用转移到您不期望的地方。实际上,如果您只有一个函数调用,则不会发生。(如果有疑问,请检查结果组件代码(

在Shell中调用time将包括您不在乎的事情,例如加载可执行文件并提交有趣的观点所需的时间。另一方面,如果您的do_stuff花了几秒钟,那并不重要。

我会选择以下建议:

  • 如果您可以轻松隔离功能并使其花费几秒钟(您也可以循环循环,但也可以测量空循环进行比较(,则clock_gettimetime可以很好。
  • 如果您不能轻易隔离,但是您的功能始终如一地占用数百毫秒,请使用clock_gettime
  • 如果您无法隔离并且正在优化微小的东西,请查看rdtsc的时间安排,以测量一个函数,该功能谈论测量实际执行的周期。