在三个空间维度中嵌套for循环 - OMP

时间:2014-08-07 09:35:28

标签: c++ loops for-loop nested spatial

我用C / C ++开发,gcc 4.8.4,没有C ++ 11 atm。我正在使用OMP pragmata。我们经常在3D数组上进行迭代:

#pragma omp parallel for
for(size_t i = startI ; i < stopI ; i++) {
 for(size_t j = startJ ; j < stopJ ; j++) {
  for(size_t k = startK ; k < stopK ; k++) {
   //example calculations
   valueIJK = func1(i,j,k);
   newArray[i][j][k] = func2(oldArray[i][j][k]) * valueIJK;       
  }
 }
}

我的第一个想法是:

#pragma omp parallel for
for(size_t i[0] = start[0] ; i[0] < stop[0] ; i[0]++) {
 for(size_t i[1] = start[1] ; i[1] < stop[1] ; i[1]++) {
  for(size_t i[2] = start[2] ; i[2] < stop[2] ; i[2]++) {
   //example calculations
   //valueIJK = func1(i,j,k);
   //newArray[i][j][k] = func2(oldArray[i][j][k]) * valueIJK;       
  }
 }
}

但我认为,最好的是:

double i[3];
double start[3];
double stop[3];
/* set start, stop values */
/* next line is highly incorrect code */
#pragma omp parallel for
vectorized_for(i = start ; i < stop ; i++)
   //example calculations
   //valueIJK = func1(i,j,k);
   //newArray[i][j][k] = func2(oldArray[i][j][k]) * valueIJK;       
}

我现在的问题:

  1. 你是否理解我想要的东西:D我可以解释更多
  2. 可以实施吗?隐藏三个嵌套的for循环?类似于&#34;对于(i,j,k)的每个组合,执行以下操作&#34; ?喜欢for_each in?
  3. 是否仍会被omp识别?
  4. 它和以前一样快吗?
  5. 非常感谢您的想法:)

0 个答案:

没有答案