应该首选 OpenACC 编译指示还是运行时例程?
Should OpenACC pragmas or runtime routines be preferred?
OpenACC 有一些 pragmas 和 runtime routines,基本上可以用来实现同样的事情。
例如有#pragma acc wait
和acc_wait()
或#pragma acc update [...]
和acc_update_[...]()
。
我开始主要在我的 C++ 代码中使用运行时例程。
有区别吗?我应该更喜欢其中一个还是只是风格和个人喜好的问题?
通常,pragma 是首选,因为它们会被其他编译器忽略,并且在未启用 OpenACC 的情况下编译时会被忽略。运行时 API 调用需要由宏保护,例如“#ifdef _OPENACC”以保持可移植性。
不过,如果您不介意添加宏守卫或失去可移植性,那么这主要是风格问题。在功能上,它们是等价的。
OpenACC 有一些 pragmas 和 runtime routines,基本上可以用来实现同样的事情。
例如有#pragma acc wait
和acc_wait()
或#pragma acc update [...]
和acc_update_[...]()
。
我开始主要在我的 C++ 代码中使用运行时例程。
有区别吗?我应该更喜欢其中一个还是只是风格和个人喜好的问题?
通常,pragma 是首选,因为它们会被其他编译器忽略,并且在未启用 OpenACC 的情况下编译时会被忽略。运行时 API 调用需要由宏保护,例如“#ifdef _OPENACC”以保持可移植性。
不过,如果您不介意添加宏守卫或失去可移植性,那么这主要是风格问题。在功能上,它们是等价的。