CUDA Academy · Aula

Vetores e transformações com Thrust

Paralelismo no estilo STL na GPU.

Aula 2 de 413 etapas

Vetores e transformações com Thrust é 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.

A STL da sua GPU

Thrust é uma biblioteca de alto nível que se parece com a STL do C++, mas é executada na GPU. Você quase não precisa escrever código de kernel. 🎉

Dois tipos de vetor

O Thrust fornece host_vector para a memória da CPU e device_vector para a memória da GPU. Eles parecem idênticos, mas vivem em mundos diferentes.

thrust::host_vector<int> h(100);
thrust::device_vector<int> d(100);

Copiando através da fronteira

Atribuir um host_vector a um device_vector dispara automaticamente uma transferência de memória. Você não precisa escrever manualmente o código repetitivo de cudaMemcpy.

thrust::device_vector<int> d = h; // host to device

A alocação é automática

Um device_vector aloca e libera a memória da GPU por você usando RAII. Quando sai do escopo, a memória é liberada corretamente.

Preenchimento e sequência

Funções auxiliares como thrust::fill e thrust::sequence inicializam um device_vector inteiro em uma única chamada paralela, em vez de usar um laço manual.

thrust::sequence(d.begin(), d.end()); // 0,1,2,...

Transform transforma elemento em elemento

thrust::transform aplica uma função a cada elemento em paralelo e grava o resultado em um intervalo de saída. Esse é o padrão clássico de mapeamento.

thrust::transform(d.begin(), d.end(),
  out.begin(), op);

Functores são a operação

A operação passada é um functor: uma estrutura com um operator() marcado como __host__ __device__ para que possa ser executado na GPU.

struct Square { __host__ __device__
  float operator()(float x){ return x*x; } };

Operadores integrados

Para operações matemáticas comuns, o Thrust fornece functores como thrust::plus e thrust::multiplies, evitando que você escreva um functor para tarefas simples.

thrust::transform(a.begin(), a.end(),
  b.begin(), c.begin(), thrust::plus<float>());

Duas entradas, uma saída

A forma binária de transform recebe dois intervalos de entrada e os combina elemento a elemento, sendo perfeita para a adição de vetores.

Obtendo o ponteiro bruto

Precisa usar um kernel escrito manualmente? thrust::raw_pointer_cast fornece o ponteiro de dispositivo subjacente para você repassá-lo.

float* p = thrust::raw_pointer_cast(d.data());

Menos código, menos erros

Thrust oculta a alocação, as cópias e as configurações de lançamento. Em troca de um pouco de controle, obtém código de GPU legível e seguro que simplesmente funciona.

Verificação rápida

Recupere como Thrust aplica uma operação a um vetor inteiro.

Recapitulação

Você usou device_vector para gerenciar a memória automaticamente, transferiu dados por atribuição e executou a transformação com objetos funcionais. Poder da GPU no estilo STL. 💪

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 “Vetores e transformações com Thrust” é grátis?

Sim — o texto completo de “Vetores e transformações com Thrust” é 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 “Vetores e transformações com Thrust”?

Paralelismo no estilo STL na 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 2 de 4.

Quanto tempo leva a aula “Vetores e transformações com Thrust”?

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. GEMM com cuBLAS do jeito certo
  2. Vetores e transformações com Thrust
  3. Reduce, Scan e Sort com Thrust
  4. cuDNN para aprendizado profundo
← Voltar para CUDA Academy