我的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/