【问题标题】:Memory used by Julia processJulia 进程使用的内存
【发布时间】:2017-06-02 10:34:16
【问题描述】:

我正在开展一个关于稀疏线性系统分辨率的项目(使用 UMFPACK 库并测试所有 FEMLAB 矩阵),我必须检查该分辨率需要多少 RAM(对于每个矩阵)。

我必须用不同的编程语言测试 UMFPACK,所以我已经在 MATLAB 中编写了一些代码,在其中找到了以下命令:

[user, sys] = memory,尤其是user.MemUsedMATLAB

现在我必须使用 Julia 编程语言编写相同的软件,但似乎很难找到一些类似的命令;我对 Julia 很陌生,我刚刚尝试了命令 @time,但我无法将分配的内存字节数存储在变量中。 这非常重要,因为最后我需要绘制一个图形,其中包含每个矩阵分配的内存字节值。

有人知道我的问题的解决方案吗?如何在变量中获取代码使用的 RAM? Julia 中是否有与 MemUsedMATLAB 等效的命令?

【问题讨论】:

  • 也许 Julia 的 memory allocation analysis 文档是一个好的开始。
  • 另外,为了在比较不同程序时保持一致性,您可能希望改用系统工具(例如,找到一种方法来解析 here 提到的方法之一的输出)

标签: matlab julia ram


【解决方案1】:

@time 宏显示当您调用相关代码时(总共)分配了多少内存。这包括临时变量——Matlab 不会告诉你的。您可以使用@timed 宏访问这些值;每个返回值的描述请参见它的帮助:

julia> @timed rand(100000)'*rand(100000)
(25069.751546076346, 0.002270112, 1600336, 0.0, Base.GC_Diff(1600336, 2, 0, 7, 0, 0, 0, 0, 0))

help?> @timed
  @timed

  A macro to execute an expression, and return the value of the expression,
  elapsed time, total bytes allocated, garbage collection time, and an object
  with various memory allocation counters.

但这不是静止的记忆。它是在计算表达式期间分配的内存总量。如果有很多临时内存,这可能会大大高于系统的可用内存。

您还可以使用Base.summarysize 函数来估计单个对象的大小,但计算是近似的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2019-06-26
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多