是否有与 Python 的 cProfile 等效的 Julia 分析器?
Posted
技术标签:
【中文标题】是否有与 Python 的 cProfile 等效的 Julia 分析器?【英文标题】:Is there a Julia profiler equivalent to Python's cProfile? 【发布时间】:2017-01-17 09:39:53 【问题描述】:我想查看我的 Julia 代码的哪些部分执行时间最长的细分。在 Python 中,cProfile 会分解代码调用的每个函数所花费的时间; Julia 有类似的东西吗?
【问题讨论】:
【参考方案1】:分析解释语言(Python、Matlab)和编译语言(Julia)的简单/有用程度存在差异。特别是,您所描述的分析类型需要“检测”代码,这意味着在代码的每一行之前/之后插入额外的语句(读取时钟)。这些额外的语句会增加开销,但在慢速解释语言中,这种开销通常是可控的。在像 Julia 这样的快速语言中,您希望尽一切可能避免“损坏”已编译的代码:通常,编译器会进行优化,这些优化会被添加的检测所破坏,因此检测代码不会为您提供准确的真实性能成本的图片。
如果您真的想使用检测分析器,可以使用较旧的 IProfile,它对运行时间进行逐行分析。但是,我强烈建议您考虑改用内置的采样分析器;它有很多优点,而且我从未遇到过 IProfile 真正更有用的情况。
采样分析器不会修改您的任何代码:您运行的代码与您不进行分析时运行的代码完全相同。相反,它会定期拍摄当前执行点的“快照”。当同一点一遍又一遍地出现时,它很可能成为瓶颈之一。这通常是优化代码所需的全部信息。
【讨论】:
【参考方案2】:@profile <expression>
可能会做你想做的事。但是有很多不同的方法可以做到这一点*。
大多数可用的分析功能是here。
更通用的指南是here;这将使您了解回溯的含义以及如何控制输出。 ProfileView.jl 包也可能有用。
*NB:Profile 实现了一个“采样”分析器(它以某个时间间隔检查您在代码中的位置,例如 1 毫秒)-原因和缺点在指南中进行了解释-但这将最可能是几乎所有用例的全部需求
【讨论】:
【参考方案3】:您也可以尝试使用 VTune Amplifier 分析器来查看 Julia 程序的运行情况。它需要构建 Julia 包。见说明https://software.intel.com/en-us/blogs/2013/10/10/profiling-julia-code-with-intel-vtune-amplifier
【讨论】:
以上是关于是否有与 Python 的 cProfile 等效的 Julia 分析器?的主要内容,如果未能解决你的问题,请参考以下文章
是否有与 Python 的 @property 装饰器等效的 C++11?