arquitetura e organização de processadores aulas 9 e 10 ...flavio/ensino/cmp237/aula09.pdf ·...

52
CMP237 Universidade Federal do Rio Grande do Sul Instituto de Informática Programa de Pós-Graduação em Computação Arquitetura e Organização de Processadores Aulas 9 e 10 Memória cache

Upload: trinhthien

Post on 20-Jan-2019

213 views

Category:

Documents


0 download

TRANSCRIPT

CMP237

Universidade Federal do Rio Grande do SulInstituto de Informática

Programa de Pós-Graduação em Computação

Arquitetura e Organização de Processadores

Aulas 9 e 10

Memória cache

CMP237

1. IntroduçãoTendências tecnológicas

Capacidade Velocidade (latência)Lógica: 2x em 3 anos 2x em 3 anosDRAM: 4x em 3 anos 2x em 10 anosDisco: 4x em 3 anos 2x em 10 anos

DRAMAno Tamanho Tempo acesso1980 64 Kb 250 ns1983 256 Kb 220 ns1986 1 Mb 190 ns1989 4 Mb 165 ns1992 16 Mb 145 ns1995 64 Mb 120 ns

1000:1! 2:1!

CMP237

Tendências tecnológicas

Hiato de desempenho (latência) entre processador e memória DRAM

µProc60% / ano(2X / 1.5 anos)

DRAM9% / ano(2X / 10 anos)1

10

100

1000

DRAM

CPU

hiato cresce 50%a cada ano

Perf

orm

ance

“Lei de Moore”

1980

1981

1983

1982

1984

1985

1986

1987

1988

1989

1990

1991

1992

1993

1994

1995

1996

1997

1998

1999

2000

Tempo

CMP237

Hierarquia de memória

Bloco de controle

Blocooperac.

Memória

Processador

Mem

ória

MemóriaMemória

Mem

ória

• objetivo: oferecer ilusão de máximo tamanho de memória, com mínimo custo emáxima velocidade

• cada nível contém cópia de parte da informação armazenada no nível superiorseguinte

Mais lentaMais rápidaVelocidade:MaiorMenorTamanho:Mais baixoMais altoCusto:

CMP237

Tecnologias na hierarquia de memória

• Acesso randômico– tempo de acesso é o mesmo para todas as posições– DRAM: Dynamic Random Access Memory

• alta densidade, baixa potência, barata, lenta• dinâmica: precisa de um “refresh” regular

– SRAM: Static Random Access Memory• baixa densidade, alta potência, cara, rápida• estática: conteúdo dura “para sempre”(enquanto houver alimentação)

• Acesso “não-tão-randômico”– tempo de acesso varia de posição para posição e de tempos em tempos– exemplos: disco, CD-ROM

• Acesso sequencial– tempo de acesso varia linearmente com a posição (p.ex. fita)

CMP237

Hierarquia de memória

Bloco de controle

Blocooperac.

Memóriasecundária

(disco)

Processador

Registrad.

Memóriaprincipal(DRAM)

Cache2º nível(SRAM)

On-C

hipC

ache

0,1 1 2-5 10-20 10.000.000 (10 ms)Velocidade (ns):

100 16 K 512 K 256 M GsTamanho (bytes):

CMP237

Hit e miss

• Hit: dado aparece em algum bloco no nível superior (junto ao processador)

– Hit Ratio: a fração de acessos à memória resolvidos no nível superior– Hit Time: tempo de acesso ao nível superior, que consiste de

tempo de acesso à memória RAM + tempo para determinar hit/miss• Miss: dado precisa ser buscado de um bloco no nível inferior

– Miss Ratio = 1 – (Hit Ratio)– Miss Penalty: tempo gasto para substituir um bloco no nível superior +

tempo para fornecer o bloco ao processador• Hit Time << Miss Penalty

CMP237

Hierarquia de memória

Como a hierarquia é gerenciada?• Registradores <-> memória

– pelo compilador• cache <-> memória principal

– pelo hardware• memória principal <-> disco

– pelo hardware e pelo sistema operacional (memória virtual)– pelo programador (arquivos)

CMP237

Princípio de localidade

• Hierarquia de memória funciona devido ao princípio de localidade– todos os programas repetem trechos de código e acessam repetidamente

dados próximos

• localidade temporal: posições de memória, uma vez acessadas, tendem a ser acessadas novamente no futuro próximo

• localidade espacial: endereços em próximos acessos tendem a ser próximos de endereços de acessos anteriores

Probabilidadede referência

Espaço de endereçamento0 2n - 1

CMP237

Princípio de localidade

