在Julia中测量经过的CPU时间

15

许多科学计算语言区分绝对时间(挂钟时间)和 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中有没有一种简单的方法来获取表达式求值的经过时间?

(顺便说一句:经过一番搜索,似乎Julia的计时是基于来自libuv库的uv_hrtime()函数。使用该库中的uv_getrusage可能会提供一种访问Julia中经过时间的方法,但我不是专家。是否有人尝试过类似的东西?)


这是一个很好的建议。请提交一个问题报告或发送邮件到邮件列表(如果您有工作成果,请发送一个拉取请求!) - Isaiah Norton
2个回答

13

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

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

julia> 提示符下安装该软件包。


8

Julia有与Matlab中的tictoc类似的命令tic()toc()

julia> tic(); 7^1000000000; toc()
elapsed time: 0.046563597 seconds
0.046563597

3
我认为在 Julia 版本 1.1.0 及以上,tic() 和toc() 函数已经不再起作用了。或者我错了吗?除了 CPUTime 包之外,还有什么更好的选择吗? - kkb001
这些函数确实已被移除。现在, @time 和相关函数可以胜任该工作。特别是,如果您想要将时间作为变量,请查看 @elapsed - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接