使用OpenMP并行化独立指令列表

时间:2014-07-05 22:00:40

标签: parallel-processing openmp

我有一个(长)独立指令列表,可以并行执行。这些不是循环,它们就像这样:

istr1;
istr2;
...
istrN;

如何使用OpenMP并行化它们?我知道我可以手动将它们分成一些Pthreads,但我想知道是否有更直接的东西,并且可以自动调整线程数到CPU数量,就像OpenMP一样。

1 个答案:

答案 0 :(得分:1)

这就是OpenMP部分的用途。

#pragma omp parallel sections
{
   #pragma omp section
   istr1;
   #pragma omp section
   istr2;
   ...
   #pragma omp section
   istrN;
}

另一种选择是使用显式任务:

#pragma omp parallel
{
   #pragma omp single
   {
      #pragma omp task
      istr1;
      #pragma omp task
      istr2;
      ...
      #pragma omp task
      istrN;
   }
}

任务在single构造内创建,以防止在所有线程中创建它们(从而阻止每个任务被创建 num_threads 次)。使用显式任务可能会带来更好的性能,因为大多数OpenMP运行时在调度节时都会使用相当愚蠢的逻辑。