現在、プロジェクトに取り組んでおり、実行速度を向上させたいと考えています。私は並列コーディングにまったく慣れていません。私のプログラムには最初は6つのループがあり、それを3つのループに最適化することができ、実行時間は300%短縮されました。私が研究したことから、問題は索引付けにあると思います。前のループですでにparforを使用しましたが、インデックスはi = 1:vs_max-1でした。
次のコードでは:
for i = 1:vs_max-1
for j = i+1:vs_max-1
d = max(abs(X(i,:)-X(j,:)));
DD = exp(-(d/r)^n);
D(i,j) = DD;
D(j,i) = DD;
while (i~=vs_max)
d2 = max(abs(X2(i,:)-X2(j,:)));
DD2 = exp(-(d2/r)^n);
D2(i,j) = DD2;
D2(j,i) = DD2;
break;
end
end
end
問題は、jがi値も必要とし、複数のスレッドがある場合、これらの値に複数アクセスできる2番目のループインデックスにあると思います。
上記のコードをより高速にするために、parforがプロンプトを表示したり、別のタイプのコード最適化を提供したりしないように、このループのインデックスを再作成するのを手伝ってくれる人はいますか?
私の投稿を読んでお答えいただき、誠にありがとうございます。