Prévia do material em texto
Arquiteturas de Computadores Fontes dos slides: Livro Patterson e Hennessy, Quantitative Approach e nas notas de aula do Prof. Yonghong Yan do curso CSCE 513 Computer Architecture Paralelismo no nível de threads Lei de Moore Tendência a longo prazo da densidade de transistores por circuito integrado Número de transistores / in2 dobra a cada ~ 18-24 meses O que fazer com tantos transistores? Otimização da execução de um único fluxo de instruções através de: Pipelining Sobrepõe a execução de várias instruções Exemplo: todas as arquiteturas RISC; Intel x86 Execução fora de ordem: Permite que as instruções ultrapassem umas às outras na ordem de execução de acordo com dependências de código (RAW, WAW, WAR) Exemplo: todos os processadores comerciais (Intel, AMD, IBM,Oracle) Previsão de desvios e execução especulativa: Reduz o número de ciclos de paralisação da CPU devido a desvios não resolvidos Exemplo: (quase) todos os processadores comerciais O que fazer com tantos transistores? Processadores de múltiplas emissões: Permitem que várias instruções iniciem a execução por ciclo de relógio Arquiteturas superescalares (Intel x86, AMD,…) vs. VLIW Arquiteturas VLIW / EPIC: Permitem que os compiladores indiquem instruções independentes em cada pacote emitido Exemplo: Intel Itanium Unidades SIMD: Permitem a expressão e execução eficientes de operações com vetores Exemplo: VSIM, SSE - SSE4, GPU Limitações para otimizar a execução de um único fluxo de instruções Problema: dentro de um único fluxo de instruções, não encontramos instruções independentes suficientes para executar simultaneamente devido a dependências de dados limitações da execução especulativa em muitos ramos dificuldades para detectar dependências de acesso à memória entre as instruções (análise de alias) Consequência: número significativo de unidades funcionais podem ficar ociosas a qualquer momento Pergunta: Podemos talvez executar instruções de outro fluxo de instruções Outra thread? Outro processo? Copyright © 2012, Elsevier Inc. All rights reserved. Paralelismo no nível de threads Problemas para executar instruções de vários threads ao mesmo tempo As instruções em cada thread podem usar os mesmos registradores Cada thread tem seu próprio contador de programa O gerenciamento de memória virtual permite a execução de várias threads e compartilhamento da memória principal Quando alternar entre as diferentes threads: Multithreading de granularidade fina: alterna entre todas as instruções Multithreading de granularidade grossa: alterna apenas em paradas caras (por exemplo, falta de cache do nível 2) Potência e paralelismo no nível de instrução A frequencia do relógio da CPU começou a não subir tão rápido a partir de 2000 Limitação de paralelismo no nível de instrução Consumo de potência e dissipação de calor Taxonomia de Flynn https://en.wikipedia.org/wiki/Flynn%27s_taxonomy Exemplos de máquinas MIMD Multiprocessador de memória compartilhada simétrica (SMP) Vários processadores em caixa comunicação através de memória compartilhada Chips multicores atuais possuem esta arquitetura Todo processador executa uma cópia do SO Multiprocessador de memória compartilhada Distribuída/ Não Uniforme Vários processadores Cada um com memória local Rede escalável “SO” extremamente leve no nó que fornece serviços simples Escalonamento / sincronização Host acessível pela rede para E / S Cluster Muitas máquinas independentes conectadas em rede Comunicação através de mensagens Symmetric Multiprocessors (SMP) Pequeno número de núcleos Normalmente oito ou menos, e não mais que 32 na maioria dos casos Todos os processadores compartilham uma única memória e tem o mesmo tempo de acesso a ela Daí o termo simétrico. Todos os multicores atuais são SMPs Também chamados de multiprocessadores com acesso uniforme à memória (UMA) Todos os processadores têm latência uniforme Multiprocessadores com memória compartilhada centralizada Processadores multinúcleo (multicore) Normalmente conectados por um cache, Sistemas SMP anteriores eram tipicamente conectados através da memória principal Intel X7350 quad-core (Tigerton) Cache L1 privado: instrução de 32 KB, dados de 32 KB Cache L2 compartilhado: cache unificado de 4 MB Multiprocessadores com memória compartilhada centralizada • Configuração do Intel X7350 quad-core (Tigerton) Multiprocessadores com memória compartilhada distribuída (DSM) Grande número de processadores 64 a 1000 Memória distribuída Memória remota vs local Latência longa vs curta Rede de interconexão Largura de banda, topologia, etc Acesso à memória não uniforme (NUMA) Cada processador pode possuir E / S local Multiprocessadores com memória compartilhada distribuída Reduz o gargalo de memória em comparação com SMPs Mais difícil de programar com eficiência Por exemplo, política do primeiro toque: o item de dados estará localizado na memória do processador que usa um item de dados primeiro Para reduzir os efeitos do acesso não uniforme à memória, caches são frequentemente usados ccNUMA: arquiteturas com acesso à memória não uniforme coerente O maior exemplo atual: SGI Origin com 512 processadores Multiprocessadores com memória compartilhada SMP e DSM são todos multiprocessadores de memória compartilhada UMA ou NUMA Multicores são SMPs com memória compartilhada A maioria das máquinas com várias CPUs é DSM NUMA Métrica de desempenho Aceleração (Speedup): quanto mais rápido um problema é executado em p processadores em comparação com 1 processador? Aceleração ótima: S (p) = p (aceleração linear) Eficiência Paralela: Aceleração normalizada pelo número de processadores Ótimo: E (p) = 1,0 Desafios da programação paralela Paralelização limitada dos programas Suponha que desejamos uma aceleração de 80 utilizando 100 processadores. Qual deve ser a fração sequencial deste programa? 0,25% pode ser sequencial