使用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