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.
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