许多科学计算语言区分绝对时间(挂钟)和 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 消耗时间,但我不是专家。有没有人试过使用这样的东西?)
最佳答案
我找不到任何现有的解决方案,所以我在这里整理了一个包含一些简单 CPU 计时功能的包:https://github.com/schmrlng/CPUTime.jl .该包在并行代码上完全未经测试,可能有其他错误,但如果其他人想尝试调用
>> Pkg.clone("https://github.com/schmrlng/CPUTime.jl.git")
来自
julia>
提示应该安装包。
关于performance - 在 Julia 中测量 CPU 运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24427185/