OpenMP:如何将firstprivate变量的值复制回全局

时间:2016-10-23 06:39:26

标签: parallel-processing openmp

我是OpenMP的新手,我坚持使用基本操作。以下是我的问题的示例代码。

#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中的相应位置。如何实现?

1 个答案:

答案 0 :(得分: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中找到扩展的示例性说明。