2017-04-07 70 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構建體沒有意義。使用「最後一個線程退出並行結構」這樣的含義並不是一個好主意 - 這將是一種競爭條件。