使用parpool來啓動多個worker,然後用parfor來替代原來的for,需要注意的幾個事項是:
(記錄自https://blog.csdn.net/duanlangzhuifeng/article/details/17679343)
1.parfor不可以嵌套循環,不可以修改循環變量
parfor i = 1:N
i = i + 1;%這裏修改了循環變量
a(i) = i;
end
2.循環中不能相互訪問:
%%這種操作是錯誤的,在並行過程中,同一個位置可能會被同時訪問
parfor i=1:N
a(i)=a(i+1)+1;
end
3. 矩陣或者數組的訪問應該直接使用下標,而不應該是表達式
A = zeros(4, 11);
parfor i = 1:4
for j = 1:10
A(i, j + 1) = i + j;
end
end
可以改成:
A = zeros(4, 11);
parfor i = 1:4
for j = 2:11
A(i, j) = i + j + 1;
end
end
---------------------
作者:Andrew_Zhu
來源:CSDN
原文:https://blog.csdn.net/duanlangzhuifeng/article/details/17679343
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!
我自己在轉圖片格式的時候也寫了一個簡單的parfor應用實例
clc;
close all;
clearvars;
path1=Yourfilepath;
parpool(4);
list=dir([]);
% parpool(4);
parfor i=1:size(list,1)
str=list(i).name;
disp(str);
im=importdata(str);
if(~isempty(im))
im=mat2gray(im);
imname=[path1,'2018',num2str(i),'.jpg'];
disp(imname);
imwrite(im,imname);
% imshow(im);
% pause();
end
end