2016-10-23 36 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中找到扩展示例说明。