我看了官方定義,但我仍然很困惑。在OpenMP中,firstprivate和lastprivate與private子句有何不同?
firstprivate
:指定每個線程都應該有自己的變量的實例,該變量應與變量的值進行初始化,因爲它的並行構造之前就存在。
對我來說,這聽起來很像私人。我查找了一些例子,但我似乎不明白它的特殊性或如何使用。
lastprivate
:指定封閉上下文的變量的版本設置等於兩者的線程執行的最後一次迭代(for循環結構),或最後一節的函數(#pragma段)專用版本。
我覺得我理解這一個好一點,因爲下面的例子:
#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今天。
這是一個很好的答案!非常感謝你! – SaiyanGirl 2013-03-11 16:29:43
好吧,我會說rater,'firstprivate'和'lastprivate'是'private'的非常特殊情況。您通常甚至不需要使用'private'(只需在並行塊中定義變量),可能會影響外部範圍。有趣的是將C++對象用作自動'firstprivate'變量 - 它們將通過copy-construction初始化一次,並在塊之後被銷燬,並且不需要事先知道線程數量 - 根據需要創建。 – 2014-09-18 07:26:17
這樣一個很好的例子!最喜歡它。感謝Hristo。 – Fusionmate 2015-03-02 07:55:57