2016-10-23 105 views
0

我是OpenMP的新手,我堅持使用基本操作。這裏是我的問題的示例代碼。OpenMP:如何將firstprivate變量的值複製回全局

#include <omp.h> 
int main(void) 
{ 
    int A[16] = {1,2,3,4,5 ...... 16}; 
    #pragma omp parallel for firstprivate(A) 
    for(int i = 0; i < 4; i++) 
    { 
    for(int j = 0; j < 4; j++) 
    { 
     A[i*4+j] = Process(A[i*4+j]); 
    } 
    } 
} 

很明顯,A的值對每個線程都是本地的。然而,最後,我想把由每個線程計算出的A的部分寫回全局變量A中的相應位置。這是如何實現的?

回答

0

只需製作A共享。這很好,因爲所有循環迭代都在A的不同元素上運行。請記住,OpenMP是共享內存編程。

您可以通過使用shared代替firstprivate明確地這樣做,或者乾脆刪除聲明:

int A[16] = {1,2,3,4,5 ...... 16}; 
    #pragma omp parallel for 
    for(int i = 0; i < 4; i++) 

默認情況下,並行區域之外聲明的所有變量。您可以在this answer中找到擴展示例說明。