Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
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