目前網上給出的大部分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'))