Como explorar o princípio de localidade numa hierarquia de memória?• Localidade Temporal

=> Mantenha itens de dados mais recentemente acessados nos níveis da hierarquia mais próximos do processador

• Localidade Espacial=> Mova blocos de palavras contíguas para os níveis da hierarquia mais

próximos do processador Nível mais

distante

Bloco Y

Nível maispróximo

Bloco X

para processador

do processador

CMP237

Localidade temporal

• usualmente encontrada em laços de instruções e acessos a pilhasde dados e variáveis

• é essencial para a eficiência da memória cache• se uma referência é repetida N vezes durante um laço de

programa, após a primeira referência a posição é sempre encontrada na cache

Tc = tempo de acesso à cacheTm = tempo de acesso à memória principalTce = tempo efetivo de acesso à cache

N Tc + Tm Tm= Tc + Tce = NN

se Tc = 1 ns, Tm = 20 ns, N = 10 Tce = 3 nsN = 100 Tce = 1,2 ns

CMP237

Localidade espacial

módulos de memória principal

210

715

memóriacache

08

19

linha

linha byteendereço de memória

CMP237

Impacto no desempenho

Medindo o impacto do hit ratio no tempo efetivo de acesso

Tc = tempo de acesso à memória cacheTm = tempo de acesso à memória principalTce = tempo efetivo de acesso à memória cache, considerando efeito

dos misses

Tce = Tc + (1 – h) Tm

se Tc = 1 ns, Tm = 20 ns

h = 0.85 0.95 0.99 1.0

então Tce = 4 ns 2 ns 1.2 ns 1 ns

CMP237

Impacto no desempenho

Tempo gasto com um cache miss, em número de instruções executadas

1º Alpha 340 ns / 5.0 ns = 68 clks x 2 instr. ou 136 instruções2º Alpha 266 ns / 3.3 ns = 80 clks x 4 instr. ou 320 instruções3º Alpha 180 ns / 1.7 ns = 108 clks x 6 instr. ou 648 instruções

1/2 X latência x 3 X freqüência clock x 3 X instruções/clock ⇒ ≈ 5 X

CMP237

Impacto no desempenho

• Supondo um processador que executa um programa com:– CPI = 1.1 – 50% aritm/lógica, 30% load/store, 20% desvios

• Supondo que 10% das operações de acesso a dados na memória sejammisses e resultem numa penalidade de 50 ciclos

CPI = CPI ideal + nº médio de stalls por instrução= 1.1 ciclos + 0.30 acessos à memória / instrução

x 0.10 misses / acesso x 50 ciclos / miss= 1.1 ciclos + 1.5 ciclos = 2. 6

• 58 % do tempo o processador está parado esperando pela memória!• um miss ratio de 1% no fetch de instruções resultaria na adição de 0.5

ciclos ao CPI médio

CPI ideal 1.1

Data misses 1.5

Instr.misses 0.5

CMP237

2. Organizações de memória cache

• processador gera endereço de memória e o envia à cache• cache deve

– verificar se tem cópia da posição de memória correspondente– se tem, encontrar a posição da cache onde está esta cópia– se não tem, trazer o conteúdo da memória principal e escolher posição

da cache onde a cópia será armazenada• mapeamento entre endereços de memória principal e endereços de

cache resolve estas 3 questões– deve ser executado em hardware

• estratégias de organização (mapeamento) da cache– mapeamento completamente associativo– mapeamento direto– mapeamento set-associativo

CMP237

Mapeamento completamente associativo

endereço gerado pelo processadormiss: memória é acessada

endereço dado

cache

comparaçãosimultâneacom todosos endereços

hitmemóriaprincipalprocessador

CMP237

Mapeamento completamente associativo

endereço gerado pelo processador

word byte

endereço word 0

hit

w 1 w 2 w 3

cache

comparaçãosimultâneacom todosos endereços

cache organizada em linhas com 4 palavras de 4 bytes

seleciona word e byteprocessador

CMP237

Mapeamento completamente associativo

• vantagem: máxima flexibilidade no posicionamento de qualquer palavra (ou linha) da memória principal em qualquer palavra (ou linha) da cache

• desvantagens – custo em hardware da comparação simultânea de todos os endereços

armazenados na cache– algoritmo de substituição (em hardware) para selecionar uma linha da

cache como conseqüência de um miss• utilizado apenas em memórias associativas de pequeno tamanho

– tabelas

CMP237

Mapeamento direto

endereço gerado pelo processador

tag índice

tag dado

tag + índice

cache

índice

= ?diferentes

memóriaprincipal

processadoriguais

CMP237

Mapeamento direto

