首页 > 解决方案 > 如何使用-2依赖项制作docross循环

问题描述

我有 OpenMP 的问题。我必须做docross循环。例如:

    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];
        }
    }

在这里我依赖于 j-2、j+2 和 i+2,我不知道如何解决这种依赖关系。

标签: multithreadingparallel-processingopenmprace-condition

解决方案


您可以尝试以下方法:

#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)
    }

}

推荐阅读