刚开始接触matlab并行计算,以前旧电脑从不考虑这些的
小本i7四核八线程16G内存,64位win7和matlab 2012b,任务管理器显示有8个框
当用普通for循环,只有一个框接近100%,cpu使用率只有12%左右
默认配置下,键入matlabpool,右下角提示4个
然后使用parfor,进程中也能看到5个叫做matlab的,一个接近400M,其他4个接近200M
但为什么只有4个框接近100%,cpu使用率只有50%左右?如何充分使用资源
使用matlabpool 是建议1个核(core)对应一块pool(worker)所以建议出现默认4个,可以试下,
setenv('OMP_NUM_THREADS', '8');
或
setenv 'OMP_NUM_THREADS' 8
getenv 'OMP_NUM_THREADS'
图形界面的设置如下Home-parallel-mange cluster profile,修改NumWorkers为8,再次打开matlabpool,右下角显示8,运行cpu100%满负荷
顺便说下,小本风扇顿时惨厉的狂豪;内存共9个叫做Matlab的,一个主的接近3G,其他8个接近200M,我的16G内存快接近一半了
MATLAB多线程
http://blog.sina.com.cn/s/blog_48a0eb290100q9gc.html
MATLAB先天的多线程残疾,给编写实时程序带来了致命的打击。一般情况只能按堆栈的形式,排队执行Matlab命令,可是无巧不成书,有时我们偏偏需要进行多线程和实时编程。
比如:
1.我想实时更新一个电子表的时间,也就是每1s读取一次系统时间或者自动加1s
2.我需要这个程序在10s后终止
明显这些需要,使用一般的Matlab编程是没法或者说很难实现的。
还好Matlab自知在这方面亏欠大家太多,提供了唯一一个多线程的实现方法——Timer对象
一、Timer对象的创建T = timer
T = timer('PropertyName1', PropertyValue1, 'PropertyName2', PropertyValue2,...)
括号中的参数可以在创建Timer是给出,也可以通过以后的set/get命令设置和读取
二、Timer属性参数
1.属性设置
(1)创建的时候直接赋值
%创建一个Timer对象变量TaskTimer,并给出部分参数
TaskTimer=timer(...
'Name','Matl