设置:假设我有一个相当详细的软件(在Julia中),涉及多个模块的交互。我觉得它运行速度比应该慢。通常是first culprit to check for is type unstable functions,即编译器无法提前确定输出类型的函数。
问题:如何检测这些类型不稳定的功能?
我目前的工作:我使用的是分析工具,例如: @tholy的ProfileView.jl包,用于检测瓶颈,假设类型不稳定的函数将显示在此处(由于它们的运行时间过长)。但是真正好的是某种调试工具,在运行例程之后,会吐出一个函数列表,其中编译器无法提前确定输出类型。这可能吗?
答案 0 :(得分:6)
你可以尝试TypeCheck.jl对探测器说慢的位。{/ p>
Julia 0.4也有@code_warntype。
答案 1 :(得分:4)
除了IainDunning的优秀建议之外,使用--track-allocation=user
运行julia并使用Coverage
包中的analyze_malloc
分析结果是快速获得高级概述的好方法。原则是类型不稳定性会触发内存分配,因此查找具有意外的大型分配的代码行是查找类型不稳定的最恶劣实例的好方法。
您可以找到有关track-allocation
in the manual的更多信息,以及更多性能分析选项described。