【问题标题】:Measuring elapsed CPU time in Julia在 Julia 中测量经过的 CPU 时间
【发布时间】:2014-06-26 09:41:33
【问题描述】:

许多科学计算语言都区分绝对时间(挂钟)和 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 可能会提供一种访问已用 CPU 的方法有时间在 Julia,但我不是专家。有没有人尝试过使用这样的东西?)

【问题讨论】:

  • 这是一个很好的建议。请提交问题或通过电子邮件发送邮件列表(如果您有工作,请发送拉取请求!)

标签: performance time julia cpu-time


【解决方案1】:

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

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

julia> 提示应该安装包。

【讨论】:

    【解决方案2】:

    Julia 确实有命令 tic()toc(),它们的工作原理与 Matlab 中的 tictoc 类似:

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

    【讨论】:

    • 我认为 tic() 和 toc() 在 Julia 版本 1.1.0 及更高版本中不再适用。还是我错了?除了包 CPUTime 之外,最好的选择是什么?
    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2017-07-13
    • 2013-12-08
    相关资源
    最近更新 更多