0
2つの3次元配列の最大絶対差をC++ AMPと比較したいと思います。AMP C++で配列の最大値を計算する
OpenMPを使用すると簡単です。 2つのアレイ
float*** u, ***uOld;
コードは考慮:
double residual = 0;
#pragma omp parallel for schedule(static) collapse(3) reduction(max : residual)
for (int i = 0; i < nbX; i++)
for (int j = 0; j < nbY; j++)
for (int k = 0; k < nbTheta; k++)
residual = std::max(residual, fabs(u[i][j][k] - uOld[i][j][k]));
AMPアルゴリズムからmax_elementを使いやすいであろうが、それは実装されていません。私はこのような何かを考えるが、減少は、外側のループレベルで必要とされている:
extent<1> extTheta(nbTheta);
parallel_for_each(extTheta, [=, &u_, &uOld_](index<1> iTheta) restrict(amp)
{
type residual = 0;
for (int iX = 0; iX < nbX; iX++)
for (int iY = 0; iY < nbY; iY++)
residual = fast_math::fmax(residual, fast_math::fabs(u_[iX][iY][iTheta] - uOld_[iX][iY][iTheta]));
})
データはGPU上で、私は、効率上の理由から、GPU上のトランジットにそれを望んでいません。どのように効率的にそれを行うには?