変数 x があるとします。
x = 0
次に、いくつかのスレッドを生成します。各スレッドは、アトミックを使用せずに次の式を実行する場合と実行しない場合があります。
x |= 1
すべてのスレッドがメイン スレッドに参加した後、メイン スレッドは値で分岐します。
if(x) { ... } else { ... }
この状況で競合状態が発生する可能性はありますか? 'x' の読み取りと書き込みの間に、スレッドが別のスレッドによって中断されるかどうかは問題ではないように思われるため、私の考えではノーと言います (どちらの場合も、'x == 1' または 'x == 1' のいずれか)。 )。とはいえ、ばかげた明白なものやばかげて微妙なものを見逃していないことを確認したいと思います。
また、反対の回答をした場合は、命令ごとの例を提供してください。
コンテキスト:私は、OpenCL で、自分のスレッドがその作業項目の中 で機能の有無を示すようにしようとしています。いずれかのスレッドが機能の存在を示している場合、私のホストは結果に基づいて分岐できるはずです。上記の方法を考えています。より良い提案があれば、それもうまくいきます!
詳細: データがバンド化されている場合に基数パスをスキップするために、OpenCL の基数ソート実装に早期終了を追加しようとしています (つまり、上記の 'x' は x[RADIX] になり、すべてのワーク グループが必要になります)。データを部分的に縮小した後、RADIX ビン内の要素の有無を「x」で示します)。