为什么 OpenMP 禁止在“#pragma omp parallel”中使用 lastprivate?

Nan*_*iao 4 c openmp

我的OpenMP程序是这样的:

#include <stdio.h>
#include <omp.h>

int main (void)
{
    int i = 10;

    #pragma omp parallel lastprivate(i)
    {
        printf("thread %d: i = %d\n", omp_get_thread_num(), i);
        i = 1000 + omp_get_thread_num();
    }

    printf("i = %d\n", i);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用gcc它进行编译并生成以下错误:

# gcc -fopenmp test.c
test.c: In function 'main':
test.c:8:26: error: 'lastprivate' is not valid for '#pragma omp parallel'
     #pragma omp parallel lastprivate(i)
                          ^~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

为什么禁止在 中OpenMP使用?lastprivate#pragma omp parallel

Zul*_*lan 5

,的含义lastprivate是将“关联循环的顺序最后一次迭代,或词​​法上最后一个section构造 [...] 分配给原始列表项”。

因此,对于纯粹的构造来说它没有意义parallel。使用“退出并行构造的最后一个线程”之类的含义并不是一个好主意 - 这将是一个竞争条件。