您的位置:首页 > 编程语言 > MATLAB

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

2017-11-29 11:03 190 查看
目前网上给出的大部分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'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 多核