13

许多科学计算语言对绝对时间(挂钟)和 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

4

2 回答 2

12

我找不到任何现有的解决方案,所以我在这里整理了一个带有一些简单 CPU 计时功能的包:https ://github.com/schmrlng/CPUTime.jl 。该软件包在并行代码上完全未经测试,可能还有其他错误,但如果其他人想尝试调用

>> Pkg.clone("https://github.com/schmrlng/CPUTime.jl.git")

julia>提示应该安装包。

于 2014-06-27T00:44:48.857 回答
8

Julia 确实有命令tic()toc()其工作方式tictocMatlab 中的和一样:

julia> tic(); 7^1000000000; toc()
elapsed time: 0.046563597 seconds
0.046563597
于 2015-04-17T22:02:00.717 回答