matlab parpool 关闭,Matlab并行编程

本文讲的Matlab并行编程包括并行for循环和数据并行(同一个程序运行在不同的数据上),分别对应于parfor、spmd方法

1. 并行方法

parpool %开启并行池(parallel pool)

%parallel program

delete(gcp('nocreate')) % 关闭并行池

上面就是Matlab并行编程的形式。你的计算机有几个核,parpool就会开启几个worker

04a4f655e37ac6177719ef1cf789f87c.png

当然,你也可以设定worker的数目,如这样,开启2个worker

parpool('local',2)

f57c1640ea07a038ddedacb4aa43b325.png

至于中间的并行程序就要由parfor和spmd完成。

PS:Matlab之前的并行方法 matlabpool local 2 已经过时,现在新版的Matlab要用parpool

2. parfor

parfor(parallel for-loop)用于将for循环并行处理,当你的for循环每次迭代计算量很大,并且每次迭代都是独立的话,就可以用parpool来加速,下面是一个例子:

普通for循环

tic

n = 200;

A = 500;

a = zeros(n);

for i = 1:n

a(i) = max(abs(eig(rand(A))));

end

toc运行时间为:时间已过 25.428548 秒。

若是改用parfor

tic

n = 200;

A = 500;

a = zeros(n);

parfor i = 1:n

a(i) = max(abs(eig(rand(A))));

end

toc运行时间为:时间已过 8.801395 秒。

注意,当for循环中每次迭代不独立,即某次迭代需要其它迭代的结果,以及嵌套的for循环都是不能改为parfor的。

更多内容见Matlab文档

3. spmd

spmd(single program multiple data)使多个worker运行同一段代码(single program),但是不同的worker处理不同的数据(multiple data),所以spmd适用于处理很大的数据。常见的情形如:

Programs that take a long time to execute — spmd lets several workers compute solutions simultaneously.

Programs operating on large data sets — spmd lets the data be distributed to multiple workers. 一个例子:在3个worker上分别创建一个随机矩阵

spmd (3)

R = rand(4,4);

end

返回的R是一个Composite对象,大小为1*3,R(1)即worker 1上创建的矩阵,R(2)即worker 2上创建的矩阵,依次类推。

其实每个worker都有一个下标labindex,范围从1到n(n为worker数目),通过labindex可以指定特定的worker。(这里插一句,下标为什么是labindex,而不是workerindex呢,因为Matlab运行并行程序时,每个worker叫做lab),又一个例子:

spmd (3)

if labindex==1

R = rand(9,9);

else

R = rand(4,4);

end

end

此外,我们可以

通过labindex指定不同的worker处理不同的数据:

spmd (3)

labdata = load(['datafile_' num2str(labindex) '.mat'])

result = MyFunction(labdata)

end终于到了重点,这种形式应该是我们经常要用到的,每个worker load不同的data,运行同一段代码。稍微注意的一点是,这里的labdata是一个struct,不是mat矩阵,所以要用字段名称引用。当时在这纠结了好久。。。同样的,返回的result是一个

Composite对象,result(i)为第i个worker的返回值。

更多详细信息请看Matlab文档:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值