computação*heterogênea - cmsoft chapter - presentation...computação*heterogênea...
TRANSCRIPT
Computação Heterogênea Programação paralela, clusters e GPUs
Profa. Dra. Denise Stringhini (ICT-‐Unifesp)
Primeiro Encontro do Khronos Chapters Brasil Belo Horizonte, 20/09/2013
Conteúdo
• Computação heterogênea: moOvação • Processamento de alto desempenho • Arquiteturas heterogêneas • Arquitetura de GPU • Ferramentas de programação • Outros aceleradores
Computação heterogênea: moOvação
• Desempenho nos úlOmos 30 anos: – velocidade de clock – oOmização das instruções – níveis de cache – obtenção de desempenho: compilação
• Próximos 20 anos: – gerenciamento de energia – oOmização da movimentação de dados – computação heterogênea – obtenção de desempenho: paralelização do código
• uso de direOvas e bibliotecas, ferramentas de auto-‐tuning, etc
MoOvação
Borkar, S.; Chien, A. A. 2011. The future of microprocessors. Commun. ACM 54, 5 (May 2011)
Processamento de Alto Desempenho
• PAD ou HPC (High Performance Compu<ng). – A busca por alto desempenho fez com que as melhorias se expandissem para domínios externos aos de arquiteturas convencionais.
• Exemplo: máquinas mais rápidas do mundo (www.top500.org).
• São clusters onde cada nó é um SMP. • Os nós podem ser equipados com algum Opo de acelerador.
• Memória: – ComparOlhada em cada backend. – Distribuída entre os nós do cluster.
• Programação: MPI, OpenMP, CUDA, OpenCL, etc.
Clusters híbridos
Clusters híbrid
os
Clusters híbrid
os
Taxonomia de Sistemas Heterogêneos
• sistemas heterogêneos projetados por fabricantes específicos;
• clusters heterogêneos; • redes locais de computadores; • redes globais de computadores em um mesmo nível organizacional;
• redes globais de computadores de propósito geral.
Heterogeneous Compu<ng Jungle (HPCWire, março/2012)
Intel/AMD X86 host + NVIDIA GPU
s (x86+GPU)
AMD Opteron + AMD GPUs. AMD Opteron + AMD APU.
Intel Core + Intel Ivy Bridge integrated GPU.
Intel Core + Intel MIC
NVIDIA Denver: ARM + NVIDIA G
PU.
Texas Instruments: ARM + TI DSPs. Convey Intel x86 + FPGA-‐implemented reconfigurable vector unit
GP core + some other mulOcore or s
tream accelerators
GP core + FPGA fabric
IBM Power + Cell.
Exemplos de Aceleradores
• GPU (Graphics Processing Unit) – Nvidia, AMD – Intel Ivy Bridge (3ª. E 4ª. gerações Intel Core)
• Intel Xeon Phi Coprocessor
GPU
• Os principais fabricantes são a NVIDIA e a AMD. – Podem atuar em conjunto com CPUs Intel ou AMD.
• Paralelismo do Opo SIMD. • Programa principal executa na CPU (host) e é o responsável por iniciar as threads na GPU (device).
• Tem sua própria hierarquia de memória e os dados devem ser transferidos através de um barramento PCI express.
GPU
!
Nvidia: Arquitetura Kepler
• Versões mais completas trazem um conjunto de até 15 SMX com 192 núcleos cada. – 2880 cores
• Paralelismo dinâmico.
• Hyper-‐Q possibilita disparar kernels simultaneamente.
Ambientes de programação
!
OpenMP
• Padrão composto por: – conjunto de direOvas de programação – conjunto de funções de biblioteca – variáveis de ambiente – linguagens C/C++ e Fortran
Modelo de execução
• No início há uma única thread (master thread) que executa até encontrar a primeira região paralela (parallel region).
• Um fork acontece, fazendo com que um Rme de threads seja criado para executar a região paralela.
• Ao final, uma operação de join sincroniza e finaliza todas as threads e permite que apenas a mestre avance.
Modelo de execução
!
Exemplo
#pragma omp parallel for schedule(static, 2) num_threads(4)
CUDA
• Arquitetura de computação paralela de propósito geral da NVIDIA. - Modelo de programação paralela e um
conjunto de instruções. • Aplicações paralelas executadas em GPUs
CUDA
O modelo assume que suas threads são executadas em um dispositivo separado, uma GPU, que trabalha como coprocessador do host. O código principal é executado na CPU, e faz chamadas a funções que são executadas pela GPU
Função Kernel
• Threads executam o código definido em uma função kernel.
• Uma chamada a uma função kernel, dispara a execução de N instâncias paralelas por N threads CUDA.
Modelo de Programação
Um SM ou SMX executa um ou mais blocos de threads e os cores e outras unidades de execução no SMX executam as instruções da thread.
OpenCL
• A linguagem e seu sistema de tempo de execução servem como uma camada de abstração ao hardware heterogêneo.
• Um programa OpenCL tem o objeOvo de aproveitar todos os disposiOvos presentes na máquina.
OpenCL
• Uma aplicação OpenCL deve seguir os seguintes passos: – Descobrir os componentes heterogêneos; – Detectar suas caracterísOcas; – Criar os blocos de instruções (kernels) que irão executar na plataforma heterogênea;
– Iniciar e manipular objetos de memória; – Executar os kernels na ordem correta e nos disposiOvos adequados presentes no sistema;
– Coletar os resultados finais.
Modelo de plataforma
• É composto por um host e um ou mais disposiOvos OpenCL (OpenCL devices).
• Cada disposiOvo possui uma ou mais unidades de computação (compute units).
• Estes são compostos por um conjunto de elementos de processamento (processing elements).
Modelo de Plataforma
!
Modelo de Execução
• Uma aplicação OpenCL é composta por um programa host e um conjunto de kernels.
• O programa host executa no host (normalmente uma CPU) e os kernels executam nos disposiOvos disponíveis.
Itens de trabalho
• O programa host envia o comando de execução de um kernel para um disposiOvo.
• Isto faz com que várias instâncias da função que implementa o kernel sejam executadas. – Em OpenCL estas instâncias são chamadas de itens de trabalho (work-‐items)
– Correspondem às threads de CUDA.
Grupos de trabalho
• Os itens de trabalho são organizados em grupos de trabalho (work-‐groups).
• Estes oferecem uma maneira de estabelecer granularidades diferentes aos grupos de itens de trabalho, o que normalmente facilita a divisão de trabalho e a sincronização.
Contexto
• Define o ambiente de execução no qual os kernels são definidos e executam e é definido em termos dos seguintes recursos: – disposiOvos, – conjunto de kernels, – objetos de programa e – objetos de memória.
• Assim, um contexto é todo o conjunto de recursos que um kernel vai uOlizar durante sua execução.
Contexto
• O contexto é definido em tempo de execução pelo host de acordo com os disposiOvos disponíveis.
• Para possibilitar uma escolha dinâmica do disposiOvo o OpenCL compila os kernels dinamicamente, gerando os objetos de programa em tempo de execução.
Fila de comandos
• A interação entre o host e os disposiOvos é realizada através de uma fila de comandos (command-‐queue).
• Os comandos são colocados nesta fila e aguardam seu momento de executar.
• A fila é criada pelo host e conectada a um disposiOvo logo após a criação do contexto.
OpenACC
• Anunciado em novembro de 2011 na conferência SuperCompuOng.
• É um padrão para programação paralela. • O padrão tem como base o compilador PGI
(Portland Group)
OpenACC
• Descreve uma API de programação que fornece uma coleção de direRvas para especificar laços e regiões de código paralelizáveis que podem ter sua execução acelerada por disposiOvo tal como uma GPU.
OpenACC
• O modelo de execução do OpenACC tem três níveis: gang, worker e vector.
• Em GPU pode ser mapeado como: • gang → bloco
• worker → warp
• vector → threads em um warp
OpenACC
• As DireOvas em C/C++ são especificadas usando #pragma • Método especificado pelo C padrão para fornecer
informações adicionais ao compilador. • Mesmo uOlizado pelo OpenMP.
• Se o compilador não uOlizar pré-‐processamento, as anotações são ignoradas na compilação.
OpenACC
• Cada direOva em C/C++ inicia com – #pragma acc
• Os tokens seguintes são tratados por uma macro de pré-‐processamento que aplica as transformações necessárias ao bloco ou laço imediatamente seguinte.
Intel Xeon Phi • x86 SMP-‐on-‐a-‐chip • Linux • Cada placa tem o seu próprio endereço IP
% ssh mic0 • 64 bits, SIMD vetorial • Núcleos conectados em anel bidirecional de alta velocidade • Várias configurações
– > 50 núcleos – mulOthreading (4 hardware threads por núcleo)
• execução in-‐order • OpenMP, OpenCL, TBB, Cilk, MPI • Intel Language Extensions for Offload
Intel Xeon Phi
Intel Ivy Bridge
• Intel OpenCL SDK entre outros.
Recursos online
• openmp.org • www.nvidia.com – www.gputechconf.com – developer.nvidia.com
• www.khronos.org/opencl • www.openacc.org • www.hpcwire.com • souware.intel.com