我希望知道在linux下执行程序所需的时间(以微秒为单位)(或更高的准确性).目前我正在使用该time命令,但它以最大毫秒精度给出了我.有没有办法调整time命令以提供更好的准确性或是否有其他命令相同?
你的问题毫无意义:即使在几毫秒的时间内,你也不会重复测量.
添加更多数字只会增加噪音.你也可以从中拉出额外的数字/dev/random.
我同意俄商务部的回答。想要微秒级精度用于此类措施没有多大意义。因此,您获得的任何其他数字都是没有意义的(基本上是随机的)。
如果您具有要测量的应用程序源代码,则可以使用clock或clock_gettime函数,但不要希望精度超过十几微秒。还有RDTSC机器指令。
并且不要忘记执行时间是从应用程序角度来看的,是不确定的和不可复制的(考虑上下文切换,高速缓存未命中,中断等……在随机时间发生)。
如果要测量整个程序的性能,请使其运行至少几秒钟,然后测量几次(例如8次)时间,然后取平均值(也许会舍弃最佳和最差的时间)。
如果要衡量特定功能的时机,学习如何配置文件的应用程序(gprof,oprofile等等...)又见这个问题
别忘了看时间(7)
请注意,在具有复杂CPU高速缓存以及TLB和分支预测变量的当前(笔记本电脑,台式机,服务器)乱序 流水线 超标量处理器上,某些微小循环或机器指令序列的执行时间不可重现(纳秒级计数将从一次运行到下一次运行)。操作系统还增加了随机性(调度,上下文切换,中断,页面缓存,写时复制,按需分页...),因此以超过一毫秒(如果您很幸运的话,也许是100µs)来测量某些命令的执行精度没有任何意义。您应该多次对命令进行基准测试。
要采取重要措施,您应该将基准测试应用程序更改为在几秒钟内运行(也许在中添加一些循环main,或者使用更大的数据集运行...),然后重复基准测试命令十次。采取平均(或最差,或最好,取决于您追求的)措施。
如果系统时间(1)不够用,您可以自己做测量工具;参见getrusage(2) ; 我对您获得更准确的衡量标准表示怀疑。
在我的i3770K最近的GNU / Linux(4.2内核,Debian / Sid / x86-64)台式计算机上,BTW,诸如time(2)或clock_gettime(2)之类的“系统” 调用运行大约3或4纳秒(感谢vdso( 7)避免了真正的系统调用的负担...),因此您可以在程序中经常使用它们。
| 归档时间: |
|
| 查看次数: |
9723 次 |
| 最近记录: |