C++ 使用pgc+禁用OpenACC隐式pragma生成+;编译程序

C++ 使用pgc+禁用OpenACC隐式pragma生成+;编译程序,c++,compiler-errors,gpu,openacc,pgi,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[:

我在使用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()
等pragmas,而是抛出一个错误。有这样的选择吗

pgc++手册页
中进行搜索时,在名称或描述中包含单词
implicit
的选项只有:

--implicit_include (default) --no_implicit_include
--implicit_typename (default) --no_implicit_typename
--using_std (default) --no_using_std

但不幸的是,这些并没有禁用隐式pragma生成。

这是OpenACC标准定义的默认行为,当用户在计算构造(并行/内核)上不使用数据子句时。执行运行时检查,如果数据已存在于设备上,则不执行任何操作。如果数据不在设备上,则复制数据


您可以将这些变量单独添加到数据子句中,或将“default(present)”子句添加到计算构造中,以便假定设备上存在所有共享数据。如果数据不存在,则会发生运行时错误。

当用户不在计算构造(并行/内核)上使用数据子句时,这是OpenACC标准定义的默认行为。执行运行时检查,如果数据已存在于设备上,则不执行任何操作。如果数据不在设备上,则复制数据


您可以将这些变量单独添加到数据子句中,或将“default(present)”子句添加到计算构造中,以便假定设备上存在所有共享数据。如果数据不存在,则会发生运行时错误。

正如@Mat Colgrove所指出的,编译器的预期行为是隐式地为没有出现在其中的变量添加数据子句。您可以将
default(none)
添加到pragmas中,如果某个变量在区域内使用,并且没有出现在数据子句中,这将指示编译器给出编译时错误。不过,我不知道有哪种编译器选项可以在整个程序范围内执行此操作。

正如@Mat Colgrove所指出的,编译器的预期行为是隐式地为没有出现在其中的变量添加数据子句。您可以将
default(none)
添加到pragmas中,如果某个变量在区域内使用,并且没有出现在数据子句中,这将指示编译器给出编译时错误。不过,我不知道有哪种编译器选项可以在整个程序范围内执行此操作