OpenMP与C程序

时间:2014-05-13 08:08:12

标签: c openmp

我很难使用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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你应该在循环中声明tmp

// at line 11:
float tmp = 0.0;

或将tmp指定为私有变量:

// at line 7:
#pragma omp for private(r,c,tmp)

或者它将被视为线程之间的共享变量。