Matlab—求解大型系统后的内存使用

Matlab—求解大型系统后的内存使用,matlab,memory,sparse-matrix,allocation,Matlab,Memory,Sparse Matrix,Allocation,我试图计算MATLAB进程在求解大型稀疏矩阵前后使用的内存。我正在使用内存和直接解算器A\b 我想要的只是通过某种方式监控MATLAB使用的内存,并计算加载包含稀疏矩阵的文件后使用的内存与求解稀疏系统后使用的内存之间的差异 这是我正在使用的代码 % load and store the sparse matrix into A A = load('very_large_sparse_matrix.mat'); % store memory used after loading usr = me

我试图计算MATLAB进程在求解大型稀疏矩阵前后使用的内存。我正在使用
内存
和直接解算器
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预先分配了它的资源。那么一个等价的问题可能是,有没有一种方法可以禁用预分配系统?

多亏了@horchler,我找到了一个解决方案

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


同样,通过执行
[L,U,p,Q,R]=lu(A)
,然后计算
L
中非零元素的数量与
A
中非零元素的数量之间的差值,函数
whos
会得到相同的结果

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