Programa do Curso

Introdução

  • O que é CUDA?
  • CUDA vs OpenCL vs SYCL
  • Visão geral dos recursos e da arquitetura CUDA
  • Configurando o ambiente de desenvolvimento

Primeiros passos

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

API CUDA

  • Entendendo a função da API CUDA no programa host
  • Usando a API CUDA para consultar informações e recursos do dispositivo
  • Usando a API CUDA para alocar e desalocar a memória do dispositivo
  • Usar a API CUDA para copiar dados entre o host e o dispositivo
  • Usar a API CUDA para iniciar kernels e sincronizar threads
  • Usando a API CUDA para tratar erros e exceções

CUDA C/C++

  • Entendendo o papel da CUDA C/C++ no programa do dispositivo
  • Usando CUDA C/C++ para escrever kernels que executam no GPU e manipulam dados
  • Usando tipos de dados, qualificadores, operadores e expressões CUDA C/C++
  • Utilizar funções incorporadas em CUDA C/C++, tais como math, atomic, warp, etc.
  • Usando variáveis incorporadas em CUDA C/C++, como threadIdx, blockIdx, blockDim, etc.
  • Uso de bibliotecas CUDA C/C++, como cuBLAS, cuFFT, cuRAND, etc.

Modelo de memória CUDA

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

Modelo de execução CUDA

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

Depuração

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

Otimização

  • Entendendo os fatores que afetam o desempenho dos programas CUDA
  • Usar técnicas de coalescência CUDA para melhorar a taxa de transferência de memória
  • Uso de técnicas de cache e pré-busca da CUDA para reduzir a latência da memória
  • Usando a memória compartilhada CUDA e técnicas de memória local para otimizar os acessos à memória e a largura de banda
  • Usando ferramentas de criação de perfil e perfilamento CUDA para medir e melhorar o tempo de execução e a utilização de recursos

Resumo e próximas etapas

Requisitos

  • Conhecimento da linguagem C/C++ e dos conceitos de programação paralela
  • Conhecimentos básicos 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 CUDA para programar NVIDIA GPUs 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 GPU e otimizar o desempenho do código
 28 horas

Número de participantes



Preço por participante

Declaração de Clientes (1)

Cursos Relacionados

GPU Programming - OpenCL vs CUDA vs ROCm

28 horas

Categorias Relacionadas