我用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;
}
我现在的问题:
非常感谢您的想法:)