当代明月分享 http://blog.sciencenet.cn/u/chenfanglin

博文

out of memory

已有 11799 次阅读 2010-4-22 14:55 |个人分类:Matlab|系统分类:科研笔记

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

1. 确保内存的连续性

Matlab 中数组必须占用连续分配的内存段,当无法为新建的数组分配连续的内存段的时候,”Out of 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 的虚拟地址空间,具体的操作方法:

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

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

    这时运行system_dependent memstats,就能看到virtual memory total 到了3G(原来为2G)。

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

在非java虚拟机下运行matlab据说可以扩大内存
启动 非java虚拟机下运行matlab的方法有:
一.
1、右建点matlab快捷方式,选属性
2、在“目标”中添加-nojvm
3、确定/应用

二.
在dos命令窗口中用 matlab -nojvm

三.
开始菜单 ---> 运行... ---> matlab -nojvm也可以



https://blog.sciencenet.cn/blog-3199-314943.html

上一篇:腐蚀,膨胀
下一篇:索引号的查询方法
收藏 IP: .*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-19 10:25

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部