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.
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.
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)
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