微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

识别 Julia 中异常的内存分配

如何解决识别 Julia 中异常的内存分配

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

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

除了 @time 宏之外,您还有哪些其他校对技巧?

解决方法

要非常仔细地了解 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 代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。