フロートの大規模な配列、可能な数百万のセル、およびこれ以上作業を行うことができない状態に達するまでこのデータを操作するアルゴリズムがあります。これらの float の 1 つが 0 より大きい場合、ブール値を true に設定してからホストに渡す必要があります。これは、カーネルを再度実行するようにスケジュールする必要があることを意味します。計算を行うセルごとに作業項目があります。これまでのところ、配列全体で 2 段階の |= リダクションを使用することを検討してきましたが、これが適切な方法と思われます。別の非常に遅い方法は、アトミック操作を使用することです。
ワークアイテムが何らかの作業を行う場合にのみ特定の値を設定し、それ以外の場合はそのままにしておきたいので、アトミックを使用せずにすべてのワークグループのすべてのワークアイテムで変更できるグローバルブール値を渡しても、意図したことを達成できますか?効果?このブール値が false に初期化され、ワークアイテムによってのみ true に設定できると仮定すると、間違った結果が得られる可能性はありますか? これは悪い考えですか? もしそうなら、なぜですか?