Arquiteturas para Processamento de Alto Desempenho (PAD) Aula 9 Celso L. Mendes LAC /INPE Email: celso.mendes@inpe.br
Aula 9 (3/5): E. Aceleradores Estrutura Planejada i. Estruturas mais Populares ii. Programação em Aceleradores 2
Aceleradores Objetivo Complementar CPU de propósito geral com maior capacidade de cálculos numéricos Longo histórico Co-processadores aritméticos, DSPs, etc. Esquema predominante CPU é usada para programação, coordenação da execução Acelerador opera sobre partes críticas da tarefa Tipos de aceleradores: vários! 3
Sistemas com Aceleradores Estrutura Típica: 4
Aceleradores (1): GPU Graphics Processing Unit Inicialmente criada para processor exclusivamente gráficos Mercados de massa: placas de video de PCs, consoles de jogos Preço accessível, devido à economia de escala Difícil programação, tarefa para especialistas Primeiros modelos: ponto-flutuante em precisão simples GPGPU: General Purpose GPUs Possibilidade de uso em aplicações de PAD Ponto-flutuante em precisão dupla Esforço para facilitar as técnicas de programação 5
GPU (cont.) GPU Exemplo: Nvidia K40 Mais de 7.1 bilhões de transistores Relógio: 745 MHz 15 processadores SMX, 192 núcleos/processador 2880 núcleos no total Threads são agrupados em conjuntos de 32 (warp) Desempenho: mais que 1 Tflops efetivos, em precisão dupla 80% do desempenho de pico 6 canais de acesso à memória de 64 bits cada Hierarquia de memória cache L1: em cada processador SMX cache L2: compartilhada memória principal (externa) DRAM, com ECC opcional 6
GPU (cont.) Nvidia K40 Diagrama de Blocos: Processador SMX (15) Cache L2 Cache L1 fonte: Nvidia Control.Memória (6) 7
Nvidia K40 Proc. SMX GPU (cont.) Núcleos (192) fonte: Nvidia Cache L1 8
Aceleradores (2): Proc. Many-Core Extensão de multi-core Princípios Conjunto de núcleos simples, na mesma pastilha Comunicação entre núcleos é interna (rápida) Número de núcleos bem mais alto que o usual Exemplo: Intel MIC Many-Integrated-Cores (Xeon-Phi) Protótipo: Knights Ferry: 32 núcleos x86/pentium 1 a geração: Knights Corner: ~60 núcleos+vector Unit, Tianhe-2 2 a geração: Knights Landing: 72 núcleos, func. autônomo 3 a geração: Knights Hill:??? 9
Processador Many-Core (cont.) Intel Xeon-Phi 1a Geração fonte: Intel 10
Processador Many-Core (cont.) Intel Xeon-Phi Arquitetura Interna fonte: Intel 11
Programação de Aceleradores ManyCore - Intel Xeon-Phi: Em cada CPU: código x86 + instruções vetoriais Em cada chip: OenMP para os vários núcleos -- até 244 threads! Múltiplos chips: MPI (combinado com OpenMP em cada chip) GPU: duas alternativas concretas a. Diretivas OpenACC, OpenMP b. Linguagens OpenCL, CUDA (para GPUs da Nvidia) CUDA: extensão de C, com duas modificações 1. Declaração de funções (kernels) para a GPU: global mykernel 2. Invocação de kernels: mykernel<<<val1,val2>>>(args) 12
Exemplo com CUDA roda na GPU roda na CPU 4 blocos, 2 threads/bloco 13
Exemplo com CUDA (cont.) Compilação/link: nvcc o prog prog.cu Execução: No inicio do Programa Principal Dentro do Kernel, valor= 9 coords=1,0 Dentro do Kernel, valor=10 coords=1,1 Dentro do Kernel, valor=18 coords=2,0 Dentro do Kernel, valor=19 coords=2,1 Dentro do Kernel, valor=27 coords=3,0 Dentro do Kernel, valor=28 coords=3,1 Dentro do Kernel, valor= 0 coords=0,0 Dentro do Kernel, valor= 1 coords=0,1 No final do Programa Principal 14