我有一个最初用 OpenMP 编写的代码。现在,我想将它迁移到 OpenACC 中。考虑以下:
1- 首先,OpenMP 的输出结果被认为是最终结果,OpenACC 输出应该跟随它们。
2-其次,代码中有两个功能可以通过输入终端上的程序来启用。因此,要么 要么F1
运行F2
基于输入标志。
因此,如前所述,我将代码转移到 OpenACC。现在,我可以使用两者来编译我的 OpenACC 代码,-ta=multicore
并-ta=nvidia
为不同的架构编译 OpenACC 区域。
对于F1
,两种架构的输出都与 OpenMP 相同。因此,这意味着当我使用 and 编译我的程序时-ta=multicore
,-ta=nvidia
我会在选择时得到类似于 OpenMP 的正确输出结果F1
。
对于F2
,有点不同。编译-ta=multicore
给我一个正确的输出作为 OpenMP,但同样的事情不会发生在 nvidia 架构上。当我用结果编译我的代码时-ta=nvidia
是错误的。
任何想法可能有什么问题,F2
甚至是build process
什么?
注意:我使用的是 PGI 编译器 16,而我的 NVIDIA GPU 的 CC 等于 5.2。