- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
工程招标 中牟县垃圾处理厂二期工程监理招标
今天跑程序出现:out of memory的情况,发现原来受限于内存,矩阵等数据的大小是有限制的的。
输入:memory查看发现:
memory Maximum possible array:5417 MB(5.680e+009 bytes)*
Memory available for all arrays:5417 MB(5.680e+009 bytes)*
Memory used by MATLAB:643 MB(6.747e+008 bytes)
Physical Memory(RAM):4063 MB(4.261e+009 bytes)
*Limited by System Memory(physical+swap file)available.
现在zeros(52200,52200)的数据是存不了的!
是不是将虚拟内存更改一下能够解决这个问题呢?
试探性的修改了一下虚拟内存:
memory Maximum possible array:6483 MB(6.798e+009 bytes)*
Memory available for all arrays:6483 MB(6.798e+009 bytes)*
Memory used by MATLAB:483 MB(5.065e+008 bytes)
Physical Memory(RAM):4063 MB(4.261e+009 bytes)
*Limited by System Memory(physical+swap file)available.
zeros(50000,50000);
?Out of memory.Type HELP MEMORY for your options.
memory Maximum possible array:12564 MB(1.317e+010 bytes)*
Memory available for all arrays:12564 MB(1.317e+010 bytes)*
Memory used by MATLAB:479 MB(5.026e+008 bytes)
Physical Memory(RAM):4063 MB(4.261e+009 bytes)
*Limited by System Memory(physical+swap file)available.
虚拟内存达到一定程度对系统的运行速度就有非常明显的影响了,系统速度变得非常慢!
有什么其他方法?
参考一下博友:
问题一:Matlab是如何存储矩阵的
Matlab中矩阵是以Block,也就是块的形式存储的。也就是说,当Matlab在为即将存储的矩阵划分块时,如果没有相应大小的连续内存,即使实际内存没有被完全使用,他还是会报告Out of Memory。
问题二:如何高效使用Memory
由于在使用的过程中,由于存储单元的不断的被分配和清除,内存会被分割成不连续的区域,这是很容易造成Out of Memory。
1.为矩阵变量预制内存而不是动态分配
动态分配的过程中,由于开始Matlab所用的Block随着矩阵的增大而连续的为此矩阵分配内存,但是由于Block的不连续性,很有可能最开始分配的Block不能满足存储的需要,Matlab只好移动此Block以找到更大的Block来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致Out of Memory。而当你为矩阵变量预制内存时,Matlab会在计算开始前一次性找到最合适的Block,此时就不用为变量连续的分配内存。
比较下面两个程序:
for k=2:1000 x(k)=x(k-1)+5;
end x=zeros(1,1000);
for k=2:1000 x(k)=x(k-1)+5;
end
显然,第二个更好!最好的方法是,在程序一开始就位所有大的矩阵变量预制存存储单元!
尽量早的分配大的矩阵变量
Matlab使用heap method管理内存。当在Matlab heap中没有足够的内存使用时,它会向系统请求内存。但是只要内存碎片可以存下当前的变量,Matlab会重新使用内存。
比如:
a=rand(1e6,1);
b=rand(1e6,1);
使用大约15.4 MB RAM c=rand(2.1e6,1);使用近似16.4 MB RAM:
a=rand(1e6,1);
b=rand(1e6,1);
clear c=rand(2.1e6,1);
使用32.4 MB RAM。因为Matlab不能使用a、b被clear的空间,因为它们均小于2.1 MB,而同时它们也很可能是不连续的。
最好的方法:
c=rand(2.1e6,1);
cl
文档评论(0)