OpenCL でアルゴリズムを実装しています。C++ で何度もループし、毎回同じ OpenCL カーネルを呼び出します。カーネルは、次の反復の入力データとこれらのデータの数を生成します。現在、次の 2 つの用途について、各ループでこの数値を読み返しています。
- この数を使用して、次のループに必要な作業項目の数を決定します。と
- この数値を使用して、ループを終了するタイミング (数値が 0 の場合) を決定します。
読み取りにはループのほとんどの時間がかかることがわかりました。それを回避する方法はありますか?
一般的に言えば、カーネルを繰り返し呼び出す必要があり、終了条件がカーネルによって生成された結果 (固定数のループではない) に依存している場合、どうすれば効率的に実行できますか? GPU から読み返す代わりに、OpenGL のオクルージョン クエリのようなものはありますか?