matlab 开启并行,Matlab并行(持续更新)

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 is65.817821seconds.

>> testParallel

Starting matlabpool using the 'local' configuration ... connected to 2 labs.

Elapsed time is0.629259seconds.

Sending a stop signal to all the labs ... stopped.

这个差距真够大的,我这电脑也才双核,为什么时间会差别这么大呢?估计不同的程序架构有关系,以后多用matlab并行编程来处理没有相关联的for 循环

你可能感兴趣的:(matlab,开启并行)