CUDA: остановить все остальные темы

У меня есть проблема, которая, казалось бы, разрешима, перечисляя все возможные решения, а затем находя лучшее. Для этого я разработал алгоритм обратного отслеживания, который перечисляет и сохраняет лучшее решение, если оно найдено. Пока все отлично работает.

Теперь я хотел перенести этот алгоритм на CUDA. Поэтому я создал процедуру, которая генерирует несколько отдельных основных случаев. Эти основные случаи должны обрабатываться параллельно на GPU. Если один из потоков CUDA находит оптимальное решение, все остальные потоки могут, конечно, прекратить свою работу.

Итак, я хотел примерно следующее: поток, который находит оптимальное решение, должен остановитьсявсе запускать CUDA-потоки моей программы, тем самым заканчивая расчет.

После небольшого поиска я обнаружил, что потоки могут общаться, только если они находятся в одном блоке. (Так что я полагаю, что невозможно остановить потоки других блоков.)

Единственный способ, о котором я мог подумать, это то, что у меня есть выделенный флаг.optimum_found, который проверяется в начале каждого ядра. Если найдено оптимальное решение, этот флаг устанавливается на1Таким образом, все будущие темы знают, что они не должны работать. Но, конечно, уже запущенные потоки не замечают этот флаг, если не проверяют его на каждой итерации.

Итак, есть ли возможность остановить все остальные CUDA-потоки?

Ответы на вопрос(3)

Ваш ответ на вопрос