0

main_taskを解決するために複数のデバイス間でサブタスクをスケジュールするアルゴリズムがあります。カーネルをすべてのコマンドキューにエンキューし、コールバックを使用してイベントをアタッチします。このコールバックでは、main_taskが完了したかどうかを確認し、完了していない場合は、もう1つのサブタスクをキューに入れます。それ以外の場合は、共有変数is_main_task_doneをに設定しtrueて、サブタスクのエンキューを停止する必要があることを他のコマンドキューに通知します。

is_main_task_doneその間、に設定されるまで、ホストのメインスレッドが終了しないようにする必要がありtrueます。クロスプラットフォームソリューションはありますか?これまでのところ、AMDのガイドでスピンロックソリューションのみを見つけました。

while (!is_main_task_done)
 sleep(0)

ただし、Windowsでのみ機能するようです。

4

1 に答える 1

1

ここでセマフォを使用することをお勧めします。実行したいタスクの数でセマフォを初期化すると、この数だけが実行されるようになります。

于 2012-04-14T14:53:20.023 に答える