Matlab - 解决大型系统后的内存使用情况
Matlab - memory usage after solving a large system
我正在尝试计算求解大型稀疏矩阵前后 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 会预先分配其资源。那么一个等效的问题可能是是否有禁用预分配系统的方法?
感谢@horchler,我找到了解决方案。
即使 MATLAB 在执行前预先分配了它需要的所有内存,spparams('spunomi', 3)
也会显示分配内的峰值。
同样通过做[L,U,P,Q,R] = lu(A)
然后计算L
中非零元素个数与A
中非零元素个数之差,函数whos
导致相同的结果!
我正在尝试计算求解大型稀疏矩阵前后 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 会预先分配其资源。那么一个等效的问题可能是是否有禁用预分配系统的方法?
感谢@horchler,我找到了解决方案。
即使 MATLAB 在执行前预先分配了它需要的所有内存,spparams('spunomi', 3)
也会显示分配内的峰值。
同样通过做[L,U,P,Q,R] = lu(A)
然后计算L
中非零元素个数与A
中非零元素个数之差,函数whos
导致相同的结果!