CUDA: Interrompa todos os outros threads

Eu tenho um problema aparentemente solucionável, enumerando todas as soluções possíveis e, em seguida, encontrando as melhores. Para isso, criei um algoritmo de retorno que enumera e armazena a melhor solução, se encontrado. Até agora funciona bem.

Agora, eu queria portar esse algoritmo para CUDA. Portanto, criei um procedimento que gera alguns casos básicos distintos. Esses casos básicos devem ser processados em paralelo na GPU. Se um dos threads da CUDA encontrar uma solução ideal, todos os outros threads poderão, é claro, interromper seu trabalho.

Então, eu queria o seguinte: O thread que encontra a solução ideal deve parartudo executando threads CUDA do meu programa, finalizando assim o cálculo.

Após uma pesquisa rápida, descobri que os threads só podem se comunicar se estiverem no mesmo bloco. (Então, suponho que seja impossível parar outros blocos de threads).

O único método que eu consegui pensar é que tenho uma bandeira dedicadaoptimum_found, que é verificado no início de cada kernel. Se uma solução ótima for encontrada, esse sinalizador será definido como1, para que todos os futuros threads saibam que não precisam trabalhar. Mas é claro que os threads já em execução não notam esse sinalizador se não o verificarem a cada iteração.

Então, existe a possibilidade de parar todos os threads CUDA restantes?

questionAnswers(3)

yourAnswerToTheQuestion