Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenMP: conditional use of #pragma

Tags:

c++

pragma

openmp

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

But recently 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?

like image 531
Arthur Avatar asked Sep 14 '11 08:09

Arthur


1 Answers

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.

like image 158
Flexo Avatar answered Oct 20 '22 17:10

Flexo