• endereço é dividido em 2 partes– parte menos significativa: índice, usado como endereço na cache onde

será armazenada a palavra– parte mais significativa: tag, armazenado na cache junto com o

conteúdo da posição de memória• quando acesso é feito, índice é usado para encontrar palavra na

cache– se tag armazenado na palavra da cache é igual ao tag do endereço

procurado, então houve hit• endereços com mesmo índice são mapeados sempre para a mesma

palavra da cache

CMP237

Mapeamento direto

• mapeamento: endereço é o módulo do número de blocos na cache

00001 00101 01001 01101 10001 10101 11001 11101

000

Cache

Memory

001

010

011

100

101

110

111

CMP237

Mapeamento direto – exemplo

tag índice20 bits 12 bits

tag dado20 bits 32 bits

tag + índice = 32 bits

cache = 212 = 4 K

índice

= ?diferentes

memóriaprincipal232 = 4 Gprocessadoriguais

CMP237

Mapeamento direto – uso de linhas

Cache IndexCache Tag Exemplo: 0x50 Byte Select931 4 0

1

:

Cache DataByte 0Byte 1Byte 31 :

Byte 32Byte 33Byte 63 :Byte 992Byte 1023 :

0

23

:

0x50

Ex: 0x00Ex: 0x01armazenado comoparte do “estado”da cache

:

Valid Bit Cache Tag

31

CMP237

Tamanho da linha x miss ratio

1 KB8 KB16 KB64 KB256 KB

256

40%

35%

30%

25%

20%

15%

10%

5%

0%

Mis

s ra

te

64164Block size (bytes)

CMP237

Tamanho da linha

• em geral, uma linha maior aproveita melhor a localidade espacial MAS– linha maior significa maior miss penalty

• demora mais tempo para preencher a linha– se tamanho da linha é grande demais em relação ao tamanho da cache, miss

ratio vai aumentar• muito poucas linhas

• em geral, tempo médio de acesso = Hit Time x (1 - Miss Ratio) + Miss Penalty x Miss Ratio

MissPenalty

Tamanho da linha

MissRatio explora localidade espacial

poucas linhas: comprometelocalidade temporal

Tempo médiode acesso

Miss Penalty& Miss Ratioaumentam

Tamanho da linhaTamanho da linha

CMP237

Quantos bits tem a cache no total?

• supondo cache com mapeamento direto, com 64 KB de dados, linha com uma palavra, endereços de 32 bits

• 64 KB -> 16 Kpalavras, 214 palavras, neste caso 214 linhas• cada linha tem 32 bits de dados mais um tag (32-14-2 bits) mais

um bit de validade:214 x (32 + 32 -14 -2 +1) = 214 x 49 = 784 x 210 = 784 Kbits

• 98 KB para 64 KB de dados, ou 50% a mais

CMP237

Mapeamento direto

• vantagens– não há necessidade de algoritmo de substituição– hardware simples e de baixo custo– alta velocidade de operação

• desvantagens– desempenho cai se acessos consecutivos são feitos a palavras com mesmo

índice– hit ratio inferior ao de caches com mapeamento associativo

• demonstra-se no entanto que hit ratio aumenta com o aumento dacache, aproximando-se de caches com mapeamento associativo– tendência atual é de uso de caches grandes

CMP237

Mapeamento conjunto – associativo

tag índice

tag dado

= ?

tag dado tag dado tag dado

= ? = ? = ?sim sim

Cache

índice

sim simnão

CMP237

Mapeamento conjunto – associativo

• mapeamento direto: todas as palavras armazenadas na cache devem ter índices diferentes

• mapeamento associativo: linhas podem ser colocadas em qualquer posição da cache

• compromisso: um nº limitado de linhas, de mesmo índice mas diferentestags, podem estar na cache ao mesmo tempo (num mesmo conjunto)

• nº de linhas no conjunto = associatividade

CMP237

Mapeamento conjunto – associativo

• vantagem em relação ao mapeamento completamente associativo: comparadores são compartilhados por todos os conjuntos

• algoritmo de substituição só precisa considerar linhas dentro de um conjunto

• muito utilizado em microprocessadores– Motorola 68040: 4-way set associative– Intel 486: 4-way set associative– Pentium: 2-way set associative

CMP237

Desvantagem da cache conjunto-associativo

• conjunto-associativa N-way X mapeamento direto– dado tem atraso extra do multiplexador– dado vem DEPOIS da decisão Hit/Miss e da seleção do conjunto

• numa cache com mapeamento direto, linha da cache está disponívelANTES da decisão Hit/Miss

– possível assumir um hit e continuar. Recuperar depois se for miss.

