首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab:你对使用矩阵的小内存问题的看法

问Matlab:你对使用矩阵的小内存问题的看法
EN

Stack Overflow用户
提问于 2013-05-16 09:01:05
回答 3查看 285关注 0票数 2

我有一个关于MATLAB内存消耗的小问题。

我的建筑:

  • Linux12.3 64位OpenSuse
  • 16 GB内存
  • Matlab 2013 a 64位

我处理一个大小为62x11969100(名为y)的双矩阵。

当我尝试以下几点时:

代码语言:javascript
复制
a = bsxfun(@minus,y,-1)

或者简单的

代码语言:javascript
复制
a = minus(y, -1)

我得到了内存中的错误(在这两种情况下)。

我刚刚计算了分配给矩阵的ram空间:

62 x 11969100 x8= 5.53 GB

我哪里错了?!

非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-16 10:56:03

我在Win64上运行,内存为16‘m。

从新的MATLAB开始,只打开了几个不重要的应用程序,我的基线内存使用量约为3.8GB。当我创建y时,这个值会增加到9.3GB (9.3-3.8 = 5.5GB,大约是您计算的)。当我运行a = minus(y, -1)时,我不会耗尽内存,但是内存会增加到14.4GB。

您不需要太多额外的内存就会被占用(最多1.6GB),从而导致内存不足错误。

此外,当MATLAB存储数组时,它需要一个连续的内存块来实现。如果您的内存有点支离破碎--也许您有几个其他的小变量恰好存储在这5.5GB块的中间--您也会得到内存不足的错误(使用pack有时可以避免这个问题)。

票数 1
EN

Stack Overflow用户

发布于 2013-05-16 10:13:59

memory在windows平台上的输出:

代码语言:javascript
复制
>> memory
Maximum possible array:            2046 MB (2.145e+009 bytes) *
Memory available for all arrays:   3226 MB (3.382e+009 bytes) **
Memory used by MATLAB:              598 MB (6.272e+008 bytes)
Physical Memory (RAM):             3561 MB (3.734e+009 bytes)

*  Limited by contiguous virtual address space available.
** Limited by virtual address space available.

computer在linux/mac上的输出:

代码语言:javascript
复制
>> [~,maxSize] = computer
maxSize =
     2.814749767106550e+14    % Max. number of elements in a single array

使用一些黑客(找到here):

代码语言:javascript
复制
>> java.lang.Runtime.getRuntime.maxMemory
ans =
    188416000  

>> java.lang.Runtime.getRuntime.totalMemory
ans =
    65011712

>> java.lang.Runtime.getRuntime.freeMemory
ans =
    57532968

正如您所看到的,除了每个变量的内存限制外,对于所有变量的总存储也有限制。对于Windows或Linux来说,这并没有什么不同。

重要的是要注意的是,例如,在我的Windows机器上,即使我有足够的RAM,也不可能创建两个1.7GB的变量,而且这两个变量都不受最大变量大小的限制。

由于执行minus操作将为一个新变量分配相同大小的结果(在您的情况下是a,或者当没有分配到任何东西时为ans ),所以内存中至少需要有两个这样的巨大的东西。

我猜您遇到了所有变量可用的总内存空间的第二个限制。

票数 1
EN

Stack Overflow用户

发布于 2013-05-16 09:05:53

为了提高效率,对bsxfun进行矢量化。通常,向量化解决方案需要的不仅仅是最小的内存。

您可以尝试使用repmat,或者如果不使用简单的for循环。

一般来说,我相信for循环将需要最少的内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16583154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档