测量Julia中经过的CPU时间

时间:2014-06-26 09:41:33

标签: performance time julia cpu-time

许多科学计算语言区分绝对时间(挂钟)和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()函数。在我看来,使用同一个库中的uv_getrusage可能会给出在Julia中访问经过的CPU时间的方法,但我不是专家。有没有人尝试过使用这样的东西?)

2 个答案:

答案 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中的tictoc一样:

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