我刚开始玩OpenMp,对这个问题感到非常困惑。说如果我声明一个数组int a[10]
并在某个循环内使用它。 #pragma omp parallel for private(a)
和#pragma omp parallel for shared(a)
之间的区别是什么?对我来说a
只是一个指向数组的第一个元素的指针,并且根据我读的private
构造会为每个线程创建一个变量的副本,而且非常奇怪如果我做了初始化它的随机值不使用firstprivate
构造。所以我的问题是如果我使用private
构造,会发生什么语义?它是否会创建一组指针并将它们分配给每个创建的线程,或者是否会创建整个数组的一组副本,并让每个线程分别使用它们?OpenMP如何处理C中的数组?
非常感谢。