我正在分析我的Julia应用程序,特别是函数调用的执行时间和内存分配。我想自动将这些信息存储到数据库中,以便它可以在没有监督的情况下运行。
我要存储的信息是@time
返回的信息,格式为:
@time some_function()
86.278909 seconds (6.94 M allocations: 383.520 MB, 0.08% gc time)
是否可以从代码本身访问此信息,而不是仅仅打印出来?
我知道我可以使用tic()
和toq()
来访问时间组件,但内存分配呢?
答案 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_num
和diff = Base.GC_Diff(Base.gc_num(),before)
。
diff
变量现在保存分配统计信息。
Base.gc_alloc_count(diff)
给出分配计数。
干杯!