以下のコードを並列化しましたが、シミュレーション時間は実際にはシリアル コードよりも 400 ~ 500 倍長くなります。これを引き起こす可能性があると私が考えることができる唯一の理由は、「変数 x はインデックス付けされていますが、parfor ループでスライスされていません」および「変数 p はインデックス付けされていますが、parfor ループでスライスされていません」というメッセージです。これがシミュレーション時間の大幅な増加の理由なのか、コードを並列化した方法なのか、誰でも確認できますか?
p=(1,i) と x(1,i) は、値があらかじめ設定された行列です。
nt=1;
nc=32;
time(1,1) = 0.0;
for t=dt:dt:0.1
nt=nt+1;
time(1,nt) = t;
disp(t);
for ii=2:nc
mytemp=zeros(1,ii);
dummy=0.0;
parfor jj=1:nc+1
if ii==jj % skipped
continue;
end
dxx = x(1,jj) - x(1,ii);
rr=abs(dxx);
if rr < re
dummy(jj) = (p(nt-1,jj)-p(nt-1,ii))*kernel(rr,re,ktype)*rr;
mytemp(jj) = kernel(rr,re,ktype)*rr;
%sumw(1,ii) = sumw(1,ii) + kernel(rr,re,1);
end
end
mysum = sum(dummy);
zeta(1,ii)=sum(mytemp);
lapp(1,ii) = 2.0*dim*mysum/zeta(1,ii);
p(nt,ii) = p(nt-1,ii) + dt*lapp(1,ii);
end
% update boundary value
p(nt,1) = function_phi(0,t);
p(nt,nc+1) = function_phi(1,t);
end