Cache DataLinha 0

Cache Tag Valid

: ::

Cache DataLinha 0

Cache TagValid

:: :

Cache Index

Mux 01Sel1 Sel0

Linha

CompareAdr Tag

Compare

OR

Hit

CMP237

Impacto da associatividade da cache

0%

3%

6%

9%

12%

15%

Eight-wayFour-wayTwo-wayOne-way

1 KB2 KB4 KB8 KB

Mis

s ra

te

Associativity 16 KB32 KB64 KB128 KB

CMP237

Fontes de misses

• compulsórios (cold start ou chaveamento de processos, primeira referência): primeiro accesso a uma linha

– é um “fato da vida”: não se pode fazer muito a respeito– se o programa vai executar “bilhões” de instruções, misses compulsórios

são insignificantes• de conflito (ou colisão)

– múltiplas linhas de memória acessando o mesmo conjunto da cache conjunto-associativa ou mesma linha da cache com mapeamento direto

– solução 1: aumentar tamanho da cache– solução 2: aumentar associatividade

• de capacidade– cache não pode conter todas as linhas accessadas pelo programa– solução: aumentar tamanho da cache

• invalidação: outro processo (p.ex. I/O) atualiza memória

CMP237

Fontes de misses

20%

Mis

s ra

te p

er ty

pe

2%

4%

6%

8%

10%

12%

14%

1 4 8 16 32 64 128

One-way

Two-way

Cache size (KB) Four-way

Eight-way

Capacity

misses compulsórios não aparecem

misses de capacidade (parte “branca”da curva) dependem do tamanho dacache

misses de conflito: dependem daassociatividade e do tamanho da cache

CMP237

Quantidade de misses segundo a fonte

Mapeam. direto Conj.-associat. N-way Complet. associativa

Missescompulsórios

Tamanho da cache

Misses de capacidade

Misses de invalidação

Grande Médio Pequeno

Mesmo Mesmo Mesmo

Misses de conflito Alto Médio Zero

Baixo Médio Alto

Mesmo Mesmo Mesmo

CMP237

3. Mecanismos de fetch e escrita

• estratégias para fetch de palavras ou linhas da memória principal– fetch por demanda– prefetch

• fetch por demanda– fetch da linha quando ocorre miss– estratégia mais simples, não exige hardware adicional

• prefetch– fetch da linha antes que ela seja necessária– p.ex: prefetch da linha i+1 quando a linha i é inicialmente referenciada– alternativa: prefetch da linha i+1 quando ocorre miss da linha i

CMP237

Operações de escrita

• leitura na cache não afeta conteúdo não há discrepância entrecache e memória principal

• escrita na cache: cópias da palavra na cache e na memória principal podem ter valores diferentes

• valores deveriam ficar iguais em razão de:– acessos de E/S feitos através da memória principal– acessos à memória principal por múltiplos processadores

• tempo médio de acesso à cache é aumentado pela necessidade de atualizações da memória principal

• mecanismos de coerência de escrita– write-through– write-back

CMP237

Mecanismo write-through

• write-through: cada escrita na cache é repetida imediatamente na memória principal

• escrita adicional na memória principal aumenta tempo médio de acesso à cache

• estatisticamente apenas 5% a 34% dos acessos à memória são escritas

CMP237

Mecanismo write-through

Tempo médio de acesso à cache Tma é dado porTma = Tc + (1 – h) Tb + w (Tm – Tc)

ondeTc = tempo de acesso à cache h = hit ratioTb = tempo de leitura de uma linha da memória principalTm = tempo de acesso a uma palavra da memória principalw = probabilidade de que acesso seja de escrita

supondoTc = 1 ns, Tb = Tm = 10 ns, h = 0.98, w = 0.2

Tma = 3,0 ns, sendo 0,2 ns devido a misses e 1,8 ns devido ao write-through

CMP237

Write-Through com Write Buffer

ProcessadorCache

DRAM

Write Buffer

• Write Buffer é necessário entre cache e memória principal– processador: escreve dados na cache e no write buffer– controlador de memória: escreve conteúdo do buffer na memória

• Write buffer é uma FIFO– típico número de posições = 4– funciona bem se: freqüência de escritas << 1 / ciclo escrita DRAM

• problema– freqüência de escritas > 1 / ciclo escrita DRAM– saturação do Write Buffer

CMP237

Saturação do Write Buffer

• freqüência de escritas > 1 / ciclo escrita DRAM– se esta condição existe por um longo período de tempo (porque tempo de

ciclo da CPU é rápido demais e/ou ocorrem muitas instruções store em seqüência):

