目前我正在做一个项目,我想提高执行速度。我对并行编码完全陌生。我的程序最初有六个循环,我设法将其优化为三个循环,执行时间减少了 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 值,当我们有多个线程时,我们可以多次访问这些值。
谁能帮我重新索引这个循环,以便 parfor 不提示或提供另一种类型的代码优化,以使上述代码变得更快?
提前感谢您的好意阅读和回答我的帖子。