【问题标题】:Matlab - memory usage after solving a large systemMatlab - 解决大型系统后的内存使用情况
【发布时间】:2015-06-02 20:10:35
【问题描述】:

我正在尝试计算 MATLAB 进程在求解大型稀疏矩阵之前和之后使用的内存。我正在使用memory 和直接求解器A\b

我想要的只是通过以某种方式监视 MATLAB 使用的内存来测量,并计算在加载包含稀疏矩阵的文件后使用的内存与在解决稀疏系统后使用的内存之间的差异。

这是我正在使用的代码

% load and store the sparse matrix into A
A = load('very_large_sparse_matrix.mat');

% store memory used after loading
usr = memory;
memory_after_load = usr.MemUsedMATLAB;

% solve the system
% no matter where b comes from
x = A\b

% store memory used after solving
usr = memory;
memory_after_solve = usr.MemUsedMATLAB;

% print the difference
disp(memory_after_solve - memory_after_load);

但差异始终是0 或负整数。我认为是因为 MATLAB 在运行代码之前预先分配了内存(我错了吗?),如果不是紧急情况,它不会动态地改变分配。

我预计使用的内存会增加,因为通过直接求解器填充会增加非零元素的数量。

如何计算?我已经看到whos 给出了变量的大小(以字节为单位),但我正在寻找的是进程使用的内存。

谢谢。

编辑

我刚刚发现 MATLAB 预先分配了它的资源。那么一个等效的问题可能是是否有禁用预分配系统的方法?

【问题讨论】:

  • 有趣的问题。期待看到答案。
  • 我认为问题不在于预分配,而在于 Matlab 在解决方案完成后将它从系统请求的额外内存返回给系统。如果可以选择关闭该机制,我会感到震惊。您可以通过比较峰值内存使用量与系统当前内存使用量来粗略估计。
  • 我也想过手动比较系统信息。我不需要精确的结果,那么它可能是一个很好的工作(临时)解决方案。
  • 不清楚您实际在寻找什么(或为什么)。您想修复分配给 Matlab 的内存量吗?这个问题可能更多地与应用程序和操作系统级别的配置有关,而不是与 Matlab 特定的选项有关。我想 SuperUser.com 可能是一个更好的场所。
  • @horchler 我不想修复任何东西。我只想测量在稀疏矩阵上应用直接方法时由于填充而分配的内存量。

标签: matlab memory sparse-matrix allocation


【解决方案1】:

感谢@horchler,我找到了解决方案。

即使 MATLAB 在执行之前预先分配了它需要的所有内存,spparams('spunomi', 3) 也会显示分配中的峰值。

同样通过[L,U,P,Q,R] = lu(A),然后计算L 中非零元素的数量与A 中非零元素的数量之差,函数whos 得出相同的结果!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2013-01-25
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多