• Write-Buffer terá overflow, não importa quão grande ele seja• solução para saturação do Write Buffer

– usar cache com write-back– instalar uma cache de segundo nível (L2)

ProcessadorCache

Write Buffer

DRAML2Cache

CMP237

Mecanismo write-back

• write-back: linha da cache só é escrita de volta na memória principal quando precisa ser substituída

• estratégia mais simples: escrita é feita mesmo que linha não tenha sido alterada

Tma = Tc + (1 – h) Tb + (1 – h) Tbonde o segundo termo (1–h) Tb é devido à escrita

• estratégia alternativa: só escrever de volta se linha foi alteradaexige um bit de tag para indicar modificações na linha

Tma = Tc + (1 – h) Tb + wb (1 – h) Tbonde wb = probabilidade de que linha tenha sido alterada

CMP237

4. Substituição de linhas

• quando ocorre um miss, uma nova linha precisa ser trazida da memória principal para a cache

• cache com mapeamento direto não precisa escolher qual linha dacache será substituída

• cache completamente associativa: pode-se escolher qualquer uma das linhas

• cache conjunto-associativa: deve-se escolher uma linha dentro de um conjunto fixado pelo índice

• algoritmo de substituição precisa ser implementado em hardware

CMP237

Algoritmos de substituição

substituição randômica• escolha de uma linha ao acaso para ser substituída• exemplo de implementação em hardware: contador

– contador é incrementado a cada ciclo do relógio– quando substituição é necessária, escolhe-se linha cujo endereço é igual ao

valor atual do contador– cache completamente associativa: contador de n bits se cache tem 2n

linhas– cache conjunto-associativa: contador de 2 bits numa cache com

associatividade = 4

first-in first-out (FIFO)• remover a linha que está há mais tempo na cache• implementação evidente: fila de endereços de linha

CMP237

Algoritmos de substituição

LRU – Least Recently Used• linha a ser substituída é aquela que há mais tempo não é referenciada• implementação mais simples em hardware: contador associado a cada

linha– quando hit ocorre, contador da linha correspondente é zerado– demais contadores são incrementados– linha com contador com valor mais alto é a substituída

• outras implementações– pilha de registradores– matriz de referência– métodos aproximativos

CMP237

5. Hierarquia de caches

• caches integradas dentro de um processador têm limitação de tamanho

• miss penalty na cache é muito grande, pela diferença entre os tempos de acesso da cache e da memória principal

• solução: caches em dois ou três níveis– cache integrada (L1, de primeiro nível) é de tamanho pequeno, p.ex. 8

Kbytes, e tempo de acesso menor– cache secundária (L2) tem tamanho maior, p.ex. 256 Kbytes, e tempo de

acesso maior• processadores recentes têm cache de terceiro nível (L3)

– cache L3 fora do chip do processador, cache L2 dentro• misses podem ocorrer em referências a qualquer nível de cache• transferências entre níveis de cache apresentam mesmos problemas e

possíveis soluções já discutidos

CMP237

6. Caches de dados e instruções

• dados e instruções: cache unificada x caches separadas• vantagens das caches separadas

– política de escrita só precisa ser aplicada à cache de dados– caminhos separados entre memória principal e cada cache, permitindo

transferências simultâneas (p.ex. num pipeline)– estratégias diferentes para cada cache: tamanho total, tamanho de linha,

organização• caches separadas são usadas na maioria dos processadores, no nível

L1• caches unificadas nos níveis L2 e L3

CMP237

Caches de dados e instruções

memória principal

cache instr. cache dados

instruções dados

unidadede acessoà memória

unidadede fetchde instr.

pipeline de instruções

processador

CMP237

Problemas com caches separadas

• código auto-modificável• instruções e dados colocados em posições próximas de memória

duas cópias da mesma linha estarão nas duas caches

• necessidade de controle adicional

CMP237

7. Medindo desempenho

• desempenho da cache depende ...– da organização (mapeamento)– do tamanho da cache e das linhas– do algoritmo de substituição– dos mecanismos de escrita e de fetch– dos programas sendo executados

• métodos de obtenção de estimativas de desempenho– simulação trace-driven– medida direta– modelagem matemática

CMP237

Medindo desempenho

• simulação trace-driven– programas típicos são executados– facilidade de trace do processador é usada para interromper após cada

instrução e registrar endereços de memória gerados pela instrução– registro é utilizado numa simulação– exige-se simulação de grande nº de instruções ( > 1 M )

• medida direta– hardware de monitoração permite coleta das referências à memória– registro é então utilizado na simulação– vantagem: todas as referências são coletadas, mesmo aquelas executadas

por trechos protegidos de código