c++ - OpenMP:有条件地使用#pragma

标签 c++ openmp pragma

我正在使用 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 ();
}

有什么更好的方法来做到这一点?

最佳答案

我认为您应该能够通过使用可选的schedule clause 来达到您想要的效果。在您的 parallel for 指令上:

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

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

关于c++ - OpenMP:有条件地使用#pragma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7413331/

相关文章:

android - native 崩溃调用堆栈中的地址和偏移量到底是什么?

c++ - 打开 MP 导致内存泄漏

pragma - 什么是 perl 实验特性,postderef?

xcode - 是否有 gcc/Xcode pragma 来抑制警告?

c++ - std::polar 线程安全吗?

c++ - 凹面 GL_POLYGON 不着色?

c++ - std::shared_ptr 在 Qt 的 getter 函数中被删除

c++ - 从 cv::Mat 转换为 arma::mat

c - c中的openmp并行递归函数

c - 面向初学者的 OpenMP