打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[转载]ZT matlab 提高内存容量

每次做实验,数据量都很大。总是偷懒,分得批次少,每个数据就更大了。因为设备写出的数据是加密的,不能用一般的dat文件的读法读入,但有才的师兄还是破解了,写了一个matlab程序,可以再把数据拿出来。也就是说,要再对采集的数据进行信号处理或者图像处理的话,越不过的问题就是重新加载数据。而因为偷懒导致的最直接后果,就是用matlab读入的时候"Outof memory" 了。刚开始,CPU就飚到100%,PF使用显示1.47G,然后就是一片死寂,out ofmemory.每次看到matlab下鲜红的错误提示,都很想砸机器。

这个问题以前也不是没有遇到过。当时想到的朴素的方法,就是找台高级点儿的机器。从三叔那儿找到了双核+4G的,以前就这么凑合了,不过传起数据来真是头大。三叔一直对总带病毒的QQ严防死守强烈抵制,于是他把每一个100MB的文件给我打成10个包,分10次发到我的邮箱。看到上次那三十封新邮件的时候,我真不敢想象这个可爱的小老头是怎么在电脑前面和牛一样的网速对抗了一下午。于是,再也不敢找他了。在小猪那儿试过了双核+1G,也是不行的。

除了增加物理内存之外,再来就应该考虑的是如何修改程序,使其更精炼。可惜我蔡鸟来的。尤其是调用的是第一句,就是openfile就出问题,再怎么样也不可能有所改观了。

最后一条路子,就是增加虚拟内存。发现机器已经填得满满的了。曾经有一段时间C盘就剩下100MB,我也算个残害机器的高人了。就这样,我们仍然彪悍地跑着matlab。清理了很久,也就1个G。寝室的机器合了两个盘,C盘还剩9G,增加虚拟内存也不见好转,该Outof memory,一点儿不含糊。

没办法,静心查了些东西。还真发现经验之谈了。http://bbs.matwav.com/post/view?bid=12&id=401853&sty=3&age=0&tpg=1&ppg=1#401853100MB的东西,1个2G也不够用的,想贴张图片说明一下,总也贴不上。以前就听说操作系统对程序的内存支持最大是2G,一直没有理解什么意思,看了介绍的东西,终于明白了。在matlab里运行>>system_dependentmemstats,就可以看到,virtual memory,total 只是2047MB,物理内存在1.2G以上的,可以用3GBswitch扩容到3GB,貌似操作系统不一样的话,最后扩容结果也不同,Linux更大些。因为贴不了图片,还是把步骤写下来。

右键单击我的电脑--->>属性--->>高级--->>启动和故障修复--->>设置--->>编辑--->>

将最后一行multi(0)disk(0)rdisk(0)partition(1)WINDOWS="MicrosoftWindows XP Professional"复制,在下一行粘贴,并将粘贴一行改为multi(0)disk(0)rdisk(0)partition(1)WINDOWS="MicrosoftWindows XP Professional with 3GB switche" /3gb--->>存储--->>确定--->>重新启动计算机--->>在显示选择操作系统时,选择带有3GB switche的一项--->>打开matlab。

这时运行system_dependent memstats,就能看到virtualmemory total 到了3G。

此法甚好。我的数据又能算了。就是慢些,读入一个107MB的数据,要用480多秒。不错了,聊胜于无。

用 Matlab 进行大规模科学计算或仿真时,内存是一个需要时常注意的问题。当你写的 Matlab程序跳出“Out of Memory” 时,以下几点措施是需要优先考虑的解决方法:

1. 确保内存的连续性

Matlab 中数组必须占用连续分配的内存段,当无法为新建的数组分配连续的内存段的时候,”Outof Memory” 就会出现。由于反复分配和释放数组会使可用的连续内存段减少,因此当 Matlab刚刚启动时其连续内存最多,此时往往可以新建非常大的数组,这一点可以用命令 feature(’memstats’)(在 7.0版本以上)看出。如果现实的最大连续内存段很小,但实际可用内存(非连续的)仍旧很多,则表明内存中碎片太多了。此时可以考虑用 pack命令,pack 命令的作用就是将所有内存中的数组写入硬盘,然后重新建立这些数组,以减少内存碎片。此外,在命令行或者程序中都可以使用clear 命令,随时减少不必要的内存。

2. 3GB 开关

由于32位 Windows 操作系统的限制,每个进程只能使用最多 2GB 的虚拟内存地址空间,因此Matlab 的可分配内存也受到相应的限制。Matlab 7.0.1 引进了新的内存管理机制,可以利用 Windows 的 3GB开关,使用 3GB 开关启动的 Windows 每个进程可以在多分配 1 GB的虚拟地址空间,具体的操作方法可见:http://www.mathworks.com/support/tech-notes/1100/1106.html

3. 减少使用双浮点数

Matlab 默认的数字类型是双精度浮点数 (double),每个双浮点数占用 8个字节。对于一些整数操作来说,使用双浮点数显得很浪费。在 Matlab中可以在预先分配数组时指定使用的数字类型如以下命令:zero(10, 10, ‘uint8′)。对于浮点数,在很多精度要求不高的情况下,可以使用4个字节的单浮点数(single),可以减少一半的内存。关于单、双浮点数的精度对照如下,以便根据需要选择使用:

out of Memory问题处理方法简单总结一下:

1. 增加虚拟内存
2. 采用PACK
3. 条件允许的话采用64位系统
4. 采用3GB switch
5. 优化程序,减少变量
6. 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动
7. 关闭Matlab Server

目前就想起来这些,欢迎大家补充
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
matlab管理内存方法
matlable内存问题
【Matlab】1.数组的创建
linux与windows栈内存分配区别
java四类八种基本数据类型
MATLAB GPU编程基础
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服