我希望看到我的Julia代码的哪些部分花费最多时间执行的细分。在Python中,cProfile分解了代码调用的每个函数花费的时间;朱莉娅有类似的东西吗?
答案 0 :(得分:6)
分析解释语言(Python,Matlab)与编译语言(Julia)的简单/有用之处存在差异。特别是,您所描述的那种分析需要"工具"代码,这意味着在代码的每一行之前/之后插入额外的语句(读取时钟)。这些额外的语句增加了开销,但在缓慢解释的语言中,这种开销通常是可管理的。在像朱莉娅这样的快速语言中,你更愿意尽一切可能避免"腐败"已编译的代码:通常,编译器进行的优化会被添加的工具破坏,因此经过检测的代码无法准确描述真实的性能成本。
如果您真的想要使用仪器分析器,那么旧的IProfile会对运行时间进行逐行分析。但是,我建议你考虑使用内置的采样分析器;它有很多优点,而且我从未遇到过IProfile真正更有用的情况。
抽样分析器不会修改您的任何代码:您运行的代码与您不进行分析时运行的代码完全相同。相反,它会定期拍摄快照"当前执行点。当同一点一再出现时,它可能成为瓶颈之一。这通常是优化代码所需的所有信息。
答案 1 :(得分:3)
@profile <expression>
可能会做你想要的。但是有很多不同的方法可以做到这一点*。
大多数可用的分析功能都是here。
更一般的指南是here;这将指导您了解回溯的意义以及如何控制输出。同样有用的可能是ProfileView.jl包。
* 注意:个人资料实施&#34;采样&#34;分析器(它以某个间隔检查你在代码中的位置,例如1ms) - 原因和缺点,在指南中对此进行了解释 - 但这很可能是几乎所有用例的所有需要
答案 2 :(得分:1)
您也可以尝试使用VTune Amplifier探测器查看Julia程序的内容。它需要构建Julia包。请参阅说明https://software.intel.com/en-us/blogs/2013/10/10/profiling-julia-code-with-intel-vtune-amplifier