考えられるすべての解決策を列挙し、最良のものを見つけることで解決できるように見える問題があります。そのために、最適なソリューションが見つかった場合にそれを列挙して保存するバックトラッキングアルゴリズムを考案しました。これまでのところ正常に動作します。
さて、このアルゴリズムをCUDAに移植したかったのです。したがって、私はいくつかの明確な基本的なケースを生成するプロシージャを作成しました。これらの基本的なケースは、GPUで並行して処理する必要があります。CUDAスレッドの1つが最適な解決策を見つけた場合、他のすべてのスレッドは、もちろん、作業を停止できます。
そこで、次のようなものが必要でした。最適なソリューションを見つけるスレッドは、プログラムの実行中のすべてのCUDAスレッドを停止し、計算を終了する必要があります。
簡単に検索したところ、スレッドは同じブロック内にある場合にのみ通信できることがわかりました。(したがって、他の人がスレッドをブロックするのを止めることは不可能だと思います。)
私が考えることができる唯一の方法はoptimum_found、すべてのカーネルの先頭でチェックされる専用のフラグを持っていることです。最適なソリューションが見つかった場合、このフラグはに設定される1ため、将来のすべてのスレッドは、それらが機能する必要がないことを認識します。ただし、もちろん、すでに実行されているスレッドは、反復ごとにチェックしない場合、このフラグに気づきません。
それで、残りのすべてのCUDAスレッドを停止する可能性はありますか?