【问题标题】:'Out of memory' in Matlab. A slow but a permanent solution?Matlab中的“内存不足”。一个缓慢但永久的解决方案?
【发布时间】:2016-07-21 00:37:35
【问题描述】:

我想知道我对“内存不足”问题的建议是否不可能。这是我的建议:

这个想法是将巨大的矩阵(比如BIG = rand(10^6))作为 .mat(-v7.3) 文件无缝保存到 HDD 中,因为无法将其保存在内存中并在需要时无缝调用它。然后,当你想像这样使用它时:

a = BIG(3678,2222);
s = size(BIG);

,它在幕后无缝地执行此操作:

m = matfile('BIG.m');
a = m.BIG(3678,2222);
s = size(m,'BIG');

我知道速度很重要,但假设我有足够的时间但没有足够的内存。而且最好编写一个内存高效的程序,但再次假设我需要使用无法优化的其他人的功能。我确实有一些更相关的问题:这可以使用对象来实现吗?还是需要在 Matlab 中进行基础架构更改?

【问题讨论】:

标签: matlab memory


【解决方案1】:

在我看来这当然是可能的,因为这基本上是许多操作系统以paging 的形式所做的。

此外,MATLAB 分布式计算服务器也提供了类似的功能。这允许您(除其他外)将单个矩阵的数据存储在多台机器上,并以您建议的方式无缝访问它。

恕我直言,允许将数据分页到文件/交换应该是 MATLAB 中的设置。不幸的是,这不是 MATLAB 的内存模型的工作方式,我怀疑在他们这边实现这一点非常困难。另外,启用此设置后,用户将不再受到保护,不会再犯像zeros(1e7)而不是zeros(1e7,1)这样的愚蠢错误;它似乎只是挂起系统,因为 MATLAB 正忙于用零填充您的整个驱动器。

无论如何,我认为 可能 使用 MATLAB 类。但我不会推荐它。请注意,实现正确的 subsrefsubsasgn 是 *ahum* 具有挑战性的,此外,您可能必须重新实现许多算法(例如mldivide)。这很可能意味着您将损失大量性能;考虑数以千计的因素。

这是我在谷歌搜索时发现的一个有趣的random relevant paper

【讨论】:

  • 如果您能提供任何有关错误处理的代码示例,那就太好了。我在这里关于一般主题的线程askubuntu.com/q/799834/25388
【解决方案2】:

内存映射 io(matlab 支持)可能是解决您问题的方法。

有一个文件映射到内存,所有对该内存地址的读/写实际上都是对该文件的读/写。

这只是保留/阻塞内存地址,不消耗物理内存。

但是,我只建议使用 64 位 matlab,因为对于 32 位 matlab,地址空间根本不足以将 ram 用于数据、matlab 和 dll 的代码以及内存映射 io。

查看memmapfile()的文档页面的示例,例如,

m = memmapfile('records.dat',    ...
           'Offset', 1024,   ...
           'Format', {'uint32' [4 10 18] 'x'});

A = m.Data(1).x;

whos A
   Name      Size                     Bytes  Class

   A        4x10x18                   2880   uint32 array

注意,对m.Data(1).x的访问重定向到文件IO,即不消耗内存。因此,它提供了对驻留在磁盘上的可能非常大的数据文件的部分的有效随机访问。另请注意,可以实现示例中更复杂的数据结构。

在我看来,这提供了您想到的“对象实现”。

不幸的是,这不允许直接memmap MATfiles,这将非常有用。由于压缩,这可能很困难。

【讨论】:

    【解决方案3】:

    写一个函数:

    function a=BIG(x,y)
      m = matfile('BIG.mat');
      a = m.BIG(x,y);
    end
    

    每次你写BIG(a,b)时都会调用这个函数。

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      相关资源
      最近更新 更多