OpenMP循环并行化

时间:2018-11-28 17:30:54

标签: c linux parallel-processing openmp parallel-for

我正在尝试并行处理这段代码的两个循环:

for ( j = 0 ; j < nt2 ; j++ ) {
   dm = MAX_LON + 1;

   for ( i = 0 ; i < nt1 ; i++ ) {
      d = distancia(tabla1[i],tabla2[j]);     
      if ( d < dm ) {
         dm = d;
         im = i;
      }
   }
   ps[j] = im;
}

并行化外循环成功:

#pragma omp parallel for private(i,d,dm,im)

但是我的内心仍然有问题。我尝试了例如private(d,m)和reduction(max:im),但不适用于任何组合。我使用private(d)获得的最接近顺序结果。有任何想法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

并行化内部循环应该足以消耗所有可用线程。如果将两者并行化,只会产生开销。