UCE- Computação Paralela e Distribuída Paradigmas de Computação João Luís Ferreira Sobral www.di.uminho.pt/~jls jls@... http://alba.di.uminho.pt/... 1
Paradigmas de Computação Paralela Resultados da Aprendizagem! Conceber, implementar e optimizar aplicações que executem de forma eficiente numa gama alargada de arquitecturas: multi-processador (multi-core e multi-thread) e/ou arquitecturas distribuídas (clusters) Programa (resumido)! Arquitectura dos sistemas de computação " sistemas de memória partilhada e sistemas de memória distribuída.! Modelos de programação paralela e linguagens " processos comunicantes, objectos distribuídos " distribuição de componentes pelos recursos computacionais " mecanismos de especificação de concorrência/paralelismo! Projecto de aplicações paralelas " algoritmos paralelos típicos: pipelining, farming, heartbeat e divide & conquer " gestão eficiente da distribuição de componentes; medição, análise e optimização do desempenho " relação custo/benefício de concorrência/paralelismo e sua quantificação (métricas); " adaptação da granularidade da computação/comunicação; " estratégias de distribuição da carga de dados/computação/comunicação.! Análise de ambientes comerciais/tecnologias 2
Paradigmas de Computação Paralela Avaliação! Um trabalho prático (desenvolvimento aplicação para um ambiente de cluster) Pré-requesitos! Conhecimentos de Java e de C /SCD Bibliografia (Base)! Acetatos! M. Quinn. Parallel programming in C with C and OpenMP, McGraw Hill, 2003! I. Foster. Designing and Building Parallel Programs, Addison-Wesley, 1995.! D. Lea. Concurrent Programming in Java: Design Principles and Patterns, Addison Wesley, 2000. Bibliografia (Adicional)! R. Gerber, A. Binstock. Programming with Hyper-Threading Technology, Intel Press, 2004.! F. Buschmann, D. Schmidt, M. Stal, H. Rohnert, Pattern-oriented Software Architecture Vol 2: Patterns for Concurrent and Networked Objects, John Wiley and Sons Ltd, 2000.! T. Christopher, G. Thiruvathukal, High-performance Java platform computing, Prentice Hall, 2000. 3
Paradigmas de Computação Paralela Escalonamento 1. Inrodução à computação paralela (arquitecturas) 2. Programação de sistemas multicore: OpenMP 3. Programação de sistemas multicore: Concorrência (Java) 4. Programação de sistemas multicore: modelos de consistência de memória 5. Sistemas de memória distribuída: Modelos de progamação 6. Sistemas de memória distribuída: MPI 7. Sistemas de memória distribuída: Sistemas de objectos ditribuídos 8. Projecto de aplicações paralelas 9. Medição e optimisação de desenepenho 10. Caso de estudo: simulações de dinâmica molecular 11. Palestra: Parallel programming by refinement 12. Palestra: TBA 4
Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída) Arquiteturas Paralelas João Luís Ferreira Sobral jls@... 1-Março-2011
Paradigmas de Computação Paralela Futuro da arquitectura de computadores Microprogramação Pipelining Superescalaridade Caches Timeshared Memória Virtual RISC VLIW (EPIC) CC-UMA CC-NUMA Not-CC-NUMA Passagem de Mensagens GRID/Internet SIMD Evolução ILP Multithreading Processos comunicantes Revolução Os processadores exploram paralelismo ao nível da instrução de forma transparente Uma revolução obriga à alteração da forma de pensar dos programadores A ênfase de computação paralela é na programação deste tipo de arquitecturas 2
Paradigmas de Computação Paralela Memória partilhada centralizada (CC-UMA, CC-NUMA) Vários processadores partilham um barramento de acesso à memória As caches de cada processador contribuem para reduzir o tráfego no barramento e a latência dos acessos à memória Um valor pode estar replicado em vários sítios => são necessários mecanismos para assegurar a coesão entre as caches dos vários processadores e a memória A largura de banda de acesso à memória é partilhada pelos vários processadores => limitação à escalabilidade deste tipo de arquitetura: P r o c e s s o r P r o c e s s o r P r o c e s s o r C a c h e C a c h e C a c h e S i n g l e b u s M e m o r y I / O 3
Arquitecturas Multi-core Memória distribuída processadores conectados por uma rede de interligação (CC- NUMA, passagem de mensagens) Os sistemas interligados por um barramento tendem a limitar o número de processadores que efectivamente podem ser ligados A alternativa reside na utilização de uma rede dedicada à interligação dos vários processadores, possuindo cada processador a sua memória dedicada P r o c e s s o r P r o c e s s o r P r o c e s s o r C a c h e C a c h e C a c h e M e m o r y M e m o r y M e m o r y N e t w o r k
Paradigmas de Computação Paralela Endereços partilhados sobre memória distribuída Implementação mais simples => não fornecer HW para suporte a coesão de cache a cache não é utilizada em a endereços acessos remotos Serviço de directoria que mantém a informação sobre a partilha de cada bloco local de memória: A directoria é distribuída pelos processadores Cada entrada indica os processadores que contêm uma cópia do bloco de memória A invalidação dos blocos efectuada através de mensagens, com base em informação na directoria
Paradigmas de Computação Paralela Redes de interligação Topologias Completamente conectada (requer N 2 comutadores) Anel (requer 2N comutadores) Matriz e hipercubo Multi-nível
Paradigmas de Computação Paralela Redes de interligação Métricas Latência Largura de banda por ligação agregada - soma a largura de banda das ligações que podem ser realizadas simultaneamente de bisecção - obtida dividindo a máquina em dois tipos de nodos: receptores e emissores d (degree) = ligações de cada comutador Diâmetro = máximo número de ligações entre dois nodos (caminho mais curto) Distância média entre dois nodos
Paradigmas de Computação Paralela Cluster de máquinas Constituídos pode HW normal, interligados por uma rede de alta velocidade (Gbit/s com muito baixa latência) Cada nodo de processamento pode ser uma máquina de memória partilhada com vários processadores Cada nodo possui uma cópia do SO Alta disponibilidade: quando falha uma máquina basta substituí-la por outra Custos de administração na ordem do número de máquinas Exemplo (Cluster investigação da Universidade do Minho - 2006): 8 nodos com SAN FC 3TB 8 nodos com NVIDIA 7800 GTX CPU Processador Freq. Relógio Memória Actual/Máxima Comunicação Nodos Máximo de nodos 14 Intel Xeon 3,2 GHz 10 GB / 112 GB 250 MB/s, 10us (2,0 Gbit/s) 2-way 7 96 Intel Xeon 3,0 GHz 2,0 GHz 96GB / 768GB 1 GB/s, 3us (10 Gbit/s) 2-way / 4-way 48 8
Arquitecturas Multi-core Hierarquia processador-memória Organização dos diversos níveis de cache em sistemas multi-core Consistência entre os vários níveis de memória Conectividade do processador com o exterior Topologias de interligação entre cores / CPU Barramentos, estrela, híbridos Execução simultânea de vários fios de execução (SMT) Hyper-threading Programação de sistemas multi-core Especificação de actividades paralelas Modelos de consistência da memória
Arquitecturas Multi-core Hierarquia processador-memória Cose Partilha de L1, L2 ou L3 entre cores? Como assegurar a coesão caches de diferentes cores? Partilha do barramento de acesso à memória externa? Exemplos: L1 = 32KB+32KB (/Core) L2 = 2MB/4MB/6MB L1 = 64KB+64KB (/Core) L2 = 512K (/Core) L3 = 2MB/6MB
Arquitecturas Multi-core OpenSparc T2-8 cores - 64 threads simultâneas (8/core) - 8 bancos de caches L2-4 controladores de memória
Arquitecturas Multi-core Hierarquia processador-memória Protocolos de coesão entre caches A utilização de protocolos write back pode originar valores inconsistentes entre a cache e a memória principal partilhada Os protocolos de coesão de caches asseguram a coesão entre os valores nas caches dos vários processadores e a memória central Coesão baseada em Snooping cada bloco da cache contém informação indicando se é partilhado. Write-invalidate: numa escrita todas as outras cópias são marcadas como inválidas» Gera menos tráfego no barramento (ex. no caso de escritas sucessivas) Write-update: numa escrita as outras cópias são também actualizadas» Reduz a latência nos acessos Falsa partilha: duas variáveis utilizadas por diferentes processadores são mapeadas no mesmo bloco da cache Problema agrava com o aumento da dimensão dos blocos da cache Caches inclusivas torna o snoop no barramento mais rápido
Arquitecturas Multi-core Hierarquia processador-memória Exemplo de coesão entre caches do tipo write-invalidate Estado de cada linha: Leitura (Read Only), Leitura/Escrita, Inválida A maior parte dos processadores comerciais utilizam uma variante deste protocolo (MESI), onde o estado Read Only está dividido em dois (Exclusive/Shared), indicando se o bloco é partilhado ou não.
Arquitecturas Multi-core Hierarquia processador-memória Implementação de operações de sincronização Com uma instrução de permuta atómica Gera um write-miss e um read-miss por ciclo O spin-lock desperdiça ciclos de CPU, não escalando com o número de processadores Exemplo para três processadores
Arquitecturas Multi-core Hierarquia processador-memória Implementação de operações de sincronização Com uma instrução de permuta atómica Apenas gera um write-miss quando o valor da variável é alterado
Arquitecturas Multi-core AMD K10 Integra o controlador de memória do próprio chip e 2 ligações externas (Hyper Transport) para ligação a outros processadores. O Hyper Transport permite a ligação até 8 processadores sem recurso a componentes adicionais: CC-NUMA - a largura de banda disponível para a memória local é superior à disponibilizada pelo Hyper Transport
Arquitecturas Multi-core Arquitectura do sistema (tradicional) Largura de Banda da memória: 25.6 GB/s (DDR3 1600 dual 12.8 Gb/s) O controlador de memória é o gargalo!
Intel Core i7 Arquitecturas Multi-core Controlador de memória integrado Barramento QPI para conexão o periféricos ou outros processadores (2 x 12,8 GB/s)
Arquitecturas Multi-core Intel 80-core TeraScale Chip para investigação de tecnologias futuras para multi-core, que não pretende ser comercializado Protótipo actual atinge 1 TeraFlop
Arquitecturas Multi-core Novas arquiteturas Intel Sandy bridge Intel 48-core SSC
Hyper-Threading Arquitecturas Multi-core Unidade Funcional Super-escalar Multi-processador (2 vias) Hyper-Threading 1 2 3 1 2 3 1 2 3 1 2 3 Ciclos de relógio 1 processador = 2 processadores? Não porque parte dos recursos do processador não são duplicados (i.é., são divididos pelos vários fios de execução) (caches, registos internos, buffers internos, etc.)
O futuro dos multi-core Arquitecturas Multi-core Aumento do número de núcleos por chip (100 ou mais) Desafios: Interligação - Como interligar de forma eficiente os núcleos Hierarquia de memória e coesão Partilha de cache pelos núcleos Memória Aumento proporcional ao número de núcleos Programação!!! A tendência atual é para o tipo NUMA Processadores multi-core são mais eficientes em termos energéticos As aplicações do dia-a-dia não beneficiam desta evolução