Entrar em Contato
 Duração 28 horas

Programa do Curso

Introdução

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

Primeiros Passos

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

API do OpenCL

  • Compreendendo o papel da API do OpenCL no programa host
  • Usando a API do OpenCL para consultar informações e capacidades do dispositivo
  • Usando a API do OpenCL para criar contextos, filas de comandos, buffers, kernels e eventos
  • Usando a API do OpenCL para enfileirar comandos, como leitura, gravação, cópia, mapeamento, desmapeamento, execução e espera
  • Usando a API do OpenCL para lidar com erros e exceções

OpenCL C

  • Compreendendo o papel do OpenCL C no programa do dispositivo
  • Usando o OpenCL C para escrever kernels que executam no dispositivo e manipulam dados
  • Usando tipos de dados, qualificadores, operadores e expressões do OpenCL C
  • Usando funções integradas do OpenCL C, como matemáticas, geométricas, relacionais, etc.
  • Usando extensões e bibliotecas do OpenCL C, como atomic, image, cl_khr_fp16, etc.

Modelo de Memória do OpenCL

  • Compreendendo a diferença entre os modelos de memória de host e dispositivo
  • Usando espaços de memória do OpenCL, como global, local, constante e privado
  • Usando objetos de memória do OpenCL, como buffers, imagens e pipes
  • Usando modos de acesso à memória do OpenCL, como somente leitura, somente gravação, leitura e gravação, etc.
  • Usando o modelo de consistência de memória e mecanismos de sincronização do OpenCL

Modelo de Execução do OpenCL

  • Compreendendo a diferença entre os modelos de execução de host e dispositivo
  • Usando itens de trabalho, grupos de trabalho e intervalos ND do OpenCL para definir o paralelismo
  • Usando funções de item de trabalho do OpenCL, como get_global_id, get_local_id, get_group_id, etc.
  • Usando funções de grupo de trabalho do OpenCL, como barrier, work_group_reduce, work_group_scan, etc.
  • Usando funções de dispositivo do OpenCL, como get_num_groups, get_global_size, get_local_size, etc.

Depuração

  • Compreendendo os erros e bugs comuns em programas OpenCL
  • Usando o depurador do Visual Studio Code para inspecionar variáveis, pontos de interrupção, pilha de chamadas, etc.
  • Usando o CodeXL para depurar e analisar programas OpenCL em dispositivos AMD
  • Usando o Intel VTune para depurar e analisar programas OpenCL em dispositivos Intel
  • Usando o NVIDIA Nsight para depurar e analisar programas OpenCL em dispositivos NVIDIA

Otimização

  • Compreendendo os fatores que afetam o desempenho dos programas OpenCL
  • Usando tipos de dados vetoriais e técnicas de vetorização do OpenCL para melhorar o throughput aritmético
  • Usando técnicas de desdobramento de laços e blocos de laços (loop tiling) do OpenCL para reduzir o overhead de controle e aumentar a localidade
  • Usando memória local e funções de memória local do OpenCL para otimizar acessos à memória e largura de banda
  • Usando profiling e ferramentas de profiling do OpenCL 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 OpenCL para programar dispositivos heterogêneos e explorar seu paralelismo
  • Desenvolvedores que desejam escrever código portável e escalável que possa ser executado em diferentes plataformas e dispositivos
  • Programadores que desejam explorar os aspectos de baixo nível da programação heterogênea e otimizar o desempenho de seu código

Número de participantes


Preço por participante

Próximas Formações Provisórias

Categorias Relacionadas