我开始深入研究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
怎么办?
内存本身是复制还是值?
另外,如果你能指出我更多文档的方向,我会非常感激。
谢谢!
答案 0 :(得分:2)
是的,每个线程都有自己的变量实例,初始化为该变量的值。
在原始文档和一些基本教程旁边,文档似乎有点稀疏。
答案 1 :(得分:2)
根据OpenMP 4.5的2.15.3.4,复制了元素:
对于非数组类型的元素数组,每个元素都被初始化,就像从原始数组的元素赋值到新数组的相应元素一样。