Entrar em Contato

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

Número de participantes


Preço por participante

Próximas Formações Provisórias

Categorias Relacionadas