CUDA: Stoppen Sie alle anderen Threads

Ich habe ein Problem, das anscheinend lösbar ist, indem ich alle möglichen Lösungen aufführe und dann die besten finde. Zu diesem Zweck habe ich einen Backtracking-Algorithmus entwickelt, der die beste Lösung auflistet und speichert, wenn sie gefunden wird. Es funktioniert soweit gut.

Now, ich wollte diesen Algorithmus nach CUDA portieren. Aus diesem Grund habe ich eine Prozedur erstellt, die einige unterschiedliche Grundfälle generiert. Diese Grundfälle sollten auf der GPU parallel abgearbeitet werden. Wenn einer der CUDA-Threads eine optimale Lösung findet, können alle anderen Threads natürlich ihre Arbeit einstellen.

Also, ich wollte eine Art von Folgendem: Der Thread, der die optimale Lösung findet, sollte aufhörenall CUDA-Threads meines Programms ausführen und Berechnung abschließen.

Nach einer kurzen Suche stellte ich fest, dass Threads nur kommunizieren können, wenn sie sich im selben Block befinden. (Also ist es wohl unmöglich, andere zu stoppen, die Threads blockieren.)

Die einzige Methode, die mir in den Sinn kommt, ist, dass ich ein dediziertes Flag habeoptimum_found, das am Anfang jedes Kernels überprüft wird. Wenn eine optimale Lösung gefunden wird, wird dieses Flag auf @ gesetz1, damit alle zukünftigen Threads wissen, dass sie nicht funktionieren müssen. Aber Threads, die bereits ausgeführt werden, bemerken dieses Flag natürlich nicht, wenn sie es nicht bei jeder Iteration überprüfen.

So, gibt es eine Möglichkeit, alle verbleibenden CUDA-Threads zu stoppen?