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

标签 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;
}

使用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)
                          ^~~~~~~~~~~

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

最佳答案

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

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

关于c - 为什么 OpenMP 禁止在 "#pragma omp parallel"中使用 lastprivate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43275309/

相关文章:

python - 尝试从 C 调用 Python 函数时出现段错误

c++ - 使用 OpenMP 实现的线程池

c++ - 我们可以有递归宏吗?

使用 Cygwin 和 gdbtui 进行 C 编程

c - 如何将C语言转换为汇编语言

c - openmp中的Pi不依赖于线程

C openMP 程序的完全空白输出

Power8 上的 OpenMP SIMD

c - OpenMP并行计算素数

c - 无法创建套接字: Operation not permitted - Mac