OpenMP:有条件地使用#pragma

14

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

但最近我发现,在小型循环中使用这个库会降低性能,而使用普通方法则更好。

实际上,我只想在满足条件时使用OpenMP,我的代码是

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

但是我想要做的是,如果size太小,就禁用#pragma。

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

有更好的方法吗?

1个回答

8

我认为你可以通过在parallel for指令中使用可选的schedule子句来达到你想要的效果:

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

您可能想尝试不同类型的调度和不同的块大小,以找到最适合您的库例程的方法。


14
如果 size 大于 OMP_MIN_VALUE,我会使用 #pragma omp parallel for。 - Arthur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接