Entrar em Contato
 Duração 28 horas

Programa do Curso

Introdução

  • O que é o CUDA?
  • CUDA vs OpenCL vs SYCL
  • Visão geral dos recursos e da arquitetura do CUDA
  • Configuração do Ambiente de Desenvolvimento

Primeiros Passos

  • Criando um novo projeto CUDA usando o Visual Studio Code
  • Explorando a estrutura e os arquivos do projeto
  • Compilando e executando o programa
  • Exibindo a saída usando printf e fprintf

API do CUDA

  • Entendendo o papel da API do CUDA no programa do host
  • Usando a API do CUDA para consultar informações e capacidades do dispositivo
  • Usando a API do CUDA para alocar e desalocar memória do dispositivo
  • Usando a API do CUDA para copiar dados entre o host e o dispositivo
  • Usando a API do CUDA para iniciar kernels e sincronizar threads
  • Usando a API do CUDA para lidar com erros e exceções

CUDA C/C++

  • Entendendo o papel do CUDA C/C++ no programa do dispositivo
  • Usando o CUDA C/C++ para escrever kernels que executam na GPU e manipulam dados
  • Usando tipos de dados, qualificadores, operadores e expressões do CUDA C/C++
  • Usando funções integradas do CUDA C/C++, como matemáticas, atômicas, warp, etc.
  • Usando variáveis integradas do CUDA C/C++, como threadIdx, blockIdx, blockDim, etc.
  • Usando bibliotecas do CUDA C/C++, como cuBLAS, cuFFT, cuRAND, etc.

Modelo de Memória do CUDA

  • Entendendo a diferença entre os modelos de memória do host e do dispositivo
  • Usando espaços de memória do CUDA, como global, compartilhada, constante e local
  • Usando objetos de memória do CUDA, como ponteiros, arrays, texturas e superfícies
  • Usando modos de acesso à memória do CUDA, como somente leitura, somente gravação, leitura e gravação, etc.
  • Usando o modelo de consistência de memória e os mecanismos de sincronização do CUDA

Modelo de Execução do CUDA

  • Entendendo a diferença entre os modelos de execução do host e do dispositivo
  • Usando threads, blocos e grades do CUDA para definir o paralelismo
  • Usando funções de thread do CUDA, como threadIdx, blockIdx, blockDim, etc.
  • Usando funções de bloco do CUDA, como __syncthreads, __threadfence_block, etc.
  • Usando funções de grade do CUDA, como gridDim, gridSync, cooperative groups, etc.

Depuração

  • Entendendo erros e bugs comuns em programas CUDA
  • Usando o depurador do Visual Studio Code para inspecionar variáveis, pontos de interrupção, pilha de chamadas, etc.
  • Usando o CUDA-GDB para depurar programas CUDA no Linux
  • Usando o CUDA-MEMCHECK para detectar erros de memória e vazamentos
  • Usando o NVIDIA Nsight para depurar e analisar programas CUDA no Windows

Otimização

  • Entendendo os fatores que afetam o desempenho de programas CUDA
  • Usando técnicas de coalescing do CUDA para melhorar o throughput de memória
  • Usando técnicas de caching e prefetching do CUDA para reduzir a latência de memória
  • Usando técnicas de memória compartilhada e local do CUDA para otimizar acessos à memória e largura de banda
  • Usando profiling e ferramentas de profiling do CUDA para medir e melhorar o tempo de execução e a utilização de recursos

Requisitos

  • Compreensão da linguagem C/C++ e dos 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 NVIDIA e aproveitar 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

Número de participantes


Preço por participante

Próximas Formações Provisórias

Categorias Relacionadas