Programa do Curso

Introdução

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

Iniciando

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

Linguagem C do OpenCL

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

Modelo de Memória do OpenCL

  • Compreendendo a diferença entre os modelos de memória host e dispositivo
  • Usando espaços de memória do OpenCL, como global, local, constante e privada
  • 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 host e 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 em OpenCL em dispositivos AMD
  • Usando o Intel VTune para depurar e analisar programas em OpenCL em dispositivos Intel
  • Usando o NVIDIA Nsight para depurar e analisar programas em OpenCL em dispositivos NVIDIA

Otimização

  • Compreendendo os fatores que afetam o desempenho dos programas em OpenCL
  • Usando tipos de dados vetoriais e técnicas de vetorização do OpenCL para melhorar a throughput aritmética
  • Usando técnicas de desenrolamento de laços e tiling do OpenCL para reduzir a 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

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 código
 28 Horas

Número de participantes


Preço por Participante

Próximas Formações Provisórias

Categorias Relacionadas