Multiprocessadores e Paralelismo nível de Thread
Roteiro da Aula Conceitos básicos Paralelismo de Thread Taxonomia dos processadores Modelos de memória e de comunicação Problema da coerência de memória Protocolos de coerência baseado em snoop Protocolos de coerência baseado em diretórios
Além de ILP. Em algumas aplicações existem paralelismo natural Thread Level Parallelism Data Level Parallelism
Além de ILP. Thread: processo com instruções e dados próprios thread pode ser parte de um programa paralelo de múltiplos processos, ou pode ser um programa independente Cada thread tem seu estado (instruções, dados, PC, register state,etc) necessários para sua execução Data Level Parallelism: realiza operações identicas sobre um conjunto de dados
Thread Level Parallelism (TLP) ILP explora paralelismo implícito dentro de um loop ou trecho de código TLP é representado explicitamente de uso de múltiplas threads de execução que são paralelas. Objetivo: usar múltiplos streams de instruções para melhorar: Throughput de computadores que executam vários programas Tempo de Execução de programas multi-threaded. TLP pode ser mais eficiente que o ILP.
Multithreaded Execution Multithreading: múltiplas threads que compartilham a unidade funcional de um processador processador deve duplicar estado para cada thread i.e, uma cópia separada do register file, um PC separado, e para execução de programas independentes uma page table separada. Compartilhamento de memória através de mecanismos de memória virtual. HW chaveamento rápido de thread cerca de 100s para 1000s. Quando chavear? Alternar instrução por thread (fine grain) Quando um thread está em estado de espera (devido a cache miss), um outro thread pode ser executado (coarse grain)
Time (processor cycle) Multithreaded Categories Superscalar Fine-Grained Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Idle slot 8
Fine-Grained Multithreading
Fine-Grained Multithreading Chaveamento entre threads a cada instrução causa a execução de multiplas threads. Usualmente feito em round-robin fashion, pulando threads em stall CPU deve ser capaz de chavear entre threads a cada clock Vantagem de aproveitar pequenas e longas esperas desde que instruções de outras threads podem executar quando uma thread está em espera Desvantagem de tornar execução de threads individuais mais lenta desde que uma thread pronta para executar vai esperar execução de outras threads Usado Sun s Niagara
Time (processor cycle) Multithreaded Categories Superscalar Fine-Grained Coarse-Grained Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Idle slot 11
Coarse-Grained Multithreading Chaveamento de threads somente quando demora longa ocorre (L2 cache misses) Vantagens Não necessita de mecanismo para chaveamento rápido Não torna a thread mais lenta, Desvantagem Não melhora desempenho devido a esperas curtas Desde que a CPU despacha instruções para 1 thread, quando um stall ocorre, o pipeline deve ser esvaziado Nova thread deve preencher o pipeline antes que as instruções completem Devido a este start-up overhead, coarse-grained multithreading é melhor para reduzir a penalidade de stalls de alto custo, quando pipeline refill << stall time Usado no IBM AS/400
Coarse-Grained Multithreading
Coarse-Grained Multithreading + Sacrifica muito pouco o desempenho de uma single thread Tolera somente latencias longas (e.g., L2 misses) Definição de política de escalonamento de Thread Define uma preferred thread (e.g., thread A) Chaveia para thread B quando thread A L2 miss Chaveia de volta para A quando A L2 miss retorna Não pode tolerar latências menores que duas vezes a profundidade do pipeline Necessita in-order pipeline pequeno para bom desempenho Exemplo: IBM Northstar/Pulsar
Usar ambos ILP e TLP TLP e ILP exploram diferentes tipos de paralelismo em um programa Pode um processador orientado a ILP explorar TLP? Unidades Funcionais estão ociosas no data path projetado para ILP devido aos stalls ou dependencias no código. Pode TLP ser usado como fonte de instruções independentes que podem ocupar o processador durante stalls? Pode TLP ser usado para ocupar unidades funcionais que estariam ociosas quando não existe ILP suficiente?
Simultaneous Multi-threading... Cycle One thread, 8 units 1 2 3 4 5 6 7 8 M M FX FX FP FP BR CC Two threads, 8 units Cycle 1 2 3 4 5 6 7 8 M M FX FX FP FP BR CC 9 9 M = Load/Store, FX = Fixed Point, FP = Floating Point, BR = Branch, CC = Condition Codes 16
Simultaneous Multithreading (SMT) Podemos usar multithread em uma máquina out-oforder? Simultaneous multithreading (SMT) + Tolera todas latencias (e.g., L2 misses, mispredicted branches) ± Sacrifica um pouco o desempenho de uma única thread Politica de Escalonamento de Thread Round-robin Particionamento dinamico do Pipeline Exemplo: Pentium4 (hyper-threading): 5-way issue, 2 threads 12/3/2018 17
Simultaneous Multithreading (SMT) Simultaneous multithreading (SMT): dentro de um processador com escalonamento dinamico existem vários mecanismos de HW para suportar multithreading Grande conjunto de registradores virtuais que podem ser usados para implementar conjunto de registradores para cada thread Register renaming fornece um mecanismo para identificar registradores de forma única. Out-of-order completion permite a execução de threads out of order para melhor utilização do HW. Necessidade da adição de uma renaming table por thread e manter PCs separados Commit independente pode ser suportado através de reorder buffers separados para cada thread 12/3/2018 18
Time (processor cycle) Multithreaded Categories Superscalar Fine-Grained Coarse-Grained Simultaneous Multithreading Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Idle slot 19
SMT 20
Desafios em SMT Deve ter um grande Banco de registradores para armazenar contextos multiplos. Desenvolvimento eficiente do hardware para não afetar o tempo de ciclo de clock Instruction issue mais instruções devem ser consideradas Instruction completion escolher quais instruções para commit pode ser um desafio Garantir que os conflitos gerados pela cache e TLB em um processador SMT não degradam desempenho. 21
Exemplos
Exemplos
Exemplos
Desempenho dos Processadores
Time (processor cycle) Multithreaded Categories Simultaneous Superscalar Fine-Grained Coarse-Grained Multiprocessing Multithreading Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Idle slot 26
Interesse em Multiprocessadores Uma crescente utilização de servidores Um crescimento em aplicações dataintensive Um melhor entendimento de como usar multiprocessadores para explorar threadlevel paralelismo Investimento em replicação é mais atrativo que investimento em um projeto exclusivo.
Flynn s Taxonomy M.J. Flynn, "Very High-Speed Computers", Proc. of the IEEE, V 54, 1900-1909, Dec. 1966. Single Instruction Single Data (SISD) (Uniprocessor) Multiple Instruction Single Data (MISD) (????) Single Instruction Multiple Data SIMD (single PC: Vector, CM- 2) Multiple Instruction Multiple Data MIMD (Clusters, SMP servers) Flynn classificou de acordo com streams de dado e controle em 1966 SIMD Data Level Parallelism MIMD Thread Level Parallelism MIMD mais popular pois: Flexibilidade: N programs e 1 programa multithreaded Cost-effective: mesma MPU em desktop & MIMD
Multiprocessamento Clusters commodity clusters Baseados em processadores comerciais e interconexões custom clusters O projetista customiza cada nó de processamento e a rede de interconexão
Multiprocessamento Clusters Aplicações que focam em taxa de transferência e possuem pouca (ou nenhuma) comunicação entre threads, com Servidores WEB, e aplicações baseadas em transações podem ser implementadas em um cluster.
Classificação de Multiprocessadores Arquitetura Paralela = Arquitetura do Computador + Arquitetura da Comunicação Classificação por memória: Processador de Memória Centralizada (Symmetric) Típico para sistemas pequenos demanda de largura de banda de memória e rede de comunicação. Multiprocessador de Memória Fisicamente Distribuída Escala melhor demanda de largura de banda para rede de comunicação
Classificação por Memória Multiprocessadores de Memória Centralizada Poucos processadores ( poucas dezenas chips ou cores) em 2006 Memória única e centralizada P0 P1 Pn C C... C M IO Centralized Memory
Classificação por Memória Multiprocessadores de Memória Fisicamente Distribuída Maior número de processadores (centenas de chips ou cores) Memória distribuída entre processadores P0 P1 Pn C C C M IO M IO... M IO Interconnection Network Distributed Memory
Centralized vs. Distributed Memory Scale P0 P1 Pn P0 P1 Pn C C... C M C IO M C IO... M C IO M IO Interconnection Network Centralized Memory Distributed Memory
Classificação de Multiprocessadores Arquitetura Paralela = Arquitetura do Computador + Arquitetura da Comunicação Classificando por comunicação: Multiprocessador baseado em Message- Passing : processadores enviam menssagens Processador baseado em Memória Compartilhada: processadores se comunicam através de espaço de endereçamento comum. Memória Centralizada:, UMA (Uniform Memory Access time) Memória Distribuída:, NUMA (Non Uniform Memory Access time)
Exemplos de Multiprocessadores
Exemplos de Multiprocessadores
Multi-core Multiprocessador implementado em um único circuito integrado
Mudança de Paradigma We are dedicating all of our future product development to multicore designs. This is a sea change in computing Paul Otellini, President, Intel (2005) Todas as companhias de processadores estão desenvolvendo multi-core (2X CPUs / 2 anos) Manufacturer/Year AMD/ 05 Intel/ 06 IBM/ 04 Sun/ 05 Processors/chip 2 2 2 8 Threads/Processor 1 2 2 4 Threads/chip 2 4 4 32
Multi-Core Processor
Cores homegêneos Superscalares Intel Core 2 Duo (escalonamento dinâmico, especulação, multiple issue) Interconexão baseada em barramento Cada core tem cache local (L1) Memória compartilhada (cache L2) no chip Source: Intel Corp.
Desafios do processamento Paralelo Primeiro desafio: quantos % do programa é inerentemente sequencial Suponha speedup de 80X speedup para 100 processadores. Qual a fração do programa que deve ser sequencial? a. 10% b. 5% c. 1% d. <1% O,25%
Resposta usando Lei de Amdahl Speedup overall 80 ( 79 = = 80 = ( 1 Fraction ) ( 1 Fraction ) ( 1 Fraction ) 80 Fraction Fraction parallel parallel parallel 1 enhanced Fraction Speedup 1 Fraction + 100 Fractionparallel + ) 100 0.8 Fraction parallel + parallel parallel parallel = 1 parallel = 79 / 79.2 = 99.75%
Desafios do processamento Paralelo Segundo desafio: longas latências de memórias remotas Suponha 32 CPU MP, 2GHz, 200 ns memória remota, todos acessos locais são hits e CPI base de 0.5. (Acesso remoto = 200/0.5 = 400 ciclos.) Qual o impacto no desempenho se 0.2% das instruções envolvem acessos remotos? a. > 1.5X b. > 2.0X c. > 2.5X 2,6X
Equação do CPI CPI = CPI base + taxa de acesso remoto x custo do acesso remoto CPI = 0.5 + 0.2% x 400 = 0.5 + 0.8 = 1.3 Sem acesso remoto é 2.6 mais rápida que com 0.2% das instruções envolvendo acessos remoto
Desafios do processamento Paralelo 1. Paralelismo da Aplicação através de novos algoritmos com melhor desempenho 2. Impacto da longa latência no acesso remoto mudanças na arquitetura e na programação For exemplo, redução dos acessos remotos por: Caching shared data (HW) Restruturando estruturas de dados para garantir mais acessos locais (SW) Foco do capítulo: gerenciar latência através do uso de cache.
Multi-processadores de Memória Compartilhada
Multi-processadores de Memória Compartilhada Evolução: Múltiplas placas ou chips usando barramento compartilhado Múltiplos processadores dentro de um chip. Caches Dados Privado usados por cada processador Dados Compartilhados usados por múltiplos processadores Caching dado compartilhado reduz latência a dados compartilhado, largura de banda da memória para acesso a dado compartilhado e largura de banda de interconexão problema de coerência de cache
Exemplo de problema de Coerência de Cache u :5 P 1 P 2 P 3 u =? u =? 4 $ $ 5 $ u :5 3 u= 7 1 u:5 2 I/O devices Memory Processadores verão diferentes valores de u após evento 3 Caches write-through: valores inconsistentes Caches write back: valor escrito na memória depende do momento que que ocorre o flush de cache e os valores são atualizados na memória
Garantindo a Coerência Replicação para dados compartilhados que estão na memória são feitas cópias nas caches que estão usando o dado Reduz latência de acesso e utilização simultânea do barramento na leitura de dado compartilhado. P 1 u =? P 2 P 3 $ $ $ u :5 u:5 I/O devices Memory
Garantindo a Coerência Migração o valor mais atualizado da variável é movido entre a cache que tem o valor mais atual e a cache que precisa do dado Reduz a latência devido a leitura dos dados na memória P 1 u = =7? 3 P 2 P 3 $ $ $ u :5 u=7 2 u:5 Memory 1 I/O devices
Exemplo de problema de Coerência de Cache u :5 P 1 P 2 P 3 u =? u =? 4 $ $ 5 $ u :5 3 u= 7 1 u:5 2 I/O devices Memory Processadores verão diferentes valores de u após evento 3 Caches write-through: valores inconsistentes Caches write back: valor escrito na memória depende do momento que que ocorre o flush de cache e os valores são atualizados na memória
Garantindo a Coerência Como manter coerência de dados migrados ou replicados? Protocolos implementados pelo controlador da cache e/ou pelo controlador de memória que permitem o rastreamento do status de compartilhamento.
Protocolos de Coerência de Cache 1. Snooping Cada cache que possui cópia de um dado também tem uma cópia do status de compartilhamento, Todas as caches são acessíveis através de meio barramento Todos os controladores de caches monitoram ou snoop o meio para determinar se eles possuem ou não uma cópia sendo requisitada pelo barramento 2. Directory based O status do compartilhamento de um bloco da memória física é armazenado em um local, diretório
Coerência: Conceito Só uma pessoa pode falar no microfone por vez Toda modificação em conta deve ser comunicada entre os funcionários através do alto falante Após qualquer modificação, as cópias devem ser inutilizadas
Protocolo Snooping de Coerência de Cache
Protocolo Snooping de Coerência de Cache State Tag Data P 1 Bus snoop P n $ $ Mem I/O devices Cache-memory transaction Controladores de Cache snoops (bisbilhotam) todas as transações no barramento Transações relevantes : envolvem bloco que a sua cache possui Realiza ação para garantir coerência invalida, atualiza, ou fornece valor Atualiza estado de compartilhamento do bloco de cache
Protocolos de Coerência de Cache Write Invalidate As cópías nas demais caches são Invalidadas na ocorrência de uma escrita em uma das caches Write Update As cópias das demais caches são atualizadas após a ocorrência de uma escrita em uma das caches Write update causam maior utilização do barramento Multiprocessadores atuais usam write invalidate
Exemplo: Write-thru Invalidate P 1 P 2 P 3 u = 7 u = 7 3 4 $ $ 5 $ u :5 u :5 u= 7 1 u:5 u = 7 2 I/O devices Memory P3 Deve invalidar todas as cópias antes da escrita Caches write through: simplicidade de implementação porém mais acessos à memória Caches write-back: menos acessos à memória, mas como encontrar o bloco que contem a cópia com valor atualizado?
PROBLEMA 1: COMO GARANTIR QUE SÓ UM PROCESSADOR ESCREVE NA VARIÁVEL COMPARTILHADA?
Protocolo de Barramento Clock Bus Request Bus Grant R/W Address Cmd+Addr Data Data1 Data2 Só um processador usa o barramento por vez
Contenção de Barramento Dois processadores querem usar o barramento ao mesmo tempo P0 Bus req. P1 Bus req. Pn C C... C M IO
Contenção de Barramento Dois processadores querem usar o barramento ao mesmo tempo P0 Bus req. P1 Bus req. Pn C C... C Árbitro O processador P0 tem que esperar M IO
Módulos da Arquitetura State Tag Data P 1 Bus snoop P n Estados: Não válido, Válido, dirty $ Mem I/O devices $ Cache-memory transaction Protocolo de barramento: Requisição Comando Dado Acesso simultâneo: Só um processador ganha o acesso Decisão: árbitro Invalidação das demais cópias
PROBLEMA 2: ONDE ENCONTRAR A CÓPIA MAIS ATUALIZADA DO BLOCO DE CACHE?
Localizando cópia mais atualizada Caches Write-through: usa cópia da memória Write through é mais simples porém causa muitos acessos à memória e maior utilização do barramento. Caches Write-back: deve localizar cópia mais recente nas caches. É mais complicado de implementar Reduz acessos à memória A maioria dos multiprocessadores usam caches write-back
Localizando cópias em Caches Write Back Solução: Usar o mesmo mecanismo de snooping para achar a cópia mais atual Blocos de cache Snoop todo endereço colocado no barramento Se processador possui cópia atual do bloco requisitado ele responde a requisição de leitura e aborta acesso à memória.
Protocolo Snooping Write Back Cada bloco de cache vai estar em UM dos estados: Shared : bloco pode ser lido OU Modified/Exclusive : cache tem somente uma cópia que pode ser escrita e dirty OU Invalid : bloco não contem dado válido
Protocolo Snooping Write Back Cada bloco de cache vai estar em UM dos estados: Shared : bloco pode ser lido OU Modified/Exclusive : cache tem somente uma cópia que pode ser escrita e dirty OU Invalid : bloco não contem dado válido CPU solicita leitura: Se cache não tem cópia: Controlador coloca Read Miss no barramento Outras caches: Read misses: todas as caches vão dar snoop no barramento Controlador bisbilhota todo endereço colocado no barramento Se a cache possui uma cópia Exclusive do bloco requisitado, fornece o bloco em resposta a requisição de leitura e aborta o acesso à memória.
Protocolo Snooping Write Back Cada bloco de cache vai estar em UM dos estados: Shared : bloco pode ser lido OU Modified/Exclusive : cache tem somente uma cópia que pode ser escrita e dirty OU Invalid : bloco não contem dado válido CPU solicita escrita: Se cache não tem cópia: Controlador coloca Write Miss no barramento Outras caches: Write misses: todas as caches vão dar snoop no barramento Controlador bisbilhota todo endereço colocado no barramento Se a cache possui uma cópia Exclusive do bloco requisitado, atualiza a memória e Invalida a cópia. Se a cache possui uma cópia Shared do bloco requisitado invalida a cópia
Snooping: Write-Back - CPU Mudança de estado considerando requisições da CPU para cada bloco de cache Blocos que não estão na cache não são validos Invalid CPU Read Place read miss on bus CPU Read hit Shared (read/only) CPU Write Place Write Miss on bus Cache Block State CPU read hit CPU write hit Exclusive (read/write) CPU Write Place Write Miss on Bus CPU Write Miss (?) Write back cache block Place write miss on bus
Mudança de estado para requisições da CPU para cada bloco da cache Snooping: Write-Back Substituição de Bloco Invalid CPU Read Place read miss on bus CPU Read hit Shared (read/only) CPU Write Place Write Miss on bus CPU read miss Write back block, Place read miss on bus CPU Read miss Place read miss on bus Cache Block State CPU read hit CPU write hit Exclusive (read/write) CPU Write Place Write Miss on Bus CPU Write Miss Write back cache block Place write miss on bus
Snooping: Write-Back - Bus Mudança de estado considerando operações do barramento para cada bloco de cache Invalid Write miss for this block Shared (read/only) Write miss for this block Write Back Block; (abort memory access) Exclusive (read/write) Read miss for this block Write Back Block; (abort memory access)
Snooping Write-back Mudança de estado para requisições da CPU para cada bloco da cache e para requisições do barramento para cada bloco de ache Cache Block State Write miss for this block Write Back Block; (abort memory access) CPU read hit CPU write hit Invalid CPU Read Place read miss CPU Write on bus Place Write Miss on bus Exclusive (read/write) Write miss for this block CPU read miss Write back block, Place read miss on bus CPU Read hit Shared (read/only) CPU Read miss Place read miss on bus CPU Write Place Write Miss on Bus Read miss for this block Write Back Block; (abort memory access) CPU Write Miss Write back cache block Place write miss on bus
Exemplo Processor 1 Processor 2 Bus Memory P1 P2 Bus Memory step State Addr Value State Addr Value Action Proc. Addr Value Addr Value P1: Write 10 to A1 P1: Read A1 P2: Read A1 P2: Write 20 to A1 P2: Write 40 to A2 Assuma que estado inicial da cache é não válido A1 e A2 mapeiam para o mesmo slot de cache mas A1!= A2 Remote Write Write Back Invalid Remote Write Read miss on bus Write miss on bus Remote Read Write Back Shared CPU Write Place Write Miss on Bus CPU Read hit CPU Read Miss 75 CPU read hit CPU write hit Exclusive CPU Write Miss Write Back
Exemplo: Passo 1 P1 P2 Bus Memory step State Addr Value State Addr Value Action Proc. Addr Value Addr Value P1: Write 10 to A1 Excl. A1 10 WrMs P1 A1 P1: Read A1 P2: Read A1 P2: Write 20 to A1 P2: Write 40 to A2 Assuma que estado inicial da cache é não válido A1 e A2 mapeiam para o mesmo slot de cache mas A1!= A2 Estado ativo: Remote Write Write Back Invalid Remote Write Read miss on bus Write miss on bus Remote Read Write Back Shared CPU Write Place Write Miss on Bus CPU Read hit CPU Read Miss 76 CPU read hit CPU write hit Exclusive CPU Write Miss Write Back
Exemplo: Passo 2 P1 P2 Bus Memory step State Addr Value State Addr Value Action Proc. Addr Value Addr Value P1: Write 10 to A1 Excl. A1 10 WrMs P1 A1 P1: Read A1 Excl. A1 10 P2: Read A1 P2: Write 20 to A1 P2: Write 40 to A2 Assuma que estado inicial da cache é não válido A1 e A2 mapeiam para o mesmo slot de cache mas A1!= A2 Remote Write Write Back Invalid Remote Write Read miss on bus Write miss on bus Remote Read Write Back Shared CPU Write Place Write Miss on Bus CPU Read hit CPU Read Miss 77 CPU read hit CPU write hit Exclusive CPU Write Miss Write Back
Exemplo: Passo 3 P1 P2 Bus Memory step State Addr Value State Addr Value Action Proc. Addr Value Addr Value P1: Write 10 to A1 Excl. A1 10 WrMs P1 A1 P1: Read A1 Excl. A1 10 P2: Read A1 Shar. A1 RdMs P2 A1 A1 Shar. A1 10 WrBk P1 A1 10 A1 10 Shar. A1 10 RdDa P2 A1 10 10 P2: Write 20 to A1 10 P2: Write 40 to A2 10 10 Assuma que estado inicial da cache é não válido A1 e A2 mapeiam para o mesmo slot de cache mas A1!= A2 Remote Write Write Back Invalid Remote Write Read miss on bus Write miss on bus Remote Read Write Back Shared CPU Write Place Write Miss on Bus CPU Read hit CPU Read Miss 78 CPU read hit CPU write hit Exclusive CPU Write Miss Write Back
Exemplo: Passo 4 P1 P2 Bus Memory step State Addr Value State Addr Value Action Proc. Addr Value Addr Value P1: Write 10 to A1 Excl. A1 10 WrMs P1 A1 P1: Read A1 Excl. A1 10 P2: Read A1 Shar. A1 RdMs P2 A1 A1 Shar. A1 10 WrBk P1 A1 10 A1 10 Shar. A1 10 RdDa P2 A1 10 A1 10 P2: Write 20 to A1 Inv. Excl. A1 20 WrMs P2 A1 10 P2: Write 40 to A2 10 10 Assuma que estado inicial da cache é não válido A1 e A2 mapeiam para o mesmo slot de cache mas A1!= A2 Remote Write Write Back Invalid Remote Write Read miss on bus Write miss on bus Remote Read Write Back Shared CPU Write Place Write Miss on Bus CPU Read hit CPU Read Miss 79 CPU read hit CPU write hit Exclusive CPU Write Miss Write Back
Exemplo: Passo 5 P1 P2 Bus Memory step State Addr Value State Addr Value Action Proc. Addr Value Addr Value P1: Write 10 to A1 Excl. A1 10 WrMs P1 A1 P1: Read A1 Excl. A1 10 A1 P2: Read A1 Shar. A1 RdMs P2 A1 A1 Shar. A1 10 WrBk P1 A1 10 A1 10 Shar. A1 10 RdDa P2 A1 10 A1 10 P2: Write 20 to A1 Inv. Excl. A1 20 WrMs P2 A1 A1 10 P2: Write 40 to A2 WrMs P2 A2 10 Excl. A2 40 WrBk P2 A1 20 20 Assuma que estado inicial da cache é não válido A1 e A2 mapeiam para o mesmo slot de cache mas A1!= A2 Remote Write Write Back Invalid Remote Write Read miss on bus Write miss on bus Remote Read Write Back Shared CPU Write Place Write Miss on Bus CPU Read hit CPU Read Miss 80 CPU read hit CPU write hit Exclusive CPU Write Miss Write Back
Snooping State Tag Data P 1 Bus snoop P n Estados: Shared, Não válido, Exclusivo $ Mem I/O devices $ Cache-memory transaction Protocolo de barramento: Requisição Comando Dado Acesso simultâneo: Só um processador ganha o acesso Decisão: árbitro Invalidação das demais cópias
Limitações Aumento no número de processadores -> cresce demanda por memória - > tornando-se um bottleneck. Para bus-based multiprocessador, Bus: acessos devido a coerência e acessos à memória Memória UNICA: recebe TODAS as requisições dos processadores. Processadores mais rápidos e em maior número. Como suportar este novo cenário? Múltiplos barramentos e redes de interconexão Memória configurada em bancos de memória
Limitações Múltiplos barramentos e redes de interconexão Memória configurada em bancos de memória
Network-based Coherence
Abordagem Escalável: Diretórios Cada bloco de memória tem uma informação armazenada em um diretório Gerencia cópias dos blocos em cache e seus estados Em caso de miss, encontra entrada no diretório, analiza o mesmo e comunica somente com os nós que possuem cópia se necessário Em redes escaláveis, comunicação com diretório e cópias é feita através da rede. Várias alternativas para organizar informação no diretório.
Operação Básica de Diretório P P Cache Cache Interconnection Network k processadores. Cada bloco de cache na memória: k presence-bits, 1 dirty-bit Cada bloco de cache em cache: 1 valid bit, e 1 dirty (owner) bit Memory Directory presence bits dirty bit Leitura da memória pelo processador i: Se dirty-bit está OFF então { leitura da memória; atualiza p[i] para ON; } Se dirty-bit está ON então { acessa linha de cache do processador dirty (estado de cache para shared); atualiza memória; faz dirty-bit igual a OFF; faz p[i] igual a ON; fornece dado para i;} Escrita na memória pelo processador i: Se dirty-bit igual a OFF então { fornece dado para i; envia nvalidations para todas as caches que tem o bloco; faz dirty-bit igual a ON; faz p[i] igual a ON;... }...
Operação Básica de Diretório
Coerência Snooping Só uma pessoa pode falar no microfone por vez Toda modificação em conta deve ser comunicada entre os funcionários através do alto falante Após modificações cópias devem ser inutilizadas
Coerência: Diretório Acessos às pastas somente através do diretório Toda modificação em qualquer cópia deve ser comunicada ao diretório Diretório comunica a necessidade de inutilização Diretório envia cópia mais atualizada
Protocolo baseado em Diretório Interconnection Network Directory Directory Directory Local Memory Local Memory Local Memory Cache Cache Cache CPU 0 CPU 1 CPU 2
Protocolo baseado em Diretório Interconnection Network Bit Vector Directories X U 0 0 0 Memories X 7 Caches CPU 0 CPU 1 CPU 2
CPU 0 lê X Interconnection Network Read Miss Directories X U 0 0 0 Memories X 7 Caches CPU 0 CPU 1 CPU 2
CPU 0 lê X Interconnection Network Directories X S 1 0 0 Memories X 7 Caches CPU 0 CPU 1 CPU 2
CPU 0 lê X Interconnection Network Directories X S 1 0 0 Memories X 7 Caches X 7 CPU 0 CPU 1 CPU 2
CPU 2 lê X Interconnection Network Directories X S 1 0 0 Memories Read Miss X 7 Caches X 7 CPU 0 CPU 1 CPU 2
CPU 2 lê X Interconnection Network Directories X S 1 0 1 Memories X 7 Caches X 7 CPU 0 CPU 1 CPU 2
CPU 2 lê X Interconnection Network Directories X S 1 0 1 Memories X 7 Caches X 7 X 7 CPU 0 CPU 1 CPU 2
CPU 0 escreve 6 em X Write Miss Interconnection Network Directories X S 1 0 1 Memories X 7 Caches X 7 X 7 CPU 0 CPU 1 CPU 2
CPU 0 escreve 6 em X Interconnection Network Directories X S 1 0 1 Memories Invalidate X 7 Caches X 7 X 7 CPU 0 CPU 1 CPU 2
CPU 0 escreve 6 em X Interconnection Network Directories X E 1 0 0 Memories X 7 Caches X 6 CPU 0 CPU 1 CPU 2
CPU 1 lê X Interconnection Network Read Miss Directories X E 1 0 0 Memories X 7 Caches X 6 CPU 0 CPU 1 CPU 2
CPU 1 lê X Interconnection Network Switch to Shared Directories X E 1 0 0 Memories X 7 Caches X 6 CPU 0 CPU 1 CPU 2
CPU 1 lê X Interconnection Network Directories X E 1 0 0 Memories X 6 Caches X 6 CPU 0 CPU 1 CPU 2
CPU 1 lê X Interconnection Network Directories X S 1 1 0 Memories X 6 Caches X 6 X 6 CPU 0 CPU 1 CPU 2
CPU 2 escreve 5 em X Interconnection Network Directories X S 1 1 0 Memories Write Miss X 6 Caches X 6 X 6 CPU 0 CPU 1 CPU 2
CPU 2 escreve 5 em X Interconnection Network Directories X S 1 1 0 Memories X 6 Caches X 6 X 6 CPU 0 CPU 1 CPU 2
CPU 2 escreve 5 em X (Write back) Interconnection Network Directories X E 0 0 1 Memories X 6 Caches X 5 CPU 0 CPU 1 CPU 2
CPU 0 escreve 4 em X Interconnection Network Directories X E 0 0 1 Memories X 6 Caches X 5 CPU 0 CPU 1 CPU 2
CPU 0 escreve 4 em X Interconnection Network Directories X E 1 0 0 Memories Take Away X 6 Caches X 5 CPU 0 CPU 1 CPU 2
CPU 0 escreve 4 em X Interconnection Network Directories X E 1 0 0 Memories X 5 Caches X 5 CPU 0 CPU 1 CPU 2
CPU 0 escreve 4 em X Interconnection Network Directories X E 1 0 0 Memories X 5 Caches CPU 0 CPU 1 CPU 2
CPU 0 escreve 4 em X Interconnection Network Directories X E 1 0 0 Memories X 5 Caches X 5 CPU 0 CPU 1 CPU 2
CPU 0 escreve 4 em X Interconnection Network Directories X E 1 0 0 Memories X 5 Caches X 4 CPU 0 CPU 1 CPU 2
Oito cores: cada um suporta até 4 threads. Cada core consiste num pipeline de 6 estágios Tl usa fine-grained multithreading, Os cores acessam 4 caches de 2 níveis Existe coerência entre caches L1 e um diretório com cada cache L2 LI data cache é write through, Exemplo T1
Exemplo T1
Exemplo T1
Comparação T1 e Superescalares
Comparação T1 e Superescalares
Comparação T1 e Superescalares
Comparação T1 e Superescalares