OpenMP ターゲット オフロードを使用して、いくつかのネストされたループを GPU にオフロードします。私はnowaitそれを非同期に調整するために使用しています。これがタスクになります。同じ入力値でも、オフロードしていない場合とは結果が異なります (例: cpu: sum=0.99、offloading sum=0.5)。句を削除すると、nowait問題なく動作します。したがって、問題はそれが OpenMP タスクになることであり、私はそれを正しくするのに苦労していると思います。
#pragma omp target teams distribute parallel for reduction( +: sum) collapse(2) nowait depend(in: a, b) depend(out: sum)
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
double c = 0;
for (int k = 0; k < n; k++)
{
c += /* some computation */
}
sum += fabs(c);
}
}