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了。(以上这部分是转载)
当启用parallel时,任务管理器显示对应的几个matlab 进程。(几个cpu就有几个matlab进程)
注意parafor一般只能在外循环(一般为for的第一层)
function test_No_Parallel
tic
maxNumber=10^5;
for i=1:maxNumber
f(i)=i^2+i^3;
end
toc
function testParallel
% Parallel computing
% automatically get the number of cpu
import java.lang.*;
r=Runtime.getRuntime;
ncpu = r.availableProcessors; % the number of core
%Initialize Matlab Parallel Computing Environment by Xaero | Macro2.cn
CoreNum=ncpu;
if matlabpool('size')<=0 %
matlabpool('open','local',CoreNum);
else
disp('Have already initialized'); % succeed
end
% matlabpool local 2 % two core according to the number of your computer
tic
maxNumber=10^5;
parfor i=1:maxNumber
f(i)=i^2+i^3;
end
toc
matlabpool close % close the matlab parallel environment
test_No_Parallel
Elapsed time is 65.817821 seconds.
>> testParallel
Starting matlabpool using the 'local' configuration ... connected to 2 labs.
Elapsed time is 0.629259 seconds.
Sending a stop signal to all the labs ... stopped.
这个差距真够大的,我这电脑也才双核,为什么时间会差别这么大呢?估计不同的程序架构有关系,以后多用matlab并行编程来处理没有相关联的for 循环