parallel loop in matlab

2 次查看(过去 30 天)
Abhishek Saini
Abhishek Saini 2020-7-26
Hi ,
I am new to use parfor in MATLAB. I am trying to convert my for loop in to parfor, but getting problem in varaible definition. Here is the a section of the code where I want to implement parfor. Kindly advice how to run this correctly.
%% matrices initialisation
KB=zeros(sdof,sdof);
KS=zeros(sdof,sdof);
KK=zeros(sdof,sdof);
FF=zeros(sdof,1);
KG=zeros(sdof,sdof);
[DB,DS]=material_mat(E,nu,G,shcof);
parfor i=1:nelem
elecon=elemconn(i,:);
nodes =cor(elecon,1:2);
index1=nodedof(elecon,:).';
index=reshape(index1,1,size(index1,1)*size(index1,2));
[KB_final]=elementstiffness_bending(nodes,DB);
[KS_final,F_final]=elementstiffness_shear(nodes,DS,P);
[KG_final]=geometricstiff(sigma_i,nodes);
KK1=KB_final+KS_final;
[KK,FF,KG] = paral(KK1,F_final,KG_final,index,KK,FF,KG,i);
KB(index,index) = KB(index,index) + KB_final;
end
I am getting problem in defining Kb variable. How to rectify this?

回答(1 个)

Edric Ellis
Edric Ellis 2020-7-28
Output variables in parfor loops must be either sliced outputs or reduction outputs. More info here in the doc. In this case, you need KB to be a "reduction" variable since each iteration of your loop computes an increment to that matrix. To fit in with the parfor rules, you cannot index a "reduction" variable, so you need to modify things a little to have each iteration compute a full-sized increment. Something a bit like this
parfor i = 1:nelem
% compute KB_final and index
KB_increment = zeros(sdof);
KB_increment(index,index) = KB_final;
% Use a reduction assignment into KB:
KB = KB + KB_increment;
end

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by