OpenMP 並列コンパイラ指示文:実装がメモリーに関して一貫性のあるビューを提供しなければならない同期ポイントを識別します。
形式
c$OMP FLUSH [(list)]
c
次のいずれか:C (または c),!,* (「並列指示文の構文規則」を参照)
list
フラッシュする 1 つまたは複数の変数の名前。名前はコンマで区切らなくてはなりません。
規則と振る舞い
FLUSH 指示文は,コード中の同期が必要となるポイントに正確に置かれていなくてはなりません。すべての変数がフラッシュされるのを防ぐには,list を指定します。
スレッド可視変数は,この指示文が置かれているポイントでメモリーに書き戻されます。スレッド可視変数への変更は,このポイント以降はすべてのスレッドから見えるようになります。それ以降,スレッド可視変数を読み込むと,最新のデータのコピーが取得されます。
スレッド可視変数には以下のデータ項目が含まれます。
大域に可視の変数 (共通ブロックとモジュール)
SAVE 属性を持たないが,アドレスが取得されていて保存されているか,アドレスが他の副プログラムに渡されている局所変数
SAVE 属性を持たず,副プログラム中の並列領域で共有可能として宣言されている局所変数
仮引数
すべてのポインタ逆引用
以下の指示文では,FLUSH 指示文が暗黙のうちに仮定されます (NOWAIT キーワードが使用されている場合を除く)。
BARRIER
CRITICAL と END CRITICAL
END DO
END PARALLEL
END SECTIONS
END SINGLE
ORDERED と END ORDERED
関連情報
Compaq Fortran 並列コンパイラ指示文,OpenMP Fortran API コンパイラ指示文,Tru64 UNIX システム用の並列指示文
例
次の例は,FLUSH 指示文を使って,1 対のスレッドの間で 2 点間の同期を行っています。
c$OMP PARALLEL DEFAULT(PRIVATE) SHARED(ISYNC) IAM = OMP_GET_THREAD_NUM() ISYNC(IAM) = 0 c$OMP BARRIER CALL WORK() C I AM DONE WITH MY WORK, SYNCHRONIZE WITH MY NEIGHBOR ISYNC(IAM) = 1 c$OMP FLUSH(ISYNC) C WAIT TILL NEIGHBOR IS DONE DO WHILE (ISYNC(NEIGH) .EQ. 0) c$OMP FLUSH(ISYNC) END DO c$OMP END PARALLEL