CUDA Academy · Aula

cudaDeviceSynchronize explicado

Por que a CPU precisa esperar pela GPU.

Aula 4 de 413 etapas

cudaDeviceSynchronize explicado é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 4 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.

A CPU não espera

Depois de um lançamento, a CPU continua avançando enquanto a GPU ainda trabalha. Para pausar e esperar, chame cudaDeviceSynchronize. ⏳

myKernel<<<g, b>>>(p);
cudaDeviceSynchronize();

O que sincronizar significa

cudaDeviceSynchronize bloqueia o hospedeiro até que toda tarefa da GPU na fila termine. Só então a próxima linha da CPU é executada.

Por que você precisa disso

Sem uma sincronização, você pode ler resultados que a GPU ainda não escreveu. A sincronização garante que o kernel realmente esteja concluído.

Esvaziando a saída de printf

Ela também esvazia o printf do dispositivo. Se o kernel imprime, mas nada aparece, geralmente a causa é a falta de sincronização.

hi<<<1, 4>>>();
cudaDeviceSynchronize(); // now you see it

Ele retorna um código de erro

A chamada retorna um cudaError_t. Uma falha nesse ponto geralmente revela um erro ocorrido dentro do kernel.

cudaError_t e = cudaDeviceSynchronize();

Detecte falhas ocultas do kernel

Os kernels falham silenciosamente, portanto verificar o código de erro da sincronização é como descobrir um acesso fora dos limites ou um lançamento inválido.

if (e != cudaSuccess) printf("kernel failed\n");

cudaMemcpy também sincroniza

Um cudaMemcpy simples de volta para o hospedeiro também espera pela GPU. Nesse caso comum, talvez não seja necessária uma sincronização separada.

cudaMemcpy(host, dev, n, cudaMemcpyDeviceToHost);

Não sincronize em excesso

Chamar a sincronização depois de cada etapa elimina a sobreposição e deixa a execução mais lenta. Sincronize apenas quando realmente precisar ler resultados ou medir o tempo.

Sincronizando para medir o tempo

Para medir um kernel de forma correta, sincronize antes e depois. Caso contrário, o cronômetro medirá apenas a rapidez com que a CPU colocou o trabalho na fila.

cudaDeviceSynchronize();
// start timer ... kernel ... sync ... stop

A sincronização de um fluxo é mais restrita

Para ter um controle mais preciso, cudaStreamSynchronize espera por um único fluxo em vez de esperar pelo dispositivo inteiro. É ótimo quando há sobreposição de trabalho.

cudaStreamSynchronize(stream);

Um hábito inicial seguro

Enquanto estiver aprendendo, sincronize depois de cada lançamento e verifique o resultado. Quando o código estiver sólido, remova as sincronizações extras para ganhar velocidade.

Verificação rápida

Verifique seu entendimento sobre sincronização.

Recapitulação: sincronização

cudaDeviceSynchronize faz a CPU esperar pela GPU, esvazia o printf e revela falhas ocultas. Use-o com critério, não em todos os lugares. 🎉

Grátis para começar

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 “cudaDeviceSynchronize explicado” é grátis?

Sim — o texto completo de “cudaDeviceSynchronize explicado” é 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 “cudaDeviceSynchronize explicado”?

Por que a CPU precisa esperar pela GPU. 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 4 de 4.

Quanto tempo leva a aula “cudaDeviceSynchronize explicado”?

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

  1. Anatomia de um núcleo
  2. A execução com colchetes triplos
  3. printf dentro de um núcleo
  4. cudaDeviceSynchronize explicado
← Voltar para CUDA Academy