Entrar em Contato

Programa do Curso

Introdução à Computação Acelerada por GPU

  • Computação heterogênea e a arquitetura CPU-GPU.
  • Espaços de execução e memória do CUDA.
  • Compilação de código C++ com CUDA usando nvcc e CMake.
  • Verificação do ambiente de desenvolvimento para GPU.

Algoritmos Paralelos com Thrust e CUB

  • Ordenação, redução e transformação aceleradas por GPU.
  • Rrefatoração de algoritmos STL para execução em GPU.
  • Vetores de dispositivo e políticas de execução do Thrust.
  • Primitivos abrangentes de dispositivo do CUB para pipelines personalizados.

Arquitetura e Gerenciamento de Memória da GPU

  • Tipos de memória global, constante e de textura.
  • Alocação explícita de memória do dispositivo e transferências.
  • Memória Unificada para simplificar o acesso aos dados.
  • Interleaving de memória (memory coalescing) e otimização de padrões de acesso.

Execução Assíncrona com Streams do CUDA

  • Criação e gerenciamento de streams do CUDA.
  • Sobreposição da execução de kernels com transferências de dados.
  • Eventos do CUDA para gerenciamento de dependências.
  • Prioridades de stream e ajuste de concorrência.

Escrita de Kernels CUDA Personalizados

  • O modelo de programação SIMT e a execução por warp.
  • Configuração de lançamento de kernels e laços de passo de grade (grid-stride loops).
  • Indexação de threads e grades multidimensionais.
  • Tratamento de erros e verificações da API de runtime do CUDA.

Hierarquia de Threads e Modelo de Execução

  • Grades, blocos e threads no código do dispositivo.
  • Primitivos em nível de warp e operações de votação (ballot operations).
  • Sincronização em nível de bloco e barreiras.
  • Análise de ocupação e utilização de recursos.

Grupos Cooperativos para Paralelismo Flexível

  • A API cooperative_groups e os tipos de grupo.
  • Tijolos (tiles) de bloco de threads e tiled_partition.
  • Lançamentos cooperativos em nível de grade.
  • Padrões de sincronização entre múltiplas grades.

Técnicas de Otimização com Memória Compartilhada

  • Bancos de memória compartilhada e prevenção de conflitos de banco (bank conflicts).
  • Estratégias de tijolamento para operações matriciais.
  • Memória compartilhada como cache gerenciado pelo usuário.
  • cuda::shared_memory_mdspan para visualizações multidimensionais.

Fusão de Kernels e Padrões Paralelos Avançados

  • Fusão de múltiplos kernels para reduzir a sobrecarga de lançamento.
  • Algoritmos scan, reduce-by-key e segmentados.
  • Operações atômicas e estruturas de dados sem bloqueio (lock-free).
  • Atômicos agregados por warp para aumentar a taxa de transferência.

Perfilamento e Otimização com Nsight Systems

  • Análise temporal da atividade da CPU e da GPU.
  • Identificação de gargalos na transferência de memória.
  • Perfilamento do desempenho dos kernels e da ocupação.
  • Otimização iterativa com o Nsight Compute.

Recursos Modernos do C++ em Código CUDA de Dispositivo

  • Lambdas, constexpr e auto em kernels.
  • Algoritmos paralelos do C++17 e políticas de execução.
  • Conceitos e ranges do C++20 no dispositivo.
  • Suporte ao C++23 no nvcc e no CCCL 3.x.

CUDA Graphs e Assincronicidade Avançada

  • Definição e lançamento de gráficos CUDA (CUDA graphs).
  • Captura de gráficos a partir da execução de streams.
  • Atualização de gráficos e nós de execução condicional.
  • Redução da latência de lançamento para cargas de trabalho iterativas.

Padrões de Integração para Aplicativos Existentes

  • Envio do código da GPU atrás de interfaces C++.
  • Gerenciamento de sistemas com múltiplas GPUs e NUMA.
  • Integração ao sistema de compilação com CMake e CUDA.
  • Depuração de código do dispositivo com cuda-gdb.

Resumo e Melhores Práticas

  • Escolha entre Thrust, CUB e kernels personalizados.
  • Portabilidade de desempenho entre arquiteturas de GPU.
  • Organização do código e RAII para recursos CUDA.
  • Próximos passos e caminhos avançados de aprendizado em CUDA.

Requisitos

  • Habilidade básica em C++, incluindo expressões lambda, templates e STL.
  • Conhecimento de algoritmos padrão, contêineres e iteradores.
  • Conforto com laços, condicionais e funções.
  • Não é necessário conhecimento prévio de CUDA ou programação em GPU.

Público-Alvo

  • Desenvolvedores C++ que buscam acelerar aplicativos intensivos em computação com GPUs.
  • Engenheiros de software transicionando de programação exclusiva para CPU para programação paralela heterogênea.
  • Engenheiros de desempenho e desenvolvedores quantitativos que trabalham com grandes volumes de dados.
 8 Horas

Treinamento Corporativo Personalizado

Soluções de treinamento projetadas exclusivamente para empresas.

  • Conteúdo Personalizado: Adaptamos o programa e os exercícios práticos aos objetivos e necessidades reais do seu projeto.
  • Horário Flexível: Datas e horários adaptados à agenda da sua equipe.
  • Formato: Online (ao vivo), In-Company (em suas instalações) ou Híbrido.
Investimento

Preço por grupo privado, treinamento online ao vivo, a partir de 2600 € + VAT*

Entre em contato conosco para obter um orçamento preciso e conhecer nossas promoções mais recentes

Testemunhos de Clientes (3)

Próximas Formações Provisórias

Categorias Relacionadas