我有一些长达数百行的 Julia 函数,我想对其进行分析,以便我可以优化代码。
我知道基准测试工具包允许使用以下命令测量函数的总体执行时间和内存消耗@btime
or @benchmark
。但这些函数没有告诉我函数内部的瓶颈在哪里。因此,我的第一步必须使用某种工具来识别代码的哪些部分速度较慢。
例如,在 Matlab 中,有一个非常好的内置分析器,它运行脚本/函数,然后报告每行代码所花费的时间。类似地,Python 中有一个模块叫做线路分析器它可以生成逐行报告,显示函数的每一行花费了多少时间。
我正在寻找的只是一份逐行报告,显示每行代码花费的总时间以及特定代码段被调用的次数。
Julia 有这样的功能吗?内置或通过某些第三方包。
有一个分析Julia 文档中的章节包含所有必要的信息。
另外,您可以使用个人资料视图.jl或类似的软件包,用于对分析代码进行可视化探索。
而且,不完全是分析,但在实践中非常有用的包是定时器输出.jl
UPD:由于 Julia 是一种编译语言,因此测量各行的时间是没有意义的,因为执行的实际代码可能与 Julia 中编写的代码非常不同。
例如下面的 Julia 代码
function f()
x = 0
for i in 0:100_000_000
x += i
end
x
end
降低至
julia> @code_llvm f()
; @ REPL[8]:1 within `f'
define i64 @julia_f_594() {
top:
; @ REPL[8]:7 within `f'
ret i64 5000000050000000
}
IE。根本没有循环。这就是为什么使用一行在所有回溯集合中出现的频率的代理指标,而不是执行时间。当然,它与执行时间不同,但它很好地近似了瓶颈所在,因为执行时间长的行更频繁地出现在回溯中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)