1

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); 
        }
    }
4

1 に答える 1