LASTPRIVATE 節が SECTIONS 構造に記述されている場合、変数は最後の SECTION で代入されなければなりません。
LASTPRIVATE 節では構造の本体内で変数が PRIVATE として扱われます。構造の出口では、領域の最後の作業単位を実行するスレッドに属している、対応するスレッド・プライベートの変数から外部変数の値が代入されます。SECTIONS 構造の場合、最後の作業単位は最後に現れる SECTION に対応します。
確実に決定性のある動作にするには、任意の SECTION で代入される場合、LASTPRIVATE 変数は最後の SECTION で代入されなければなりません。これは、最後の SECTION を実行するスレッドにより、ほかのどの SECTION が実行されるかが不明なために必要です。このエラーは、この規則に違反していることを示します。
ID |
問題箇所 |
説明 |
---|---|---|
1 |
メモリー読み取り |
変数が読み取られた場所 |
2 |
OpenMP* 宣言 |
SECTIONS 宣言子の場所 |
#include <stdio.h> #include <omp.h> int main(int argc, char **argv) { int ii = 0; int jj = 0; omp_set_num_threads(3); #pragma omp parallel #pragma omp sections lastprivate (ii, jj) { #pragma omp section ii = 10; #pragma omp section jj = 2; } // Bad: ii is indeterminate here printf("After parallel section ii = %d and jj = %d\n", ii, jj); return 0; }
© 2010 Intel Corporation. 無断での引用、転載を禁じます。