1

我不清楚 openMP 中“共享”的作用。我看到共享的规范声明“声明一个或多个由任务共享的列表项......”但这对我来说似乎不清楚。

例如,如果我有以下代码:

    #pragma omp parallel for shared(num1)
    for(i=0; i<m; i++) {
        for(j=0; j < n; j++) {
            if(myFunc(i,j) < 0) {
                num1 += 256*u(i,j);
            }
        }
    }

这是否会停止使用 num1 的竞争条件并在此 for 循环结束时给出准确的结果?如果不是,它具体是做什么的?

4

1 回答 1

0

这会停止比赛条件吗?

不,它不会

确保多个线程正确访问 SHARED 变量是程序员的责任(例如通过 CRITICAL 部分)

共享部分只是使相同的变量在多个线程中可见。

您可以使用临界区或原子访问进行同步,但在这种情况下,您最好使用缩减子句:

#pragma omp parallel for reduction(+:num1)
于 2013-05-13T04:52:07.443 回答