我有一个程序,我想测量不同输入尺寸的执行时间(挂钟)。
在其他一些类似的问题中,我读到在源代码中使用clock_gettime
是不可靠的,因为CPU分支预测器,寄存器重命名,推测执行,无序执行等,有时甚至优化器都可以将clock_gettime
调用移动到除我放置之外的地方。
但我读到的这些问题是关于测量特定功能的时间。如果我测量整个程序(即main
函数),这些问题是否仍然存在?我正在寻找相对测量,不同输入尺寸的执行时间如何变化,而不是绝对值。
我如何获得更好的结果?在代码中使用计时功能:
start = clock_gettime();
do_stuff();
end = clock_gettime();
execution_time = end - start;
或使用time
中的bash
命令:
time ./program
答案 0 :(得分:1)
计划中的测量将为您提供更准确的答案。当然,从理论上讲,在某些情况下,您可以将clock_gettime
电话移到您不期望的地方。实际上,如果你之间只有一个函数调用,它就不会发生。 (如果有疑问,请检查生成的汇编代码)
在shell中调用time
将包含您不关心的内容,例如加载可执行文件并进入有趣点所花费的时间。另一方面,如果你的do_stuff
需要几秒钟,那么它并不重要。
我遵循以下建议:
clock_gettime
或time
将只做细。clock_gettime
。