MATLAB: Variable H1 can not be classified in parfor-loop

parallel computingparfor

H1(subsizeX,subsizeY,(subnumX-1)*(subnumY-1))=zeros(subsizeX,subsizeY);
parfor ii=1:(subnumX-1)*(subnumY-1)
iiy=ceil(ii/subnumX);
iix=ii-(iiy-1)*subnumX;
i1=iix+(iiy-1)*(subnumX-1);
i2=iix+(iiy-1)*subnumX;
H1(subsizeX,subsizeY,i1)=HGroup(:,:,i2);
end

Best Answer

Take a read here for "sliced variables" https://www.mathworks.com/help/distcomp/sliced-variable.html
parfor ii=1:(subnumX-1)*(subnumY-1)
iiy = ceil(ii/subnumX);
iix = ii-(iiy-1)*subnumX;
i1 = iix+(iiy-1)*(subnumX-1);
i2 = iix+(iiy-1)*subnumX;
H1(subsizeX,subsizeY,i1)=HGroup(:,:,i2); << CAN'T DO THIS.
% H1 must be accessed with respect to parfor counter variable, "ii".
% Example:
% H1{ii} = zeros(ii+1, ii); will work. H{ii} doesn't depend on H{ii+1} , etc.
% Can't change the sliced variable index via a computation either, because then
% each parallel iteration may not always be independent.
% Bad Example:
% H1(ii) = H1(ii+1); %Can't be used. H(ii) depends on H1(ii+1). Not independent for parfor.
%
end