您的位置:首页 > 编程语言 > MATLAB

Matlab中计算量较大的程序运行管理注意事项

2015-05-05 18:42 441 查看
Matlab下大规模运行过程中内存管理管理问题

最近在用Matlab做大规模网络的模拟研究。在程序设计过程中要注意诸多细节,先记录如下:

1 内存管理(这是最重要的一点)

较大的计算量和矩阵存储必然会耗费非常多的内存资源,因此在每次循环结束后,当即使将所得数据输出存储到硬盘,后对内存进行清理。在Matlab中主要有大概提供三个有用的命令来管理内存,MEMORY,CLEAR,和PACK。

其中MEMORY就是把一些内存中应当释放但是没释放的变量都释放掉。

CLEAR就是把指定的变量,函数所占用的内存都释放掉。这个命令更为灵活,允许根据具体的情况合理的选择释放的范围。

PACK则是把MATLAB中所有的东西都先存到硬盘上,然后在重新读回到MATLAB的内存中间,这样的好处时,如果之前有大量的内存操作,那么内存中就在很多碎片,可以用PACK把这些碎片都消除掉。如果在大量的计算之后要产生一个很大的变量(矩阵),那么可以先用PACK处理一下。

但是这几个命令都不能减少MATLAB占用的系统内存。比如说一开始MATLAB用了100MB的内存,分配了一个大变量之后,占用了200MB内存,那么即使把这个变量CLEAR掉,MATLAB也还是占用200MB内存,它所多占用的内存并不会释放给系统。我找了半天,也没找到一个命令可以解决这个问题。只能关了MATLAB重开才行。

feature('memstats')是一个非常重要的查询内存使用状态的命令

因为计算量较大,程序运行时间较长,即使使用了各种释放内存的方法,可用内存仍然越来越少。后来查阅资料才知道,在32-bit的Windows操作系统下,MATLAB的运行会占用一定的内存块,即使将这些内存释放,Windows的内存管理也不会将之返回给操作系统。这就导致越来越多的内存block化。可用的连续内存会越来越少。对于这样的问题,解决办法只有一个:关掉MATLAB,重启!

2 设置断点

设置断点有利于定期的跟踪程序的运行状态,确保运行正常

3 计时

在估计一个程序整体耗费的时间时,可以对单一次的运行进行计时,这时就可用tic、toc命令了。使用方法:

tic;

... ;%func

toc;

waitbar也是一个比较有用的函数,可以显示某一计算过程的进程。使用方法:

h = waitbar(0,'Analysis in progress ...');

waitbar(i/length(rxnNameList),h);

关于语法的注意事项:

1 自加、自减

本人了解C++、Perl、Python、Java,Matlab的自己只能是:i = i + 1;这个很奇怪...

参考:

(3)<精通MATLAB7》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: