应该首选 OpenACC 编译指示还是运行时例程?

Should OpenACC pragmas or runtime routines be preferred?

OpenACC 有一些 pragmas 和 runtime routines,基本上可以用来实现同样的事情。

例如有#pragma acc waitacc_wait()#pragma acc update [...]acc_update_[...]()

我开始主要在我的 C++ 代码中使用运行时例程。

有区别吗?我应该更喜欢其中一个还是只是风格和个人喜好的问题?

通常,pragma 是首选,因为它们会被其他编译器忽略,并且在未启用 OpenACC 的情况下编译时会被忽略。运行时 API 调用需要由宏保护,例如“#ifdef _OPENACC”以保持可移植性。

不过,如果您不介意添加宏守卫或失去可移植性,那么这主要是风格问题。在功能上,它们是等价的。