Matlab R2017a内存分析器为分配的内存提供了一个荒谬的数字

时间:2018-02-20 08:14:34

标签: matlab memory

我的代码是:

function eigs_mem_test
    N = 20000;
    density = 0.2;
    numOfModes = 250;
    A = sprand(N, N, density);

    profile -memory on
    eigs(A, numOfModes, 0.0)
    profile off

    profsave(profile('info'), 'eigs_test')
    profview
end

然后返回

enter image description here

即。它说MATLAB分配了18014398508117708.00 Kb或1.8e10 Gb - 完全不可能。这怎么发生的?代码以正确的输出完成,在htop中我可以看到内存使用量变化很大,但保持在16G以下。

对于N = 2000,我得到明智的结果(即分配0.2G。)

如果我想获得用于大型稀疏矩阵的内存上限,我如何有效地分析这种情况呢?

我使用MATLAB R2017a。

1 个答案:

答案 0 :(得分:1)

我无法在R2017b中重现您​​的问题,我的机器上有128GB的RAM。以下是运行示例代码后的结果:

profiler

值得注意的是,该功能达到峰值14726148Kb,或约1.8GB。我对MATLAB在这里使用的单位感到困惑,因为我在任务管理器中看到了更接近14GB的使用率,这与你观察到的大量使用量(以及GB的1.4e7KB)相匹配,我只能认为探测器是用来表示KB的状态。 (千字节)而不是Kb(千位)。

像这样的大量意外值通常是溢出的结果,所以这可能是内部溢出错误。

您可以使用whos来获取变量

的磁盘大小
w = whos('A');        % get details of variable A
sizeOnDisk = w.bytes; % get size on disk

这并不一定会告诉您示例中使用的eigs函数有多少内存。您可以在函数中轮询memory以获取当前使用情况。

我会拒绝进一步探讨这个问题,因为如何分析内存使用情况的问题有already been asked and answered

N.B。我不确定为什么我的机器比你的机器慢100倍,我认为你的内存使用的图像不是来自实际运行你的示例代码?或者我的RAM很糟糕......