Вы не показываете достаточно контекста здесь, но держу пари, что проблема здесь похожа на эту:
parfor ii = 1:10
for jj = 1:10
tmp(jj) = rand
end
out(ii) = sum(tmp);
end
В этом случае механизм parfor
не может категорически доказать, что путь tmp
используется независимо от порядка итераций цикла parfor
.Это связано с тем, что выглядит так, как будто значения, присвоенные tmp
в одной итерации цикла parfor
, все еще используются в следующей итерации.
К счастью, существует очень простой обходной путьдля этого случая - убедите parfor
, что вы ничего не делаете в зависимости от порядка вычисления итераций цикла, сбрасывая переменную.В приведенном выше простом случае это означает:
parfor ii = 1:10
% reset 'tmp' at the start of each parfor loop iteration
tmp = [];
for jj = 1:10
tmp(jj) = rand
end
out(ii) = sum(tmp);
end