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》
最近在用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》
相关文章推荐
- Matlab中计算程序运行时间的三种方法
- matlab 计算程序运行时间 的几个函数
- 如何在 MATLAB 中计算程序运行时间
- 实现Java程序跨平台运行的注意事项
- 一段评价程序平均运行时间的shell脚本&shell脚本编写注意事项
- [转]Matlab中计算程序运行时间的三种常用方法
- 如何提高android程序运行效率,程序员在开发过程中应当注意的一些事项
- matlab 计算程序运行的时间
- Matlab中计算程序运行时间的代码
- win7上编译的用ADO访问Access数据库的程序运行在WindowsServer2003上的注意事项
- Matlab中计算程序运行时间的三种方法
- matlab: 计算程序运行时间
- MATLAB中计算程序运行时间的几个函数
- matlab中,计算,记录,程序运行,起始,结束 时间,间隔 &matlab中 tic,toc函数的用法
- 实现Java程序跨平台运行十二个注意事项
- Matlab中计算程序显示运行时间的几种方法
- cmd下运行java程序的注意事项
- 在Vista下运行程序的注意事项
- DOC编译和运行java程序注意事项
- Java 命令行运行java程序,出现“找不到或无法加载主类 ”的注意事项