main_taskを解決するために複数のデバイス間でサブタスクをスケジュールするアルゴリズムがあります。カーネルをすべてのコマンドキューにエンキューし、イベントをコールバックとともにアタッチします。 このコールバックでは、main_taskが完了しているかどうかをチェックし、main_taskが終了していない場合は、もう1つのサブタスクをエンキューします。それ以外の場合は、共用変数is_main_task_done
をtrue
に設定して、他のコマンド・キューにサブタスクのエンキューを停止する必要があることを通知します。コマンドキューがエンキューされたすべてのジョブを完了するまで待ちます
一方、is_main_task_done
がtrue
に設定されるまで、ホストのメインスレッドが終了するのを防ぐ必要があります。クロスプラットフォームソリューションはありますか?私は今までAMDのガイドにスピンロックソリューションしか見つけていませんでした。
while (!is_main_task_done)
sleep(0)
しかし、Windowsでのみ動作するようです。
タスクが完了していない場合は、is_task_done = trueを設定します。それは意味をなさない。 – j13r
申し訳ありません。私は用語を更新しました。基本的には、さまざまなスレッドで異なる範囲のfor-loopの一種です。 – Kentzo