CUDA Academy · Aula

Funções __device__ e __host__

Saiba onde cada tipo de função pode ser executado.

Aula 2 de 413 etapas

Funções __device__ e __host__ é 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.

Além do Kernel

Os kernels são pontos de entrada, mas a maior parte do código fica nas funções auxiliares. O CUDA oferece mais dois qualificadores para indicar onde uma função comum pode ser executada. Vamos conhecê-los.

O Qualificador __device__

Uma função __device__ é executada na GPU e só pode ser chamada por outro código da GPU, como um kernel ou outra função do dispositivo.

__device__ int square(int x) {
    return x * x;
}

Auxiliares para Kernels

Pense nas funções __device__ como sua caixa de ferramentas da GPU. Elas mantêm os kernels organizados ao armazenar a lógica reutilizada pelas threads do dispositivo.

O Qualificador __host__

O qualificador __host__ indica código comum da CPU. Ele é o padrão, portanto funções comuns de C++ já são funções do hospedeiro.

__host__ void setup() {
    // runs on the CPU
}

O Padrão É o Hospedeiro

Se você não usar qualificadores, sua função será exclusiva do hospedeiro por padrão. É por isso que C++ normal continua compilando dentro de um arquivo .cu.

Os Dois ao Mesmo Tempo

Combine os dois e a função será compilada para ambos os lados. O nvcc cria uma versão para a CPU e outra para a GPU.

__host__ __device__ int dbl(int x) {
    return x + x;
}

Por Que Compilar para os Dois?

Marcar uma função auxiliar como __host__ __device__ permite executar a mesma matemática no código de referência da CPU e dentro dos kernels, sem duplicação. ✨

Regras de Chamada

O código do hospedeiro não pode chamar uma função __device__, e o código do dispositivo não pode chamar uma função exclusiva do hospedeiro. O compilador impõe essa separação.

Sem __global__ a Partir do Dispositivo

Uma função __device__ não pode ser lançada. Somente kernels __global__ aceitam o lançamento com três sinais de menor feito pelo hospedeiro.

Expansão para Ganhar Velocidade

O compilador frequentemente faz expansão inline de funções __device__ pequenas, portanto envolver a lógica em funções auxiliares geralmente não custa nada durante a execução.

Escolha a Marcação Certa

Escolha de acordo com o local de execução: __device__ para funções auxiliares da GPU, __host__ para código da CPU e ambos quando a lógica for compartilhada.

Verificação Rápida

Agora é hora de testar os qualificadores do dispositivo e do hospedeiro.

Recapitulação

Você aprendeu que __device__ é executado na GPU, __host__ é executado na CPU, o padrão é o hospedeiro e combinar os dois compartilha uma função entre os mundos. 🎯

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 “Funções __device__ e __host__” é grátis?

Sim — o texto completo de “Funções __device__ e __host__” é 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 “Funções __device__ e __host__”?

Saiba onde cada tipo de função pode ser executado. 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 “Funções __device__ e __host__”?

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. O qualificador de função __global__
  2. Funções __device__ e __host__
  3. Espaços de endereçamento separados
  4. O ciclo de vida de um programa CUDA
← Voltar para CUDA Academy