如何在 Julia 中检测类型不稳定的函数

How to detect type unstable functions in Julia

设置: 假设我有一个相当详细的软件(在 Julia 中),涉及多个模块的交互。我觉得它 运行ning 比它应该的慢。通常是 first culprit to check for is type unstable functions,即编译器无法提前确定输出类型的函数。

问题:如何检测这些类型的不稳定函数?

我目前在做什么:我使用分析工具,例如@tholy 的 ProfileView.jl 包,用于检测瓶颈,假设类型不稳定的函数会出现在这里(由于它们的 运行-time 过多)。但真正好的是某种调试工具,在例程 运行 之后,它会吐出编译器无法提前确定输出类型的函数列表。这可能吗?

您可以尝试 TypeCheck.jl 探查器说速度慢的位。

Julia 0.4 也有 @code_warntype

除了 IainDunning 的出色建议外,运行 julia 使用 --track-allocation=user 并使用 Coverage 包中的 analyze_malloc 分析结果是快速完成的好方法获得高级概述。原则是类型不稳定会触发内存分配,因此寻找具有意外、大量分配的代码行是找到类型不稳定最严重实例的好方法。

您可以找到有关 track-allocation in the manual, and even more performance-analysis options described 的更多信息。