Programa do Curso

Introdução

  • O que é OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Visão geral das características e da arquitetura do OpenCL
  • Configurando o ambiente de desenvolvimento

Primeiros passos

  • Criando um novo projeto OpenCL usando o código Visual Studio
  • Explorando a estrutura e os arquivos do projeto
  • Compilação e execução do programa
  • Exibindo a saída usando printf e fprintf

API OpenCL

  • Entendendo o papel da API OpenCL no programa 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
  • Utilizar a API OpenCL para colocar comandos em fila de espera, como ler, escrever, copiar, mapear, desmapear, executar e esperar
  • Utilização da API OpenCL para tratar erros e excepções

OpenCL C

  • Compreender o papel do OpenCL C no programa do dispositivo
  • Usar OpenCL C para escrever kernels que executam no dispositivo e manipulam dados
  • Usar tipos de dados, qualificadores, operadores e expressões do OpenCL C
  • Utilizar funções incorporadas em OpenCL C, como matemáticas, geométricas, relacionais, etc.
  • Utilizando OpenCL extensões e bibliotecas C, tais como atómica, imagem, cl_khr_fp16, etc.

OpenCL Modelo de memória

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

Modelo de execução OpenCL

  • Entendendo a diferença entre os modelos de execução do host e do dispositivo
  • Utilização de OpenCL work-items, work-groups e ND-ranges para definir o paralelismo
  • Utilização de funções de work-item OpenCL, tais como get_global_id, get_local_id, get_group_id, etc.
  • Utilização de OpenCL funções de grupo de trabalho, tais como barrier, work_group_reduce, work_group_scan, etc.
  • Utilização de funções de dispositivo OpenCL, como get_num_groups, get_global_size, get_local_size, etc.

Depuração

  • Compreender os erros e bugs comuns em programas OpenCL
  • Utilizar o Visual Studio Code debugger para inspecionar variáveis, pontos de interrupção, pilha de chamadas, etc.
  • Utilização do 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

  • Entendendo os fatores que afetam o desempenho dos programas OpenCL
  • Usar tipos de dados vetoriais OpenCL e técnicas de vetorização para melhorar o rendimento aritmético
  • Usar técnicas de desenrolamento e de ladrilhamento de loops OpenCL para reduzir a sobrecarga de controlo e aumentar a localidade
  • Utilização de OpenCL memória local e funções de memória local para otimizar os acessos à memória e a largura de banda
  • Usando OpenCL ferramentas de criação de perfil e de criação de perfil 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 dos 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

  • Programadores que pretendam aprender a utilizar OpenCL para programar dispositivos heterogéneos e explorar o seu paralelismo
  • Programadores 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

Declaração de Clientes (1)

Cursos Relacionados

GPU Programming - OpenCL vs CUDA vs ROCm

28 horas

Categorias Relacionadas