Schwarzアルゴリズムを並列化する必要がありますが、前提条件を処理する方法と入れ子になったループがあることはわかりません。 OpenMPまたはMPIを使用する必要があります。OPENMP - 前提条件付きシュワルツアルゴリズムを並列化する
void ssor_forward_sweep(int n, int i1, int i2, int j1, int j2, int k1, int k2, double* restrict Ax, double w)
{
#define AX(i,j,k) (Ax[((k)*n+(j))*n+(i)])
int i, j, k;
double xx, xn, xe, xu;
for (k = k1; k < k2; ++k) {
for (j = j1; j < j2; ++j) {
for (i = i1; i < i2; ++i) {
xx = AX(i,j,k);
xn = (i > 0) ? AX(i-1,j,k) : 0;
xe = (j > 0) ? AX(i,j-1,k) : 0;
xu = (k > 0) ? AX(i,j,k-1) : 0;
AX(i,j,k) = (xx+xn+xe+xu)/6*w;
}
}
}
#undef AX
}
各ループが前回のループからの値を使用することを考慮して、この機能を並列化して最適な時間を得る方法。
私はすでに(ステンシルヤコビ3Dのような)ブロックで2または分割によりループ2の並列化を試みたが、成功せず...
はどうもありがとうございました!