Entrar em Contato

Programa do Curso

Introdução

  • O que é o OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Visão geral das características e arquitetura do OpenCL
  • Configuração do Ambiente de Desenvolvimento

Começando a Trabalhar

  • Criando um novo projeto OpenCL 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 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, escrita, cópia, mapeamento, desmapeamento, execução e espera
  • Usando a API do OpenCL para tratar erros e exceções

C do OpenCL

  • Compreendendo o papel do C do OpenCL no programa de dispositivo
  • Usando o C do OpenCL para escrever kernels que são executados no dispositivo e manipulam dados
  • Usando tipos de dados, qualificadores, operadores e expressões do C do OpenCL
  • Usando funções internas do C do OpenCL, como matemáticas, geométricas, relacionais, etc.
  • Usando extensões e bibliotecas do C do OpenCL, como atômicas, de imagem, cl_khr_fp16, etc.

Modelo de Memória do OpenCL

  • Compreendendo a diferença entre os modelos de memória do host e do 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 escrita, leitura-escrita, 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 do host e do dispositivo
  • Usando work-items, work-groups e ND-ranges do OpenCL para definir o paralelismo
  • Usando funções de work-item do OpenCL, como get_global_id, get_local_id, get_group_id, etc.
  • Usando funções de work-group 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 do 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 do OpenCL em dispositivos AMD
  • Usando o Intel VTune para depurar e analisar programas do OpenCL em dispositivos Intel
  • Usando o NVIDIA Nsight para depurar e analisar programas do OpenCL em dispositivos NVIDIA

Otimização

  • Compreendendo os fatores que afetam o desempenho dos programas do OpenCL
  • Usando tipos de dados vetoriais e técnicas de vetorização do OpenCL para melhorar a taxa de transferência aritmética
  • Usando técnicas de desvio de loops (loop unrolling) e agrupamento de loops (loop tiling) do OpenCL para reduzir a sobrecarga de controle e aumentar a localidade
  • Usando memória local e funções de memória local do OpenCL para otimizar os acessos à memória e a largura de banda
  • Usando profiling e ferramentas de perfilamento do OpenCL 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 OpenCL para programar dispositivos heterogêneos e explorar seu paralelismo
  • Desenvolvedores que desejam escrever código portátil 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 do seu código
 28 Horas

Número de participantes


Preço por participante

Próximas Formações Provisórias

Categorias Relacionadas