barrier
提供: Tommy6
void barrier (cl_mem_fence_flags flags)
プロセッサ上でカーネルを実行するあるワークグループ内の全てのワークアイテムは、全てのワークアイテムが barrier() を実行するまで、barrier() の先の処理に進むことができません。ワークグループ内の全てのワークアイテムが、この関数を実行しなければなりません。
barrier() が条件文中にあるとき、あるワークアイテムが条件文に突入して barrier() を実行するのであれば、すべてのワークアイテムがその条件文に突入しなければなりません。
barrier() がループ内にあるとき、ループの各繰り返しで全てのワークアイテムが barrier() を実行するまで、barrier() の先の処理に進むことができません。
ローカルもしくはグローバルメモリへのメモリ操作の順序の正しさを保証するため、barrier() はメモリフェンス(読み込みおよび書き込み)を挿入します。
flags はメモリアドレス空間を指定する引数で、以下の値を組み合わせて設定できます。
- CLK_LOCAL_MEM_FENCE - barrier() 関数は、ローカルメモリに保存されている変数のフラッシュもしくはローカルメモリへのメモリ操作の順序の正しさを保証するためのメモリフェンスを挿入します。
- CLK_GLOBAL_MEM_FENCE - barrier() 関数は、グローバルメモリへのメモリ操作の順序の正しさを保証するためのメモリフェンスを挿入します。これはたとえば、ワークアイテムがバッファあるいはイメージオブジェクトへの書き込みを行い、更新されたデータを読み込みたいようなときに有用です。
変更記録
脚注
―――― Version 1.1, The OpenCL Specification
より翻訳