Mathwoks在Matlab R2007a版本的Parallel Computing
Toolbox(并行计算工具箱)中加入了并行循环parfor-loops,对于每一步可以独立于其他步的循环,计算效率可以有较大幅度的提高。以前简单的for循环for-loop是顺序的(sequentially)执行每一步循环体(statement),parfor-loop是通过将各个循环体分配到不同的节点上进行并行计算。所以parfor的要求是循环体之间相互独立,结果各不影响,Matlab的编辑器会自动帮你检查循环体的结果是否影响。当你初始化一个matlab进程时,这个进程被称为Matlab
Client,它起着和用户交互和调度的作用。在并行计算工具箱中,通过matlabpool可以打开多个matlab进程,这些进程被称为Matlab
Worker。并行循环parfor-loop的各个循环就是随机的分配到这些Matlab
Worker上进行同时的计算。最后再返回给Matlab Client. 在一个多核桌面上可以本地同时运行四个 worker
(至R2009a,4.1版可达8个),如果与 MATLAB Distributed Computing Server
集成,就可以使用集群中任意数量的机器作为worker了。
一个使用parfor-loop的例子:
1
2
3
4
5
6
7
8
9
%example of parfor-loop
%本地worker数通常等于cpu的核数
matlabpool open local 2;
parfor i=1:1024
A(i) = sin(i*2*pi/1024);
end
plot(A);
matlabpool close;