在OpenACC中使用原子函数

Use atomic functions in OpenACC

本文关键字:子函数 OpenACC      更新时间:2023-10-16

我想在OpenACC指令中使用原子函数。pgc++的哪些编译选项可以提供帮助?我应该使用特定的头文件吗?

有一件事需要检查:你是否使用了正确的数据?根据这个论坛,并不是所有的加速器都接受所有的数据类型,也可能不是所有的数据类型都可以自动访问。这个链接的表13表明,Nvidia上的原子似乎只适用于32位整数和浮点数据类型。64位可用于计算容量6.x+。

你说你的代码看起来像:

#pragma acc atomic
{
  res[i][i]=res[i][i]+x;
  res[j][j]=res[j][j]+y;
}

然而,我不认为你可以像那样将多个原子嵌套在一起。试,而不是:

#pragma acc atomic update
res[i][i]=res[i][i]+x;
#pragma acc atomic update
res[j][j]=res[j][j]+y;