Matlab Out of memory问题总结【原创】(二)

不知道为什么论坛里没有关于 MATLAB 常见问题的一些总结贴,我在这里抛砖引玉了,希望各位高手能够不吝指教,多多发表自己对 MATLAB 使用的一些感悟和总结!


Out of memory 问题总结【原创】(二)
1.
尽量早的分配大的矩阵变量
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);
clear
a = rand(1e6,1);
b = rand(1e6,1);
使用 16.4 MB RAM
2.
尽量避免产生大的瞬时变量,当它们不用的时候应该及时 clear
3.
尽量的重复使用变量(跟不用的 clear 掉一个意思)
4.
将矩阵转化成稀疏形式
如果矩阵中有大量的 0 ,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。
例如:
1000 × 1000 的矩阵 X ,它 2/3 的元素为 0 ,使用两种存储方法的比较:

Name
Size
Bytes
Class


X
1000x1000
8000000
double array


Y
1000x1000
4004000
double array (sparse)

5.
使用 pack 命令
当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的 Block 而已。如果此时 Out of Memory ,此时使用 pack 命令可以很好的解决此问题。
6.
如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。
7.
增大内存
问题三:  Increase the size of the swap file. 
wap space 的设置与使用的操作系统有关,具体的如下:
1.
UNIX

Information about swap space can be procured by typing pstat -s at the UNIX command prompt. For detailed information on changing swap space, ask your system administrator. 
2.
Linux

Swap space can be changed by using the mkswap and swapon commands. For more information on the above commands, type man followed by the command name at the Linux prompt. 
3.
Windows NT

Follow the steps shown here: Right-click the My Computer icon, and select Properties. Select the Performance tab and click the Change button to change the amount of virtual memory. 
4.
Windows 2000

右键“我的电脑”- > 属性- > 高级- > 性能- > 设置,从而改变其虚拟内存。
5.
Windows XP

右键“我的电脑”- > 属性- > 高级- > 性能- > 设置,从而改变其虚拟内存。
问题四:尽量少时用系统资源(对于 Windows
Windows 中字体、窗口等都是要占用系统资源的,所以在 Matlab 运行时尽量不要打开不用的窗口。
问题五: Reloading Variables on UNIX Systems
由于我不使用 UNIX 系统,这里不介绍,直接从 Help 中粘过来
On UNIX systems, MATLAB does not return memory to the operating system even after variables have been cleared. This is due to the manner in which UNIX manages memory. UNIX does not accept memory back from a program until the program has terminated. So, the amount of memory used in a MATLAB session is not returned to the operating system until you exit MATLAB. 

To free up the memory used in your MATLAB session, save your workspace variables, exit MATLAB, and then load your variables back in.

转载地址:http://www.ilovematlab.cn/thread-19610-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值