公式の定義を見てきましたが、まだかなり混乱しています。
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
for を返すことができることを理解しています。i
今日から OpenMP の学習を始めました。