我正在使用 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);
}
}