performance - 在 Julia 中测量 CPU 运行时间

标签 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 计时基于 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/

相关文章:

c# - 有没有更好的方法来计算消息队列 (MSMQ) 中的消息数?

java - 锁定缓存键而不锁定整个缓存

assembly - 显示 assembly 时间

julia - 如何在错误消息中显示类型别名而不是参数类型

r - 按列或行操作的惯用 Julia 样式是什么?

c - 用条件循环每个数字的最快方法

android - 使用Android Profiler找出ANR的原因

javascript - 为什么我无法增加计时器值?

c# - 为什么我们使用时间跨度从另一个日期减去一个日期时得到负值

julia - 使用 `@code_lowered` 是解决 Julia 中的性能问题的有效方法吗?