性能分析代码

Julia 带有自己的 采样分析程序 来衡量函数中花费的 CPU 时间或分配的数量和大小。有 多个软件包 可以将这些分析跟踪可视化。

VS Code 扩展附带了有用的宏 @profview@profview_allocs 来运行这些分析程序以及其自己的分析程序查看器。分析 ProfileView.jl 自述文件 中的示例函数

function profile_test(n)
    for i = 1:n
        A = randn(100,100,20)
        m = maximum(A)
        Am = mapslices(sum, A; dims=2)
        B = A[:,:,5]
        Bsort = mapslices(sort, B; dims=1)
        b = rand(100)
        C = B.*b
    end
end

# compilation
@profview profile_test(1)
# pure runtime
@profview profile_test(10)

显示火焰图和内联注释:profiler 1

单击火焰图中的任何元素都会放大该元素;双击背景(或使用右上角的“重置视图”按钮)将恢复初始视图。Ctrl-单击可打开引用的文件。

工具提示将告诉您在某个帧中收集的样本数以及最上面显示的帧的百分比。有些启发式方法适用于特殊标志,例如垃圾回收、动态调度等等(这些标志也是颜色编码的)。

flame graph

内联视图向您展示父帧的样本有多少来自哪一行(以及当将鼠标悬停在内联注释的开头时,上方也会显示标志)

inline

分配分析程序的工作方式类似,但向您展示的是分配数量或分配大小,而不是花费在函数中的时间

@profview_allocs profile_test(10) sample_rate=0.1

allocations

火焰图上方的菜单允许您在分配数量和大小之间切换。

请注意,可选参数sample_rate可用于调整所收集的样本数量。采样率为 1.0 会记录所有内容;0.0 将不会记录任何内容。请谨慎使用此参数,因为较大的值会显着降低你的代码速度。默认值为 0.0001;如果你知道分配正在发生但看不到有用的信息,请逐渐增加此值。