最佳答案
我看了官方的定义,但我还是很困惑。
firstprivate
: 指定每个线程应该有自己的变量实例,并且应该用变量的值初始化变量,因为它存在于并行结构之前。
对我来说,这听起来很私人。我一直在寻找例子,但我似乎不明白它是如何特殊或如何使用它。
lastprivate
: 指定将封闭上下文的变量版本设置为相当于执行最终迭代(for-loop 结构)或最后部分(# 杂注部分)的线程的私有版本。
因为下面的例子,我觉得我对这个问题有了更好的理解:
#pragma omp parallel
{
#pragma omp for lastprivate(i)
for (i=0; i<n-1; i++)
a[i] = b[i] + b[i+1];
}
a[i]=b[i];
因此,在本例中,我理解 lastprivate
允许将 i
作为最后一个值在循环外返回。
我今天才开始学 OpenMP。