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