out of memory的解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20823641/article/details/52785127

      在使用大矩阵的时候,会遇到out of memory的问题,这个让人很纠结,解决的方法一个是从电脑方面,一个就是自身的程序优化问题。从网站各种资料和官方的help中总结了一些。

     首先要知道matlab是如何存储矩阵的,Matlab中矩阵是以Block,也就是块的形式存储的。也就是说,当Matlab在为即将存储的矩阵划分块时,如果没有相应大小的连续内存,即使实际内存没有被完全使用,他还是会报告“Out of Memory”。

    下面就是一些方案让我们高效的去使用内存。

1、为矩阵变量预制内存而不是动态分配,意思就是你在用数据的使用,有个初始化,例如有个矩阵a,在开始就分配a = zeros(1, 1000);

2、尽量早的分配大的矩阵变量,意思就是哪个矩阵大,你先分配哪个,c = rand(2.1e6,1);cleara = rand(1e6,1);b = rand(1e6,1);要比a = rand(1e6,1);b = rand(1e6,1);clearc = rand(2.1e6,1);节约很多

3、尽量的重复使用变量(跟不用的clear掉一个意思)

4、将矩阵转化成稀疏形式,如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。

5.使用pack命令,最好让matlab程序分段运行,在每一段运行前,在matlab命令行中敲入"pack"

当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。

6.如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。

7.增大内存,这里是物理内存

8、增大内存,这里是虚拟内存,右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。

9、尽量少时用系统资源(对于Windows),Windows中字体、窗口等都是要占用系统资源的,所以在Matlab运行时尽量不要打开不用的窗口。

10、打开3G开关,右键点击我的电脑 -> 属性 -> 高级 -> 启动和故障恢复 -> 设置 -> 编辑。

进入boot.int,将你的系统名

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MicrosoftWindows XP Professional "

改为

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MicrosoftWindows XP Professionalwith 3GBswitche" /3gb

重新启动,效果立现,在matlab中输入feature('memstats'),可以看到现在的实际内存已经变为了3GB




猜你喜欢

转载自blog.csdn.net/qq_20823641/article/details/52785127