使用openMP在多线程for循环中创建线程

时间:2013-01-18 03:48:04

标签: c++ multithreading openmp

我是OpenMP的新手,我无法在每个线程循环迭代中创建线程。我的问题可能听起来很幼稚,请耐心等待。

#pragma omp parallel private(a,b) shared(f)
{
     #pragma omp for 
      for(...)
     {
      //some operations
      // I want to parallelize the code in italics along within in the multi threaded for loop
      *int x=func1(a,b);*
      *int val1=validate(x);*
      *int y=func2(a,b);*
      *int val2=validate(y);*
      }
}

1 个答案:

答案 0 :(得分:0)

在for循环中,所有线程都忙于循环迭代,因此没有资源可以并行执行迭代。如果工作得到很好的平衡,你将无法获得更好的表现。

如果很难/不可能平衡工作与平行。您可以尝试在循环中生成任务,然后进行后续工作。但请注意任务生成的开销。

#pragma omp parallel private(a,b) shared(f)
{
     #pragma omp for nowait
      for(...)
     {
      //some operations

      #pragma omp task
      {
      int x=func1(a,b);
      int val1=validate(x);
      }

      #pragma omp task
      {
      int y=func2(a,b);
      int val2=validate(y);
      }

     }

     // wait for all tasks to be finished (implicit at the end of the parallel region (here))
     #pragma omp taskwait      
}