Mtalab R2015b 多核并行运算以加快速度

目前网上给出的大部分matalb并行计算代码为

matlabpool local x %开始并行设置 生成并行pool
matlabpool close  %关闭 并行pool

但对于matlab2015版本,已经没有了matlabpool命令,修改为

parpool local %开启
delete(gcp('nocreate'))%关闭

并利用parfor命令实现并行for循环的计算,实例程序如下:

%传统方式
tic
c1=1;
for i = 1:500
   c1 = c1+max(eig(rand(i,i)));
end
t1 = toc;
%parfor并行方式计算
parpool local
c2=1;
tic
parfor ii = 1:500
  c2 = c2+max(eig(rand(ii,ii)));
end
delete(gcp('nocreate'))
t2 = toc;
display(strcat('客户端串行计算时间:',num2str(t1),'秒'));
display(strcat('parfor并行计算时间:',num2str(t2),'秒'));
但在实际应用时,使用parfor是,提示问题:The variable X1 in a parfor cannot be classified.
我的代码如下:

parpool local
parfor m=1:Mont
    X1 = [100.*rand(1,N);20.*rand(1,N)]
    X2 = X1;
    X1(1,:) = X1(1,:)-1+.3*randn(1,N);
    X2(1,:) = X2(1,:)+3+.3*randn(1,N);
    ...
    disp(m)
end
delete(gcp('nocreate'))
查了相关帮助文档 doc parfor和相关答疑帖子: http://blog.sina.com.cn/s/blog_866e7fa70101cv08.html

没看太明白,不断尝试后,在end后面加入部分语句后,得到了解决。

parpool local
parfor m=1:Mont
    %产生数据
    X1 = [100.*rand(1,N);20.*rand(1,N)]
    X2 = X1;
    X1(1,:) = X1(1,:)-1+.3*randn(1,N);
    X2(1,:) = X2(1,:)+3+.3*randn(1,N);
    ....
    disp(m)
end
X1=0;
X2=0;
delete(gcp('nocreate'))


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值