首页 > 解决方案 > 我想使用 openmp 并行运行两个单独的循环

问题描述

两个不同的循环应该在 C 中使用 openmp 并行运行。我是 openmp 的新手,并且找到了单个循环的步骤并行运行而不是多个循环的解决方案。请有人建议如何去做。

#include<stdio.h>

int main() 
{
      // this loop must run on processor 1
      for(int i=0;i<k;i++)
      {   // work to be done in loop1
      }

      //this loop must run on processor 2
      for(int i=0;i<k;i++)
      {   //work to be done in loop2
      }
}

标签: cparallel-processingopenmp

解决方案


你可以这样做,但请阅读下面的警告

int id;

#pragma omp parallel private(id) num_threads(2)
{
    id = omp_get_thread_num();
    if(id == 0) {
        // Loop1
    }

    else if(id == 1) {
        // Loop2
    }
}

很不言自明。创建两个线程,获取正在执行的线程的 id 并根据 id 选择要执行的操作。

然而,这是一种非常尴尬的做法。这不是您通常使用 OpenMP 并行处理内容的方式。这更多还是 Pthreads 风格。

警告

请记住,这num_threads(2)并不能保证您有两个线程。所以如果你想使用这种方法,你需要某种保护。

if(omp_get_num_threads() < 2) {
    // Serial code
} else {
    // Parallel code
}

突然之间,一切都变得非常笨拙。


推荐阅读