为什么此代码中的缩减会引发错误:
user defined reduction not found for 'avgs'
void parallel_avg_pixel(long img[DIM_ROW][DIM_COL][DIM_RGB], long *avgs) {
int row, col, pixel;
long count = 0;
#pragma omp parallel for reduction(+:avgs)
for (row = 0; row < DIM_ROW; row++) {
for (col = 0; col < DIM_COL; col++) {
for (pixel = 0; pixel < DIM_RGB; pixel++){
avgs[pixel] += img[row][col][pixel];
count++;
}
}
}
count /= 3;
for (pixel = 0; pixel < DIM_RGB; pixel++) {
avgs[pixel] /= count;
}
}
我预计这段代码会将每个线程的值avgs
并行设置为私有,然后在for循环执行结束时将它们相加.