пытается сделать следующий код работатьGPU CUDA планирование внутренней резьба не работает должным образом
__global__ void kernel(){
if (threadIdx.x == 1){
while(var == 0){
}
}
if (threadIdx.x == 0){
var = 1;
}
}
где вар является переменным глобальным устройством. Я просто запускаю два потока в том же блоке с помощью ядра < < < 1,2 >>>();
Если я переключу порядок ifs, код завершается. Однако, , если я не переключаю порядок ifs, код не заканчивается. Кажется, что если один поток переходит в бесконечный цикл, то никакому другому потоку не будет выделено время выполнения до этого потока завершает весь его код.
У меня создалось впечатление, что в графическом процессоре все потоки получают определенное время от времени (хотя заказ может быть нам неизвестен).
Я также попытался положить __threadfence() внутри цикла while и внутри операторы ifs, а также попытался поместить в цикл while printf. Это все еще не работает.
Что происходит? Любая обратная связь будет оценена.
Спасибо!
Пожалуйста, напишите * реальный * код. Что такое var? – talonmies