许多科学计算语言区分绝对时间(挂钟)和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计时基于libuv的uv_hrtime()
函数。在我看来,使用同一个库中的uv_getrusage
可能会给出在Julia中访问经过的CPU时间的方法,但我不是专家。有没有人尝试过使用这样的东西?)
答案 0 :(得分:9)
我无法找到任何现有解决方案,所以我在这里整理了一个包含一些简单CPU时序功能的软件包:https://github.com/schmrlng/CPUTime.jl。该软件包在并行代码上完全未经测试,可能有其他错误,但如果有人想尝试调用
>> Pkg.clone("https://github.com/schmrlng/CPUTime.jl.git")
来自julia>
提示符的应该安装包。
答案 1 :(得分:8)
Julia确实拥有tic()
和toc()
命令,它们就像在Matlab中的tic
和toc
一样:
julia> tic(); 7^1000000000; toc()
elapsed time: 0.046563597 seconds
0.046563597