我在使用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/