Теперь я пытаюсь выполнить параллельные вычисления в Matlab и хочу использовать парфорную петлю для повышения эффективности. Проблема в том, что я могу гарантировать, что каждый цикл независим друг с другом, но мне, наконец, нужно обновить глобальную переменную (возможно, названную широковещательной переменной в Matlab), когда я хочу присвоить ей какое-то значение, проблема заключается в том, что она не может классифицироваться. Если я все еще хочу сделать это в этом Matlab, как я могу решить эту проблему или есть ли другой способ, я могу попытаться повысить эффективность?Вещательная переменная с использованием parfor
Код выглядит так:
Atoms(1:nOfAtomsInTwoDim,:)=TwoDimAtoms;
odd_type=TwoDimAtoms;
even_type=TwoDimAtoms;
even_type(:,1)=TwoDimAtoms(:,1)+LatticeSpacing/2;
even_type(:,2)=TwoDimAtoms(:,2)+LatticeSpacing/2;
parfor i=2:1:nOflayers+1
temp_type=TwoDimAtoms;
if mod(i,2)
temp_type=odd_type;
temp_type(:,3)=TwoDimAtoms(:,3)+(i-1)*LatticeSpacing/2;
else
temp_type=even_type;
temp_type(:,3)=TwoDimAtoms(:,3)+(i-1)*LatticeSpacing/2;
end
iBegin=(i-1)*nOfAtomsInTwoDim+1;
iEnd=i*nOfAtomsInTwoDim;
Atoms(iBegin,iEnd,:)=temp_type;
end
На последней строке есть опечатка, это проблема? 'Atoms (iBegin, iEnd, :)' должно быть 'Atoms (iBegin: iEnd, :)' (первый ',' должен быть ':') – PetrH
Какая из них ваша глобальная переменная? Трудно понять, какова ваша проблема без кода, который мы можем запустить. – David
PetrH вы правы, я не очень хорошо знаком с Matlab на самом деле ... Но я думаю, что это все еще не работает после того, как я его изменил :( –