开发者

OpenMP: conditional use of #pragma

I'm using OpenMP to improve my program efficiency on loops.

But r开发者_开发百科ecently I discovered that on small loops the use of this library decreased performances and that using the normal way was better.

In fact, I'd like to use openMP only if a condition is satisfied, my code is

#pragma omp parallel for
 for (unsigned i = 0; i < size; ++i)
   do_some_stuff ();

But what I want to do is to disable the #pragma if size is small enough i.e.:

if (size > OMP_MIN_VALUE)
  #pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();

But does not work, the better way is to write the loop twice but I don't want to do that way...

if (size > OMP_MIN_VALUE)
{
  #pragma omp parallel for
  for (unsigned i = 0; i < size; ++i)
    do_some_stuff ();
}
else
{
  for (unsigned i = 0; i < size; ++i)
    do_some_stuff ();
}

What is the better way to do that?


I think you should be able to achieve the effect you're looking for by using the optional schedule clause on your parallel for directive:

#pragma omp parallel for schedule(static, OMP_MIN_VALUE)
 for (unsigned i = 0; i < size; ++i)
   do_some_stuff ();

You might want to play around with different kinds of scheduling though and different chunk sizes to see what suits your library routines best.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