Conditional “pragma omp”

微笑、不失礼 提交于 2019-12-17 19:52:15

问题


I am trying different kinds of parallelization using OpenMP. As a result I have several lines of #pragma omp parallel for in my code which I (un-)comment alternating. Is there a way to make these lines conditional with something like the following, not working code?

   define OMPflag 1 
   #if OMPFlag pragma omp parallel for
   for ...

回答1:


An OpenMP parallel construct can have an if clause specified. In Fortran I'd write something like this:

!$omp parallel if(n>25) ... 

I sometimes use this when a problem might be too small to bother parallelising. I guess you could use the same approach to check a debug flag at run time. I'll leave it up to you to figure out the C++ syntax but it's probably exactly the same.




回答2:


C99 has the _Pragma keyword that allows you to place what otherwise would be #pragma inside macros. Something like

#define OMP_PARA_INTERNAL _Pragma("omp parallel for")
#if [your favorite condition]
#define OMP_FOR OMP_PARA_INTERNAL for
#else
#define OMP_FOR for
#endif

and then in your code

OMP_FOR (unsigned i; i < n; ++i) {
  ...
}


来源:https://stackoverflow.com/questions/4085595/conditional-pragma-omp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!