我很难使用OpenMP with C来并行化这种方法。我想知道是否有人可以提供帮助,并可能告诉我这种方法的并行化有什么问题。
void blur(float **out, float **in) {
// assumes "padding" to avoid messy border cases
int i, j, r, c;
float tmp, term;
term = 1.0 / 157.0;
#pragma omp parallel num_threads(8)
#pragma omp for private(r,c)
for (i = 0; i < N-4; i++) {
for (j = 0; j < N-4; j++) {
tmp = 0.0;
for (r = 0; r < 5; r++) {
for (c = 0; c < 5; c++) {
tmp += in[i+r][j+c] * mask[r][c];
}
}
out[i+2][j+2] = term * tmp;
}
}
}
答案 0 :(得分:0)
你应该在循环中声明tmp
:
// at line 11:
float tmp = 0.0;
或将tmp
指定为私有变量:
// at line 7:
#pragma omp for private(r,c,tmp)
或者它将被视为线程之间的共享变量。