c++ - 使用pgc++编译器禁用OpenACC隐式编译指示生成

标签 c++ compiler-errors gpu openacc pgi

我在使用OpenACC指令的某些C++代码上使用pgc++编译器,并且我想知道是否存在一个编译器选项来禁用在编译代码时执行的隐式编译指示的生成,如果用户忽略了所需的编译指示。例如,当使用-Minfo=accel标志编译自己的代码时,我看到以下消息出现:

Generating implicit copy(beam_endpoint_grid_idx,beam_endpoint_world_frame[:]) [if not already present]
Generating implicit copyin(R[:][:]) [if not already present]
Generating implicit copyin(this[:],particle_position_world_frame[:]) [if not already present]
我想做的是防止pgc++编译器生成这些隐式copy()copyin()等编译指示,而引发错误。有这样的选择吗?
pgc++ man page中进行搜索时,在名称或描述中包含implicit单词的唯一选项是,
--implicit_include (default) --no_implicit_include
--implicit_typename (default) --no_implicit_typename
--using_std (default) --no_using_std
但是不幸的是,这些并没有禁用隐式编译指示的生成。

最佳答案

当用户不使用计算构造(并行/内核)上的数据子句时,这是OpenACC标准定义的默认行为。执行运行时检查,如果设备上已经存在数据,则不执行任何操作。如果数据不在设备上,则将复制数据。
您可以将这些变量分别添加到data子句中,或将“default(present)”子句添加到您的计算构造中,以便所有共享数据都将假定存在于设备上。如果不存在数据,则将发生运行时错误。

关于c++ - 使用pgc++编译器禁用OpenACC隐式编译指示生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65555483/

相关文章:

c - void 表达式的使用无效;从 void 指针指向的数组复制信息;放入字符指针指向的数组中

c++ - 为什么VC++编译器使用boost\range\iterator.hpp

c++ - 在 Windows XP 中获取 GPU 连接类型?

C++如何检测显卡型号

c++ - 二叉搜索树 C++ 搜索操作总是给出 0;

c++ - 没有 "entering key"有没有办法等待并暂停程序?

c++ - "Pancake glutton"练习;如果用户输入两个或更多相等的值怎么办

c++ - 通过 CreateRemoteThread 注入(inject) DLL?

vector - Borland C++ Builder 6 - E2316 'vector' 不是 'std' 的成员

c# - 如何使用 GPU 进行数学运算