我正在尝试计算解决大型稀疏矩阵之前和之后MATLAB过程使用的内存。我正在使用memory
和直接求解器A\b
。
我想要的只是通过以某种方式监视MATLAB使用的内存并计算加载包含稀疏矩阵的文件之后使用的内存与刚刚解决稀疏系统之后使用的内存之间的差异来进行测量。 / p>
这里是我正在使用的代码
% 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预先分配了它的资源。那么一个等价的问题可能是是否有一种禁用预分配系统的方法?
答案 0 :(得分:0)
感谢@horchler,我找到了解决方案。
即使MATLAB在执行前预先分配了所需的所有内存,spparams('spunomi', 3)
也会显示分配内的峰值。
同样通过[L,U,P,Q,R] = lu(A)
然后计算L
中非零元素数量与A
中非零元素数量之间的差异,函数whos
会导致同样的结果!