confer 发表于 2007-1-2 11:23

matlab 的内存如何管理?

我编写了一个MATLAB程序,全局形函数的拉格朗日变分处理复杂结构的振动响应,但是发现假设振型只取10阶,750兆内存很快就不够了 out of memory ,请问matlab 有没有类似Fortran的虚拟内存管理?是不是我必须要扩充内存啊? 

pengweicai 发表于 2007-1-2 13:37

虚拟内存 在 我的电脑属性中设置。

eight 发表于 2007-1-2 15:49

原帖由 confer 于 2007-1-2 11:23 发表
我编写了一个MATLAB程序,全局形函数的拉格朗日变分处理复杂结构的振动响应,但是发现假设振型只取10阶,750兆内存很快就不够了 out of memory ,请问matlab 有没有类似Fortran的虚拟内存管理?是不是 ...


优化一下代码,具体参照精华贴。matlab能够允许你使用的存储空间(内存+虚存)大概是1G,所以,即使你的电脑有2g内存,虚拟内存开到2g,共4g,也是无用的

happy 发表于 2007-1-2 15:56

32位版本中Matlab的变量只能占1.2GB内存

eight 发表于 2007-1-2 15:58

原帖由 happy 于 2007-1-2 15:56 发表
32位版本中Matlab的变量只能占1.2GB内存


happy教授补充的是,呵呵~~~

happy 发表于 2007-1-2 16:01

原帖由 eight 于 2007-1-2 15:58 发表



happy教授补充的是,呵呵~~~

内存问题很麻烦,有的时候变量不是很大,虚拟内存设置的已经很大了仍然会出现out of Memory的问题

happy 发表于 2007-1-2 16:03

另外matlab的运行也特别损耗内存,运行不了多久其占用的内存就NN大,有的时候使用matlab -nojvm来启动matlab是个不错的选择

eight 发表于 2007-1-2 16:04

原帖由 happy 于 2007-1-2 16:01 发表


内存问题很麻烦,有的时候变量不是很大,虚拟内存设置的已经很大了仍然会出现out of Memory的问题


嗯,同感,有些时候即使用clear all也不行,要退出matlab然后再重新运行才行。感觉matlab在释放内存上比较麻烦

happy 发表于 2007-1-2 16:07

原帖由 eight 于 2007-1-2 16:04 发表

嗯,同感,有些时候即使用clear all也不行,要退出matlab然后再重新运行才行。感觉matlab在释放内存上比较麻烦


这种情况个人估计是Java虚拟机在搞鬼,不启动Java虚拟机一般能够解决

eight 发表于 2007-1-2 16:07

原帖由 happy 于 2007-1-2 16:03 发表
另外matlab的运行也特别损耗内存,运行不了多久其占用的内存就NN大,有的时候使用matlab -nojvm来启动matlab是个不错的选择


嗯。matlab -nojvm 这个不错,刚试了一下,启动速度很快

eight 发表于 2007-1-2 16:08

原帖由 happy 于 2007-1-2 16:07 发表



这种情况个人估计是Java虚拟机在搞鬼,不启动Java虚拟机一般能够解决


谢谢教授指点

happy 发表于 2007-1-2 16:18

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

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

目前就想起来这些,欢迎大家补充

eight 发表于 2007-1-2 16:23

原帖由 happy 于 2007-1-2 16:18 发表
out of Memory问题处理方法简单总结一下:

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


第5点我觉得应该改为:5. 优化程序,减少变量,并减少矩阵维数及精度要求,必要时(如二维以下的索引矩阵)使用稀疏矩阵

happy 发表于 2007-1-2 16:27

原帖由 eight 于 2007-1-2 16:23 发表

第5点我觉得应该改为:5. 优化程序,减少变量,并减少矩阵维数及精度要求,必要时(如二维以下的索引矩阵)使用稀疏矩阵


不管是减少矩阵维数还是对稀疏矩阵的处理都是基于减少变量的思想,个人觉得没必要单独提出来
而至于精度,matlab的计算精度都是双精度的,简单的通过调整显示精度没有什么意义

eight 发表于 2007-1-2 16:30

原帖由 happy 于 2007-1-2 16:27 发表



不管是减少矩阵维数还是对稀疏矩阵的处理都是基于减少变量的思想,个人觉得没必要单独提出来
而至于精度,matlab的计算精度都是双精度的,简单的通过调整显示精度没有什么意义


不是显示精度的问题,是如果需要用到的变量的值只是0~255之间,那么定义 zeros(m,n,'uint8') 比 zeros(m,n) 节省更多的空间,这在逻辑矩阵的申请时尤为明显。这在申请的矩阵很大时尤为重要,在我的经验中,后者经常出现out of memory。

[ 本帖最后由 eight 于 2007-1-2 16:32 编辑 ]
页: [1] 2
查看完整版本: matlab 的内存如何管理?