0

私は 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);*
      }
}
4

1 に答える 1

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      
}
于 2013-01-20T17:08:02.927 に答える