Sincronize com __syncthreads
Barreiras que mantêm as threads sincronizadas.
Sincronize com __syncthreads é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de CUDA Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de CUDA Academy inclui 4 aulas no total.
As threads saem de sincronia
As threads de um bloco não avançam em passo de marcha. Uma pode terminar de gravar enquanto outra ainda está carregando, portanto você não pode presumir que os dados estejam prontos.
Conheça a barreira
Uma barreira é uma linha no código na qual todas as threads precisam esperar até que todas cheguem. Só então o bloco prossegue em conjunto.
A chamada __syncthreads
O CUDA fornece __syncthreads() como a barreira de todo o bloco. Chame-a, e cada thread do bloco pausará até que a última chegue. 🛑
__syncthreads();A ordem carregar-sincronizar-usar
O padrão fundamental é simples: cada thread carrega sua parte para a memória compartilhada, você sincroniza e, então, todas leem com segurança o que as outras gravaram.
tile[threadIdx.x] = input[i];
__syncthreads();
float left = tile[threadIdx.x - 1];Ignore-a e você obterá lixo
Esqueça a barreira, e uma thread poderá ler uma posição antes que a thread vizinha a tenha gravado. Isso é uma condição de corrida, e o resultado são dados incorretos e silenciosos.
Ela também é uma cerca de memória
A barreira também torna as gravações na memória compartilhada visíveis para todas as threads depois dela. Assim, depois de passar por __syncthreads, todas veem os valores recém-gravados.
Todas, ou nenhuma, devem chegar a ela
A regra estrita é: todas as threads do bloco devem alcançar o mesmo __syncthreads. Se algumas o ignorarem, o bloco poderá ficar travado para sempre.
A armadilha do desvio divergente
Nunca coloque uma barreira dentro de um if que apenas algumas threads executam. As threads que seguem o outro caminho nunca chegam, e o bloco sofre um deadlock. ⚠️
if (threadIdx.x < 64) {
__syncthreads();
}Escopo do bloco, não da grade
Uma limitação importante: __syncthreads sincroniza apenas um bloco. Ele não consegue coordenar threads de blocos diferentes da grade.
Sincronização dentro de laços
Em algoritmos com blocos de dados, você frequentemente sincroniza duas vezes por fase: uma vez depois de carregar um bloco e outra depois de calcular, antes de carregar o próximo.
Barata, mas não gratuita
Uma barreira custa um pouco de tempo enquanto as threads esperam. Use-a quando a correção exigir, mas evite chamadas extras que apenas parem as threads rápidas.
Verificação rápida
Vamos testar sua compreensão da barreira.
Recapitulação
Você aprendeu que __syncthreads() é uma barreira de todo o bloco que mantém as threads sincronizadas e que colocá-la dentro de desvios divergentes pode causar deadlock. A seguir: conflitos de bancos. 🎯
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Sincronize com __syncthreads” é grátis?
Sim — o texto completo de “Sincronize com __syncthreads” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de CUDA Academy, atualize para CoddyKit PRO. O curso de CUDA Academy inclui 4 aulas no total.
O que vou aprender em “Sincronize com __syncthreads”?
Barreiras que mantêm as threads sincronizadas. Você pratica CUDA Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar CUDA Academy?
Nenhuma experiência prévia é necessária. CUDA Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Sincronize com __syncthreads”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de CUDA Academy?
Sim. Cada aula de CUDA Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Declare vetores __shared__
- Sincronize com __syncthreads
- Evite conflitos de bancos
- Memória compartilhada dinâmica