Guia de Programação CUDA
O recurso oficial e abrangente para desenvolvedores aprenderem o modelo de programação CUDA e como escrever código de alto desempenho que execute em GPUs da NVIDIA. Este guia abrange a arquitetura da plataforma, a interface de programação, recursos avançados de hardware e especificações técnicas.
Aulas
Visão Geral do Curso
📚 Resumo do Conteúdo
O recurso oficial e abrangente para desenvolvedores aprenderem o modelo de programação CUDA e como escrever código de alto desempenho que execute em GPUs da NVIDIA. Este guia abrange a arquitetura da plataforma, a interface de programação, recursos avançados de hardware e especificações técnicas.
Domine a arte do cálculo paralelo com o guia padrão da indústria para o NVIDIA CUDA.
Autor: NVIDIA Corporation
Agradecimentos: Copyright © 2007-2024 NVIDIA Corporation & afiliadas. Todos os direitos reservados.
🎯 Objetivos de Aprendizagem
- Definir os papéis do host (CPU) e do dispositivo (GPU) em um sistema heterogêneo.
- Explicar o modelo de programação SIMT e a organização hierárquica de threads, blocos e grids.
- Diferenciar entre PTX (Parallel Thread Execution) e código binário (cubins) e explicar como a compilação Just-in-Time (JIT) facilita a compatibilidade.
- Desenvolver e Compilar Kernels CUDA: escrever funções global, configurar execução com notação de triplas setas e gerenciar o fluxo de compilação NVCC.
- Otimizar Memória e Movimentação de Dados: distinguir entre modelos de memória Unificada, Explícita e Mapeada, e implementar memória host bloqueada por página para transferências eficientes.
- Gerenciar Execução Paralela: utilizar Streams CUDA, Events e Grupos Cooperativos para gerenciar tarefas assíncronas e sincronizar operações CPU-GPU.
- Realizar aritmética de ponteiros complexa e identificar gargalos arquitetônicos (von Neumann vs. Harvard).
- Implementar padrões avançados de execução CUDA, incluindo Lançamentos Dependentes Programáticos de Kernels e Transferências de Memória em Lotes Heterogêneas.
- Utilizar recursos específicos de hardware como Escopos de Thread, Proxies Assíncronos e Pipelines para maximizar a concorrência.
- Configurar e otimizar o desempenho da Memória Unificada usando pré-carregamento, dicas de uso e gerenciamento de tamanho de página.
🔹 Aula 1: Fundamentos do CUDA e Visão Geral Arquitetônica
Visão Geral: Esta aula apresenta a plataforma de computação paralela CUDA e sua arquitetura de hardware subjacente. Explora como sistemas heterogêneos utilizam tanto CPUs quanto GPUs, o modelo de programação SIMT (Single Instruction, Multiple Threads) e a hierarquia de threads, blocos e grids. Além disso, aborda o fluxo de compilação CUDA, incluindo os papéis de PTX, cubins e fatbins na garantia de compatibilidade binária e futura.
Resultados de Aprendizagem:
- Definir os papéis do host (CPU) e do dispositivo (GPU) em um sistema heterogêneo.
- Explicar o modelo de programação SIMT e a organização hierárquica de threads, blocos e grids.
- Diferenciar entre PTX (Parallel Thread Execution) e código binário (cubins) e explicar como a compilação Just-in-Time (JIT) facilita a compatibilidade.
🔹 Aula 2: Programação Básica de GPU e Gestão de Execução
Visão Geral: Esta aula cobre aspectos fundamentais e avançados da programação de GPU usando CUDA C++. Passa da especificação básica de kernels e do fluxo de compilação NVCC para tópicos avançados de gestão de execução, incluindo design de kernels SIMT, conflitos de bancos de memória compartilhada e execução assíncrona usando streams e eventos. Os alunos aprenderão a equilibrar modelos de memória (Unificada vs. Explícita) e otimizar a ocupação de hardware para computação de alto desempenho.
Resultados de Aprendizagem:
- Desenvolver e Compilar Kernels CUDA: escrever funções global, configurar execução com notação de triplas setas e gerenciar o fluxo de compilação NVCC.
- Otimizar Memória e Movimentação de Dados: distinguir entre modelos de memória Unificada, Explícita e Mapeada, e implementar memória host bloqueada por página para transferências eficientes.
- Gerenciar Execução Paralela: utilizar Streams CUDA, Events e Grupos Cooperativos para gerenciar tarefas assíncronas e sincronizar operações CPU-GPU.
🔹 Aula 3: Lógica Avançada de Memória e Sistemas Multi-GPU
Visão Geral: Esta aula explora a transição dos fundamentos das arquiteturas de memória e lógica de ponteiros para técnicas avançadas de aceleração de GPU. Aborda modelos de execução em nível de hardware (SIMT, Escalonamento Independente de Threads), mecanismos de sincronização sofisticados (Barreiras Assíncronas, Atômicas com Escopo) e a orquestração de sistemas multi-GPU usando APIs Runtime e Driver.
Resultados de Aprendizagem:
- Realizar aritmética de ponteiros complexa e identificar gargalos arquitetônicos (von Neumann vs. Harvard).
- Implementar padrões avançados de execução CUDA, incluindo Lançamentos Dependentes Programáticos de Kernels e Transferências de Memória em Lotes Heterogêneas.
- Utilizar recursos específicos de hardware como Escopos de Thread, Proxies Assíncronos e Pipelines para maximizar a concorrência.
🔹 Aula 4: Otimização, Gráficos e Aceleradores de Hardware
Visão Geral: Esta aula aborda técnicas avançadas de programação CUDA de alto desempenho, focando na otimização do movimento de dados e do fluxo de execução. Explora a transição da execução baseada em streams para Gráficos CUDA persistentes, o controle granular da Memória Unificada por meio de pré-carregamento e dicas, e a utilização de aceleradores de hardware específicos como o Tensor Memory Accelerator (TMA) e a persistência do cache L2. Além disso, detalha padrões avançados de sincronização, partição de recursos via Green Contexts e interoperabilidade entre APIs para computação heterogênea moderna.
Resultados de Aprendizagem:
- Configurar e otimizar o desempenho da Memória Unificada usando pré-carregamento, dicas de uso e gerenciamento de tamanho de página.
- Construir, atualizar e executar Gráficos CUDA, incluindo o uso de nós de memória e lançamentos no dispositivo.
- Implementar sincronização avançada usando Barreiras Assíncronas e o padrão Produtor-Consumidor.
🔹 Aula 5: Referência Técnica e Extensões da Linguagem
Visão Geral: Esta aula oferece uma análise técnica profunda nas especificações de referência do modelo de programação CUDA e nas extensões da linguagem C++. Cobertura inclui a interface hardware-software por meio de capacidades de computação, variáveis de ambiente para controle de tempo de execução e os requisitos específicos de sintaxe para escrever código de dispositivo de alto desempenho usando padrões modernos de C++, grupos cooperativos e intrínsecos especializados de hardware.
Resultados de Aprendizagem:
- Identificar restrições de hardware e conjuntos de funcionalidades com base nas versões de Compute Capability da GPU.
- Configurar o ambiente de execução CUDA e a compilação JIT usando variáveis de ambiente de nível de sistema.
- Aplicar extensões da linguagem C++ (anotações, lambdas e templates) respeitando as restrições do lado do dispositivo.