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'))


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章