Я занимаюсь разработкой на C / C ++, gcc 4.8.4, без C ++ 11 атм. Я использую 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;
}
Мои вопросы сейчас:
Большое спасибо за ваши мысли 🙂
Задача ещё не решена.