Anatomia de um núcleo
Assinatura, tipo de retorno e a regra de void.
Anatomia de um núcleo é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 1 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.
O Que É um Kernel
Um kernel é uma única função C++ executada na GPU por milhares de threads simultaneamente. Você a escreve uma vez, e o hardware distribui o trabalho. 🚀
A Marcação __global__
Você marca um kernel com o qualificador __global__. Isso informa ao nvcc que a função é chamada pela CPU, mas executada de fato no dispositivo.
__global__ void myKernel() {
// runs on the GPU
}Kernels Retornam void
Todo kernel deve retornar void. Não há valor de retorno para enviar de volta, portanto os resultados saem por ponteiros para a memória do dispositivo.
__global__ void k() { /* void only */ }Por Que Não Retornar um Valor?
Milhares de threads executam seu kernel juntas, portanto um único valor de retorno não faria sentido. Cada thread escreve em sua própria posição de um vetor de saída.
Os Parâmetros São Passados por Valor
Os parâmetros do kernel são copiados para cada thread, portanto passe valores pequenos: inteiros, tamanhos e ponteiros. Nunca passe objetos grandes por valor.
__global__ void add(float* out, float* a, int n) {}Passe Ponteiros, Não Vetores
Para fornecer um vetor a um kernel, você passa um ponteiro do dispositivo. O kernel lê e grava na memória da GPU indicada por esse ponteiro.
__global__ void scale(float* data, float k) {}Cada Thread Escolhe Seu Trabalho
O mesmo código é executado em cada thread, portanto cada uma usa seu índice para decidir qual elemento acessar. É assim que uma função cobre um vetor inteiro.
int i = threadIdx.x; // who am I?Um Kernel Completo e Pequeno
Aqui está um kernel completo: ele dobra um elemento por thread. Observe juntos a marcação __global__, o retorno void e o parâmetro ponteiro.
__global__ void doubleIt(float* x) {
int i = threadIdx.x;
x[i] = x[i] * 2.0f;
}O Código do Hospedeiro Fica Separado
Sua função normal da CPU, geralmente main, é código do hospedeiro. Ela prepara tudo e então solicita à GPU que execute o kernel.
int main() {
// host side: prepare and launch
}Sem Surpresas com Recursão ou E/S
Um kernel é executado em um hardware com regras rígidas, portanto mantenha-o simples: evite recursão profunda e chamadas pesadas da biblioteca padrão dentro dele.
Dando Nomes aos Seus Kernels
Trate um kernel como qualquer função: dê a ele um nome claro, baseado em um verbo, como vectorAdd. Bons nomes tornam os lançamentos muito mais fáceis de ler.
__global__ void vectorAdd(float* c, float* a, float* b);Verificação Rápida
Vamos verificar as regras da assinatura do kernel.
Recapitulação: anatomia do kernel
Um kernel é uma função void __global__ executada por muitas threads. Passe ponteiros e valores pequenos e deixe cada thread usar o próprio índice. Muito bem! 🎉
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 “Anatomia de um núcleo” é grátis?
Sim — o texto completo de “Anatomia de um núcleo” é 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 “Anatomia de um núcleo”?
Assinatura, tipo de retorno e a regra de void. 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 1 de 4.
Quanto tempo leva a aula “Anatomia de um núcleo”?
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
- Anatomia de um núcleo
- A execução com colchetes triplos
- printf dentro de um núcleo
- cudaDeviceSynchronize explicado