在OpenMP - C中将数组声明为firstprivate

时间:2016-07-31 14:03:38

标签: c openmp

我开始深入研究OpenMP,我不确定我是否完全理解firstprivate如何处理数组。

如果我有以下代码:

int array[5] = {0, 1, 2, 3, 4};
int i;    
#pragma omp parallel for firstprivate(array)
for (i=0; i<SOME_LENGTH; i++) {
  // something using array as a right hand operand
}

是否会将数组复制到每个线程?如果它是一个更复杂的结构而不是简单的int怎么办?

内存本身是复制还是值?

另外,如果你能指出我更多文档的方向,我会非常感激。

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,每个线程都有自己的变量实例,初始化为该变量的值。

在原始文档和一些基本教程旁边,文档似乎有点稀疏。

答案 1 :(得分:2)

根据OpenMP 4.5的2.15.3.4,复制了元素:

  

对于非数组类型的元素数组,每个元素都被初始化,就像从原始数组的元素赋值到新数组的相应元素一样。