2017-04-07 51 views
2

OpenMP程序是这样的:为什么OpenMP的禁止使用“的#pragma OMP并行” LASTPRIVATE?

#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

+1

[在OpenMP中如何firstprivate和lastprivate不同于private子句?](http://stackoverflow.com/questions/15304760/how-are-firstprivate-and-lastprivate-different-than-private-clauses -in-的OpenMP) – LPs

回答

1

lastprivate的含义是将“分配给相关循环的顺序最后一次迭代,或者在词汇上将最后的section结构分配给原始列表项”。

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

相关问题