私はこのCコードを持っています:
for (k = 0; k < n_n; k++) {
if (k == i || k == j) continue;
dd=q2_vect[k]-q1_vect;
d2=dd*dd;
if (d2<0) {
a=1;
break;
}
}
コンパイラの最適化の理由から (Cell プロセッサの SPE で)、これを手動でループ解除する必要があるため、次のことを試しました。
dd=q2_vect[0]-q1_vect;
d2=dd*dd;
if (d2<0)goto done;
dd=q2_vect[1]-q1_vect;
d2=dd*dd;
if (d2<0)goto done;
dd=q2_vect[2]-q1_vect;
d2=dd*dd;
if (d2<0)goto done;
.....
.....
// end
goto notdone;
done:
ok=0;
notdone:
.....
しかし、私はに対処する方法がわかりません
if (k == i || k == j) continue;
また、lopp は "n_n" の各実行に依存するため、手動で最大値 "n_n" が得られる回数だけコードを記述する必要があります。
どのように修正できると思いますか?