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).
Clusters híbridos 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íbridos
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 GPUs (x86+gpu) Intel Core + Intel Ivy Bridge integrated GPU. AMD Opteron + AMD GPUs. Intel Core + Intel MIC AMD Opteron + AMD APU. NVIDIA Denver: ARM + NVIDIA GPU. Convey Intel x86 + FPGA- implemented reconfigurable vector unit Texas Instruments: ARM + TI DSPs. GP core + some other mulocore or stream 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