【问题标题】:Use atomic functions in OpenACC在 OpenACC 中使用原子函数
【发布时间】:2017-09-07 04:44:40
【问题描述】:

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

【问题讨论】:

  • OpenACC 中的所有原子操作都由#pragma acc atomic 指令提供。您的编译器需要支持标准的 V2.0 或更高版本
  • 我尝试了这些指令,但出现编译错误。对于#pragma acc atomic {res[i][i]=res[i][i]+x},我没有编译错误,但是对于#pragma acc atomic {res[i][i]=res[i] [i]+x res[j][j]=res[j][j]+y},我得到 PGCC-S-0155-Invalid atomic expression

标签: c++ openacc


【解决方案1】:

要检查的一件事:您使用的数据是否正确?根据this forum,并非所有加速器都接受所有数据类型,并且可能并非所有数据类型都可以原子访问。 this link 的表 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2016-03-15
    • 2018-09-23
    • 1970-01-01
    • 2015-11-13
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多