OpenMP:有条件地使用#pragma

OpenMP: conditional use of #pragma

本文关键字:#pragma 有条件 OpenMP      更新时间:2023-10-16

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

但是最近我发现在小循环中使用这个库会降低性能,而使用正常的方式会更好。

事实上,我想只在满足条件时才使用openMP,我的代码是

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

但是我想做的是禁用#pragma如果size足够小,即:

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

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

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 ();
}

有什么更好的方法?

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

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

你可能想尝试不同类型的调度和不同的块大小,看看什么最适合你的库例程。