How to make doacross loop with -2 dependency

Viewed 79

I have problem with OpenMP. I have to make doacross loop. For example:

    for (int i = 1; i < SIZE-2; i++) {
        for (int j = 2; j < SIZE-2; j++) {
            tab[i][j] = tab[i][j+2] + tab[i+2][j-2];
        }
    }

And here I have dependency to the j-2, j+2 and i+2, and I don't know how to resolve this dependency.

2 Answers

You can try something like:

#pragma omp parallel for ordered(2)
for (int i = 1; i < SIZE-2; i++) {
    for (int j = 2; j < SIZE-2; j++) {
        #pragma omp ordered depend(sink:i,j+2) depend(sink:i+2,j-2) 
        tab[i][j] =  tab[i][j+2] + tab[i+2][j-2];
        #pragma omp ordered depend(source)
    }

}

I arrived at a working solution based on the answer by dreamcrash:

#pragma omp parallel for ordered(2)
for(int i=1; i<N-2; i++){
    for(int j=1; j<N-2; j++){
        #pragma omp ordered depend(sink:i,j-2) depend(sink:i-2,j+1)
        a[i][j] = a[i][j+2] + a[i+2][j-1];
        #pragma omp ordered depend(source)   
    }
}
Related