OpenMP:有条件地使用#pragma

Art*_*hur 12 c++ pragma openmp

我正在使用OpenMP来提高循环上的程序效率.

但最近我发现在小循环上使用这个库降低了性能,并且使用正常方式更好.

事实上,我只想在满足条件的情况下使用openMP,我的代码是

#pragma omp parallel for
 for (unsigned i = 0; i < size; ++i)
   do_some_stuff ();
Run Code Online (Sandbox Code Playgroud)

但我想要做的是在大小足够小的情况下禁用#pragma ,即:

if (size > OMP_MIN_VALUE)
  #pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
Run Code Online (Sandbox Code Playgroud)

但是不起作用,更好的方法是编写循环两次,但我不想那样做...

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 ();
}
Run Code Online (Sandbox Code Playgroud)

有什么更好的方法呢?

Fle*_*exo 7

我认为你应该能够通过在你的指令上使用optional schedule子句来实现你正在寻找的效果parallel for:

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

您可能希望使用不同类型的调度和不同的块大小来查看最适合您的库例程的内容.

  • 我使用#pragma omp parallel for if(size> = OMP_MIN_VALUE) (12认同)