首页 > 解决方案 > 识别 Julia 中的异常内存分配

问题描述

我是一个新的 julia 用户,即将编写我的第一个脚本。我使用 R、Matlab 和 python 进行数据分析,而且我不必担心 c 或 java 中的人们会担心内存分配和我猜想的更高级的编程。我想用 julia 来模拟一些生物数据,而在 python 中,这些类型的程序会变得非常慢。因此,当我阅读内存分配部分中的性能提示时,引起了我的注意。作为一个缺乏 C 等更高级语言背景的人,我应该寻找什么?我在这里阅读了这篇堆栈文章,但他有他编译的 python 代码,然后在 Julia 中运行,所以我觉得它不相关。

当我有异常的内存分配时,我怎么知道,相反,Julia 中“好的”内存分配是什么样的?有没有办法根据我正在运行的内容来确定不可接受的内存需求水平?

除了@time宏,你还有哪些打样技巧?

标签: memory-managementjulia

解决方案


要非常仔细地了解 Julia 性能问题,请阅读https://docs.julialang.org/en/v1/manual/performance-tips/ 在该页面中运行自己的所有示例是必须的。

通常,内存分配不是主要瓶颈。根据我的经验,当人们开始使用 Julia 时,类型稳定性和使用全局变量是所有性能问题的主要来源。

上面的文档还有一个关于内存分配的部分:

“意外的内存分配几乎总是表明您的代码存在问题,通常是类型稳定性问题或创建许多小型临时数组。”

您将在那里找到有关解决此类问题的详细讨论。

关于代码分析,您有以下工具:

  • @time宏(请注意,第一次为给定方法运行它时,实际上主要是测量编译时间而不是运行时间。因此通常BenchmarkTools.jl建议
  • BenchmarkTools.jl及其@btime宏(除其他外 - 了解正在发生的事情的首选
  • 内置分析 ( https://docs.julialang.org/en/v1/manual/profile/ )ProfileView.jlProfileSVG.jl包分别在独立和 Jupyter 环境中可视化分析数据
  • @code_lowered在最复杂的情​​况下,您可以使用,@code_typed和查看各个编译阶段的代码@code_native

这些是高性能 Julia 代码良好开端的基本和最有用的工具。


推荐阅读