memory-management - 识别 Julia 中的异常内存分配
问题描述
我是一个新的 julia 用户,即将编写我的第一个脚本。我使用 R、Matlab 和 python 进行数据分析,而且我不必担心 c 或 java 中的人们会担心内存分配和我猜想的更高级的编程。我想用 julia 来模拟一些生物数据,而在 python 中,这些类型的程序会变得非常慢。因此,当我阅读内存分配部分中的性能提示时,引起了我的注意。作为一个缺乏 C 等更高级语言背景的人,我应该寻找什么?我在这里阅读了这篇堆栈文章,但他有他编译的 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.jl
和ProfileSVG.jl
包分别在独立和 Jupyter 环境中可视化分析数据 @code_lowered
在最复杂的情况下,您可以使用,@code_typed
和查看各个编译阶段的代码@code_native
这些是高性能 Julia 代码良好开端的基本和最有用的工具。
推荐阅读
- python - 以毫秒为单位的时间,没有秒
- python - 在bash脚本中执行python代码字符串
- matlab - 比较表格的功能
- linux - Tomcat APR 连接器的 SSL 证书配置查询
- python - 无法使用 Google Docs API 复制 Google Doc(没有“复制”属性)
- mysql - 带有 WHERE 子句的 Lag() 函数
- pandas - 如何使用 Pandasql 进行过滤
- c# - How to specify port number to use when launching Visual Studio 2019 Angular .NET Core template?
- google-data-studio - How to Filter CSV (Comma-separated values) in Google Data Studio?
- google-apps-script - Google script stops after 5mins of execution