Obrigado por enviar sua consulta! Um dos membros da nossa equipe entrará em contato com você em breve.
Obrigado por enviar sua reserva! Um dos membros da nossa equipe entrará em contato com você em breve.
Programa do Curso
Introdução
- O que é o CUDA?
- CUDA vs OpenCL vs SYCL
- Visão geral das características e arquitetura do CUDA
- Configuração do Ambiente de Desenvolvimento
Primeiros Passos
- Criação de um novo projeto CUDA usando o Visual Studio Code
- Exploração da estrutura e dos arquivos do projeto
- Compilação e execução do programa
- Exibição da saída usando printf e fprintf
API CUDA
- Compreensão do papel da API CUDA no programa host
- Uso da API CUDA para consultar informações e capacidades do dispositivo
- Uso da API CUDA para alocar e liberar memória do dispositivo
- Uso da API CUDA para copiar dados entre o host e o dispositivo
- Uso da API CUDA para lançar kernels e sincronizar threads
- Uso da API CUDA para lidar com erros e exceções
CUDA C/C++
- Compreensão do papel do CUDA C/C++ no programa de dispositivo
- Uso do CUDA C/C++ para escrever kernels que são executados na GPU e manipulam dados
- Uso dos tipos de dados, qualificadores, operadores e expressões do CUDA C/C++
- Uso das funções embutidas do CUDA C/C++, como math, atomic, warp, etc.
- Uso das variáveis embutidas do CUDA C/C++, como threadIdx, blockIdx, blockDim, etc.
- Uso das bibliotecas do CUDA C/C++, como cuBLAS, cuFFT, cuRAND, etc.
Modelo de Memória do CUDA
- Compreensão da diferença entre os modelos de memória do host e do dispositivo
- Uso dos espaços de memória do CUDA, como global, compartilhado, constante e local
- Uso dos objetos de memória do CUDA, como ponteiros, arrays, texturas e superfícies
- Uso dos modos de acesso à memória do CUDA, como read-only, write-only, read-write, etc.
- Uso do modelo de consistência de memória do CUDA e mecanismos de sincronização
Modelo de Execução do CUDA
- Compreensão da diferença entre os modelos de execução do host e do dispositivo
- Uso das threads, blocos e grades do CUDA para definir o paralelismo
- Uso das funções de thread do CUDA, como threadIdx, blockIdx, blockDim, etc.
- Uso das funções de bloco do CUDA, como __syncthreads, __threadfence_block, etc.
- Uso das funções de grade do CUDA, como gridDim, gridSync, cooperative groups, etc.
Depuração
- Compreensão dos erros e bugs comuns em programas CUDA
- Uso do depurador do Visual Studio Code para inspecionar variáveis, pontos de interrupção (breakpoints), pilha de chamadas, etc.
- Uso do CUDA-GDB para depurar programas CUDA no Linux
- Uso do CUDA-MEMCHECK para detectar erros e vazamentos de memória
- Uso do NVIDIA Nsight para depurar e analisar programas CUDA no Windows
Otimização
- Compreensão dos fatores que afetam o desempenho dos programas CUDA
- Uso das técnicas de mesclagem (coalescing) do CUDA para melhorar a largura de banda da memória
- Uso das técnicas de cache e prebusca (prefetching) do CUDA para reduzir a latência da memória
- Uso das técnicas de memória compartilhada e local do CUDA para otimizar os acessos à memória e a largura de banda
- Uso do profiling e das ferramentas de profiling do CUDA para medir e melhorar o tempo de execução e a utilização de recursos
Resumo e Próximos Passos
Requisitos
- Compreensão da linguagem C/C++ e conceitos de programação paralela
- Conhecimento básico de arquitetura de computadores e hierarquia de memória
- Experiência com ferramentas de linha de comando e editores de código
Público-Alvo
- Desenvolvedores que desejam aprender a usar o CUDA para programar GPUs da NVIDIA e explorar seu paralelismo
- Desenvolvedores que desejam escrever código de alto desempenho e escalável que possa ser executado em diferentes dispositivos CUDA
- Programadores que desejam explorar os aspectos de baixo nível da programação de GPU e otimizar o desempenho de seu código
28 Horas