Obrigado por enviar sua consulta! Um dos membros da nossa equipe entrará em contato com você em breve.
Obrigado por enviar sua reserva! Um dos membros da nossa equipe entrará em contato com você em breve.
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