2
我有一个程序,我想测量不同输入大小的执行(wallclock)时间。测量执行时间 - 在程序代码或shell中?
在一些其他类似的问题中,我读到在源代码中使用clock_gettime
将不可靠,因为CPU分支预测器,寄存器重命名,推测性执行,无序执行等,有时甚至是优化器可以将clock_gettime
拨打电话,而不是放在我放置的地方。
但这些问题我看了大约测量特定功能的时间。如果我测量整个程序(即main
函数),这些问题是否仍然存在?我正在寻找相对测量,不同输入大小的执行时间如何变化,而不是绝对值。
我该如何获得更好的结果?在代码中使用计时功能:
start = clock_gettime();
do_stuff();
end = clock_gettime();
execution_time = end - start;
或与time
命令bash
:
time ./program
你是什么意思“隔离并使其花费几秒钟”?我应该在每次迭代中添加一次睡眠呼叫吗? – devil0150
@ devil0150绝对不是! :)我的意思是,循环足够多的时间,执行时间比随机延迟/上下文切换/填充缓存更长/ ...如果测量代码的运行时间通常相差10毫秒,或者可能延迟10毫秒,决定在同一时间交换,你希望你的代码运行1秒左右,这样错误是微不足道的。或者,您可以运行数百次,精确测量每次运行并选择最低时间。 – viraptor