Programa do Curso

Introdução

  • O que é OpenACC?
  • OpenACC vs OpenCL vs CUDA vs SYCL
  • Visão geral dos recursos e da arquitetura do OpenACC
  • Configurando o ambiente de desenvolvimento

Primeiros passos

  • Criando um novo projeto OpenACC usando Visual Studio Código
  • Explorando a estrutura e os arquivos do projeto
  • Compilando e executando o programa
  • Exibindo a saída usando printf e fprintf

Diretivas e cláusulas OpenACC

  • Compreender o papel das directivas e cláusulas OpenACC no código do anfitrião e do dispositivo
  • Usando a diretiva e as cláusulas paralelas do OpenACC para criar regiões paralelas e especificar o número de grupos, trabalhadores e vetores
  • Utilizar a diretiva e as cláusulas OpenACC kernels para criar regiões kernels e deixar o compilador decidir o paralelismo
  • Usando a diretiva e as cláusulas de loop do OpenACC para paralelizar loops e especificar a distribuição, o colapso, a redução e o tile do loop
  • Usando a diretiva e as cláusulas de dados OpenACC para gerenciar o movimento de dados e as regiões de dados
  • Utilizar a diretiva e as cláusulas de atualização OpenACC para sincronizar dados entre o anfitrião e o dispositivo
  • Utilização da diretiva e das cláusulas de cache OpenACC para melhorar a reutilização e a localidade dos dados
  • Utilização da diretiva e das cláusulas de rotina OpenACC para criar funções de dispositivo e especificar o tipo de função e o comprimento do vetor
  • Utilização da diretiva e cláusulas de espera OpenACC para sincronizar eventos e dependências

API OpenACC

  • Compreender o papel da API OpenACC no programa anfitrião
  • Usar a API OpenACC para consultar informações e capacidades do dispositivo
  • Usar a API OpenACC para definir o número e o tipo de dispositivo
  • Utilizar a API OpenACC para tratar erros e excepções
  • Utilização da API OpenACC para criar e sincronizar eventos

Bibliotecas OpenACC e interoperabilidade

  • Compreender o papel das bibliotecas OpenACC e das funcionalidades de interoperabilidade no programa do dispositivo
  • Utilizar as bibliotecas OpenACC, tais como math, random e complex, para efetuar tarefas e operações comuns
  • Usar os recursos de interoperabilidade do OpenACC, como deviceptr, use_device e acc_memcpy, para integrar o OpenACC a outros modelos de programação, como CUDA, OpenMP e MPI
  • Usando recursos de interoperabilidade do OpenACC, como host_data e declare, para integrar o OpenACC com bibliotecas GPU, como cuBLAS e cuFFT

Ferramentas OpenACC

  • Compreender o papel das ferramentas OpenACC no processo de desenvolvimento
  • Usar ferramentas OpenACC para criar perfis e depurar programas OpenACC e identificar gargalos e oportunidades de desempenho
  • Usar ferramentas OpenACC, como PGI Compiler, NVIDIA Nsight Systems e Allinea Forge, para medir e melhorar o tempo de execução e a utilização de recursos

Otimização

  • Compreender os factores que afectam o desempenho dos programas OpenACC
  • Utilizar directivas e cláusulas OpenACC para otimizar a localidade dos dados e reduzir as transferências de dados
  • Usar as diretivas e cláusulas do OpenACC para otimizar o paralelismo e a fusão de loop
  • Usando as diretivas e cláusulas do OpenACC para otimizar o paralelismo e a fusão do kernel
  • Usando as diretivas e cláusulas do OpenACC para otimizar a vetorização e o auto-tuning

Resumo e próximos passos

Requisitos

  • Conhecimento da linguagem C/C++ ou Fortran e dos conceitos de programação paralela
  • Conhecimento básico da arquitetura dos computadores e da hierarquia da memória
  • Experiência com ferramentas de linha de comando e editores de código

Público-alvo

  • Programadores que pretendam aprender a utilizar o OpenACC para programar dispositivos heterogéneos e explorar o seu paralelismo
  • Programadores que pretendam escrever código portátil e escalável que possa ser executado em diferentes plataformas e dispositivos
  • Programadores que desejam explorar os aspectos de alto nível da programação heterogénea e otimizar a produtividade 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