许多科学计算语言对绝对时间(挂钟)和 CPU 时间(处理器周期)进行了区分。例如,在 Matlab 中,我们有:
>> tic; pause(1); toc
Elapsed time is 1.009068 seconds.
>> start = cputime; pause(1); elapsed = cputime - start
elapsed =
0
在 Mathematica 中,我们有:
>>In[1]:= AbsoluteTiming[Pause[1]]
>>Out[1]= {1.0010572, Null}
>>In[2]:= Timing[Pause[1]]
>>Out[2]= {0., Null}
当在计算服务器上运行基准测试代码时,这种区别很有用,其中绝对计时结果可能存在很大差异,具体取决于同时运行的其他进程。
Julia 标准库通过 、 和一些其他函数/宏都支持表达式的计时,tic()
这些toc()
函数@time
/宏都基于time_ns()
测量绝对时间的函数。
>>julia> @time sleep(1)
elapsed time: 1.017056895 seconds (135788 bytes allocated)
我的问题:有没有一种简单的方法可以在 Julia 中获取表达式评估的 CPU 时间?
(旁注:进行一些挖掘,似乎 Julia 计时是基于libuvuv_hrtime()
的函数。在我看来,使用同一个库可能会提供一种访问 Julia 中经过的 CPU 时间的方法,但我不是专家。有没有人尝试过使用这样的东西?)uv_getrusage