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 CUDA C++ com nvcc e CMake
- Verificação do ambiente de desenvolvimento de GPU
Algoritmos Paralelos com Thrust e CUB
- Ordenação, redução e transformação aceleradas por GPU
- Refatoração de algoritmos STL para execução em GPU
- Vetores de dispositivo (device vectors) do Thrust e políticas de execução
- Primitivos de abrangência total do CUB para pipelines personalizados
Arquitetura e Gerenciamento de Memória de GPU
- Tipos de memória global, constante e de textura
- Alocação explícita de memória de dispositivo e transferências
- Memória Unificada para acesso simplificado aos dados
- Coalescimento de memória e otimização de padrões de acesso
Execução Assíncrona com Fluxos CUDA
- Criação e gerenciamento de fluxos (streams) CUDA
- Sobreposição da execução de kernels com transferências de dados
- Eventos do CUDA para gerenciamento de dependências
- Prioridade de fluxos e ajuste de concorrência
Escrita de Kernels CUDA Personalizados
- O modelo de programação SIMT e execução por warps
- Configuração de lançamento de kernels e loops de passo da grade (grid-stride)
- Indexação de threads e grades multidimensionais
- Tratamento de erros e verificações da API de tempo de execução do CUDA
Hierarquia de Threads e Modelo de Execução
- Graus, blocos e threads no código do dispositivo
- Primitivos em nível de warp e operações de voto (ballot)
- Sincronização em nível de bloco e barreiras
- Análise de ocupância e utilização de recursos
Grupos Cooperativos para Paralelismo Flexível
- A API cooperative_groups e os tipos de grupo
- Tiles de blocos de threads e tiled_partition
- Lançamentos cooperativos em nível de grade (grid)
- Padrões de sincronização multi-grade (multi-grid)
Técnicas de Otimização com Memória Compartilhada
- Bancos de memória compartilhada e evitamento de conflitos de bancos
- Estratégias de tiling 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
- Fundir múltiplos kernels para reduzir a sobrecarga de lançamento
- Scan, redução por chave e algoritmos segmentados
- Operações atômicas e estruturas de dados sem bloqueio (lock-free)
- Atomics agregados por warp para melhorar a taxa de transferência
Perfiling e Otimização com Nsight Systems
- Análise da linha do tempo da atividade da CPU e GPU
- Identificação de gargalos na transferência de memória
- Perfiling de desempenho de kernels e ocupância
- Otimização iterativa com Nsight Compute
Recursos Modernos do C++ no Código CUDA do Dispositivo
- Lambdas, constexpr e auto em kernels
- Algoritmos paralelos do C++17 e políticas de execução
- Conceitos (concepts) e ranges do C++20 no dispositivo
- Suporte do C++23 no nvcc e CCCL 3.x
Grafos CUDA e Assincronia Avançada
- Definição e lançamento de grafos CUDA
- Captura de gráficos a partir da execução de fluxos
- 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
- Envolver o código GPU atrás de interfaces C++
- Gerenciar sistemas multi-GPU e NUMA
- Integração com sistema de compilação usando CMake e CUDA
- Depuração do 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
- Conhecimento básico de C++, incluindo expressões lambda, templates e a STL
- Familiaridade com algoritmos padrão, contêineres e iteradores
- Conforto com laços de repetição, condicionais e funções
- Não é necessário conhecimento prévio de CUDA ou programação para GPU
Público-Alvo
- Desenvolvedores C++ que buscam acelerar aplicativos intensivos em computação com GPUs
- Engenheiros de software migrando de programação exclusiva para CPU para programação paralela heterogênea
- Engenheiros de desempenho e desenvolvedores quantitativos que trabalham com grandes conjuntos de dados
Testemunhos de Clientes (3)
Explicação detalhada, reiteração dos pontos de uma maneira sutil que realmente consolidou o conhecimento muito bem. A disposição do Rod em revisar as perguntas mais obscuras que levantamos, para garantir que suas respostas fossem 100% corretas. Além disso, seu interesse em discutir os prós e contras de estilos de codificação alternativos, para que aprendêssemos não apenas como usar o C++ da maneira pretendida, mas também por quê.
Nick Dillon - cellxica Ltd
Curso - Using C++ in Embedded Systems - Applying C++11/C++14
Máquina Traduzida
A experiência de compartilhar, o conhecimento do professor e valioso.
Carey Fan - Logitech
Curso - C/C++ Secure Coding
Máquina Traduzida
O fato de ser online nos permitiu economizar muito tempo. Muito apreciado. Além disso, o treinador conhecer tanto C# quanto C++ foi uma grande ajuda, pois ele podia explicar tudo a partir do conhecimento que já tínhamos.
Gabor - Rheinmetall Electronics Hungary Kft
Curso - Advanced C++
Máquina Traduzida