Julia:从代码中访问@time计时和内存分配值

时间:2016-01-08 16:53:19

标签: profiling julia

我正在分析我的Julia应用程序,特别是函数调用的执行时间和内存分配。我想自动将这些信息存储到数据库中,以便它可以在没有监督的情况下运行。

我要存储的信息是@time返回的信息,格式为:

@time some_function()
 86.278909 seconds (6.94 M allocations: 383.520 MB, 0.08% gc time)

是否可以从代码本身访问此信息,而不是仅仅打印出来?

我知道我可以使用tic()toq()来访问时间组件,但内存分配呢?

2 个答案:

答案 0 :(得分:6)

有一个@timed宏可以为您提供所有这些信息:

julia> @timed sleep(1)
(nothing,1.00417,624,0.0,Base.GC_Diff(624,0,0,13,0,0,0,0,0))

help?> @timed
  @timed

  A macro to execute an expression, and return the value of the expression, elapsed
  time, total bytes allocated, garbage collection time, and an object with various
  memory allocation counters.

答案 1 :(得分:2)

首先,Julia允许非常好地访问所有内容。因此,如果某些事情发生了什对于@time宏,在REPL中使用macroexpand查看内部:

macroexpand(:(@time some_function()))

完成此操作后,分配tic()toq()的等效内容为before = Base.gc_numdiff = Base.GC_Diff(Base.gc_num(),before)

diff变量现在保存分配统计信息。

例如,

Base.gc_alloc_count(diff)给出分配计数。

干杯!