是否有Julia分析器相当于Python的cProfile?

3

我希望能够看到我的Julia代码中哪些部分执行时间最长的详细信息。在Python中,cProfile会分解出代码中每个调用的函数所花费的时间; 在Julia中有类似的工具吗?

3个回答

6
对于解释性语言(如Python、Matlab)和编译型语言(如Julia),分析其性能差异很大。特别是,您所描述的分析需要“插装”代码,这意味着在每行代码之前/之后插入额外语句(读取时钟)。这些额外语句会增加开销,但在慢速的解释性语言中,这种开销通常是可以管理的。在像Julia这样的快速语言中,您更希望尽一切可能避免“破坏”编译代码:通常,编译器进行的优化将被添加的插装破坏,因此插装代码将无法准确反映真实的性能成本。
如果您真的想使用插装分析器,则有旧版IProfile可进行逐行分析运行时间。然而,我建议您考虑使用内置的采样分析器;它具有许多优点,我从未遇到过IProfile真正更有用的情况。
采样分析器不会修改您的任何代码:您运行的是与不进行分析时完全相同的代码。相反,它会定期对当前执行点进行“快照”。当同一点一遍又一遍地出现时,很可能是瓶颈之一。这通常就是优化代码所需的全部信息。

3
@profile <expression> 可能会达到你想要的效果。但是有许多不同的方法可以做到这一点*。
大多数可用的分析功能在这里
更一般的指南在这里; 它将带领您了解回溯意味着什么以及如何控制输出。ProfileView.jl 包也可能很有用。
*注意:Profile实现了“采样”分析器(它检查代码中的位置间隔为1ms),其原因和缺点在指南中有解释,但这很可能是几乎所有用例所需要的。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接