Memory management julia中异常内存分配的识别

Memory management julia中异常内存分配的识别,memory-management,julia,Memory Management,Julia,我是julia的新用户,即将编写我的第一个脚本。我使用R、Matlab和python进行数据分析,我还不必担心使用c或java的人会对内存分配和更高级的编程产生担忧。我想用julia来模拟一些生物数据,在python中,这些类型的程序会变得非常慢。因此,当我在阅读上一部分中的表演技巧时,我注意到了。作为一个缺乏C等高级语言背景的人,我应该寻找什么?我在这里读过这篇文章,但这篇文章注意到一些东西被篡改的方式是因为他有自己编译的python代码,然后在Julia中运行 我怎样才能知道什么时候我有不寻

我是julia的新用户,即将编写我的第一个脚本。我使用R、Matlab和python进行数据分析,我还不必担心使用c或java的人会对内存分配和更高级的编程产生担忧。我想用julia来模拟一些生物数据,在python中,这些类型的程序会变得非常慢。因此,当我在阅读上一部分中的表演技巧时,我注意到了。作为一个缺乏C等高级语言背景的人,我应该寻找什么?我在这里读过这篇文章,但这篇文章注意到一些东西被篡改的方式是因为他有自己编译的python代码,然后在Julia中运行

我怎样才能知道什么时候我有不寻常的内存分配,反过来说,朱莉娅的“好”内存分配是什么样子的?有没有一种方法可以根据我正在运行的内容来确定不可接受的内存需求水平


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

要了解Julia性能问题,必须仔细阅读该页面中的所有示例

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

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

意外的内存分配几乎总是代码出现问题的标志,通常是类型稳定性问题或创建许多小临时数组

你会发现关于解决这些问题的详细讨论

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

  • @time
    宏(请注意,第一次为给定方法运行它时,实际上主要是测量编译时而不是运行时。因此通常建议使用
    BenchmarkTools.jl
  • BenchmarkTools.jl
    及其
    @btime
    宏(以及其他宏-了解正在发生的事情的第一选择
  • 内置评测()以及
    ProfileView.jl
    ProfileSVG.jl
    包,分别用于在独立和Jupyter环境中可视化评测数据
  • 在大多数复杂的情况下,您可以在不同的编译阶段使用
    @code\u lowered
    @code\u typed
    @code\u native

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

我正计划与Julia一起运行动态模拟。将参数设置为全局变量,然后继续通过函数传递数组以进行数据转换可以吗?这是一个坏主意吗?这可能是一个模糊的解释。一旦你把一个全局变量作为参数传递给一个函数,这就没问题了。但我想避免做很多临时数组,除非我调试正确?一般来说,一旦我的代码完成,唯一的数组应该是我的输入,我感兴趣的数据正确吗?编辑:我知道这就是@code_键入的和其他宏的用途!与lang相反像R这样的参数,将对象传递给Julia中的函数并不意味着将数据复制到内存中。看看这篇文章:我想我见过这样编写的代码。基本上,我的大部分代码都应该是函数,对吗?开始时,我需要在我的工作流程中完成所有的事情,然后在结束时,会有一个函数调用所有的函数上面的东西按它需要的顺序排列,对吗?对于模拟,我甚至可以为我的初始条件设置一个初始的geenration函数,所以我甚至不需要输入,就像在你发布的例子中,函数中填充了空数组。对吗?