Programa do Curso

Introdução

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

Começando

  • Criando um novo projeto 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 OpenCL

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

OpenCL C

  • Compreendendo o papel do OpenCL C no programa do dispositivo
  • Usando OpenCL C para escrever kernels que executam no dispositivo e manipulam dados
  • Usando tipos de dados, qualificadores, operadores e expressões em OpenCL C
  • Usando funções internas 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 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 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 e gravação etc.
  • Usando o modelo de consistência da memória e mecanismos de sincronização do OpenCL

Modelo de Execução OpenCL

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

Depuração

  • Compreendendo 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 CodeXL para depurar e analisar programas OpenCL em dispositivos AMD
  • Usando Intel VTune para depurar e analisar programas OpenCL em dispositivos Intel
  • Usando 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 a através de operações aritméticas
  • Usando técnicas de desenrolamento e tiling de loops 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 ferramentas de perfil e perfil do OpenCL para medir e melhorar o tempo de execução e a utilização de recursos

Resumo e Próximos Passos

Requisitos

  • Conhecimento da linguagem C/C++ e 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 OpenCL para programar dispositivos heterogêneos e explorar sua paralelismo
  • Desenvolvedores que desejam escrever código portável e escalonável que possa ser executado em diferentes plataformas e dispositivos
  • Programadores que desejam explorar os aspectos de nível baixo da programação heterogênea e otimizar o desempenho do seu código
 28 Horas

Próximas Formações Provisórias

Categorias Relacionadas