Vous êtes sur la page 1sur 34

Capítulo 7

Computer Architecture and Organization by M. Murdocca and V. Heuring © 2007 M. Murdocca and V. Heuring
1
CAPITULO 7 - MEMÓRIA

Nos últimos anos a velocidade dos CPU’s tem duplicado a cada 18 meses para o mesmo preço.
A memória tem tido um aumento na mesma dimensão, quadruplicando de tamanho a cada 36 meses
para o mesmo preço.
No entanto, a velocidade da memória apenas tem aumentado a um ritmo de 10% ao ano para o
mesmo preço.

Enquanto a velocidade de processador e o tamanho da memória aumentam, também aumenta o


intervalo entre a a velocidade do processador e da memória.

Soluções de arquitectura ajudam a controlar este fosso de velocidades, por exemplo recorrendo a
vários níveis de memória.
Conteúdos do capítulo

7.1 Hierarquia da memória

7.2 Memória RAM

7.3 Organização do chip de memória

7.4 Caso de estudo: Memória Rambus

7.5 Memória Cache

7.6 Memória Virtual

2
CONTEÚDOS
Hierarquia da memória

3
Memória é organizada de uma forma hierárquica.

Topo: registos (rápidos, grandes em termos de espaço ocupado e consomem quantidades


consideráveis de energia).
Fundo: memórias de armazenamento secundário ou offline (tapes magnéticas...) com um custo baixo
por bit de armazenamento mas com tempos de acesso mais demorados.

À medida que subimos na hierarquia maior performance é realizada mas com custos maiores.

Na figura temos exemplo de custos de memória no início do séc. XXI para um computador desktop
típico:
- tipo de memória
- tempo de acesso
- custo por Mega Byte
- Quantidade de memória normalmente usada
- Custo típico (para o início do século)
Comportamento funcional de uma
célula de RAM

(a) Célula de RAM estática

(b) Célula de RAM dinâmica

4
RAM - Random Access Memory
- Random: significa que qualquer localização de memória pode ser acedida na mesma quantidade de tempo independentemente
da posição.
- não é 100% verdade porque dados próximos são mais rápidos de aceder num acesso por bloco do que aceder a words
individuais, mas o tempo necessário para aceder a uma word em particular é muito igual.

Figura (a):
- apresenta o comportamento funcional de uma célula de RAM que armazena um único bit.
- representa um elemento de memória como um flip-flop D (circuito electrónico capaz de armazenar dois estados), com controlos
adicionais que permitem que a célula seja seleccionada, lida e escrita.
- Linha de dados (bidireccional) para input e output de dados.
- Não representa a implementação física actual, apenas o seu comportamento funcional

Existem muitas formas de implementar uma célula de memória.

SRAM ( figura (a) )


- chips de RAM estática (SRAM): chips de RAM baseados em flip-flops.
- Conteúdos de cada localização persistem enquanto estiver energia aplicada aos chips. São rápidos mas relativamente grandes e
consomem muita energia.

DRAM (figura (b) )


- chips de RAM dinâmica (DRAM): usam um condensador que armazena um minuto de carga eléctrica, no qual o nível de carga
representa um 1 ou um 0 (ver figura b).
- 1 lógico pode ser armazenado no condensador colocando um 1 tanto no Select como no Read.
- Condensadores são mais pequenos do que flip-flops.
- Como as cargas dos condensadores dissipam-se com o tempo, têm de ser repostas/refrescadas frequentemente.
- Normalmente a DRAM é usada na memória principal: mais lenta, mais pequena e consome menos energia que a SRAM.
- Nota: nome “dinâmica” advém de ser necessário refrescar dinâmicamente a memória

SRAM vs DRAM:
- Enquanto na SRAM é necessário aplicar energia constantemente para manter os estados activos na DRAM basta refrescar o
estado periodicamente consumindo menos energia.
- Como é necessário refrescar periodicamente o estado da DRAM esta acaba por ser mais lenta que a SRAM
- SRAM é normalmente fisicamente maior do que a DRAM para o mesmo tamanho de dados
Pinout simplificado de um chip de
RAM

5
Organização de células RAM em chips:
- pretende mostrar como é implementado a principal propriedade da memória: random-access.

Pinout - termo usado para descrever como uma conexão eléctrica é ligada.

Pins A0-Am-1 : endereço de m-bit com linhas numeradas de 0 até m-1


CS (chip select): seleciona o módulo
WR : escrever/ler dados do chip. Operação de escrita ocorre quando WR=0
D0-Dw-1: Word de dados w-bit que é escrita ou lida do chip (linha de dados bidireccional)
tAA: atraso de tempo desde que as linhas de endereço são tornadas válidas até ao momento em que
os dados estão disponíveis no output para leitura, ou quando estamos a escrever tem de ser
assegurada válida a escrita após este tempo

As linhas de endereço A0-Am-1 no chip de RAM contêm um endereço que é descodificado de um


endereço m-bit numa das 2m localizações dentro do chip, cada qual com uma word de w-bit
associada.
O chip contém 2m x w bits (m equivale ao número de bits usados no endereço)
Representação simplificada de uma
RAM de 4 words com 4-bit

6
Representação simplificada de uma RAM de 2-bit (2m = 2x2 = 4) words de 4-bit.
Memória de 4 words com 4-bit por
word numa organização 2D

7
RAM que armazena quatro words (2m = 2x2 = 4) de 4-bit cada

Nota: normalmente temos visto exemplo com words de 32-bit, mas para simplificar vamos analisar
words de 4-bit.

RAM pode ser vista como uma colecção de registos:


1. Usar registos de 4-bit para armazenar as words.
2. Introduzir um mecanismo de endereçamento que permite seleccionar uma das words para leitura
ou escrita.

Figura apresenta a arquitectura para a memória conhecida como organização de duas dimensões (2D),
com words numa dimensão e bits noutra dimensão.

Mecanismo
- Duas linhas de endereços (A0 e A1) seleccionam a word para leitura ou escrita através do
descodificador 2 para 4.
- Os outputs dos registos podem ser ligados em conjunto porque o descodificador assegura que no
máximo um registo está activo num determinado momento e os restantes registos estão desligados
através do uso de buffers de 3-estados(ler,escrever ou desligado).
- A linha de CS no descodificador não é necessária , mas é usada no futuro para construir RAM’s
maiores.
- Linhas D0 a D3 introduzem a word na escrita
- Linhas Q0 a Q3 apresentam a word na leitura
Organização 2-1/2D de RAM de
64 words com 1-bit

8
Em chips pequenos de RAM é prático usar um único decoder para seleccionar uma das 2m words com w-bit.

Esta organização não é económica em chips de RAM normais (que normalmente têm uma forma quadrada) e requerem decoders
maiores:
- Supor que 1 chip de 64M tem 26 linhas de endereços (64x1024x1024 = 67.108.864 bytes = 226)
- Precisamos de um descodificador de 26-input: são muitos ANDS e teria um custo elevado em termos de área do chip
Estrutura de descodificaçao alternativa:
- colocar as words em quadrado
- descodificar colunas e linhas separadamente de linhas
- conhecida como ORGANIZAÇÃO 2-1/2D
- é a organização mais presente nos circuitos de RAM

Figura:
- apresenta RAM de 26-word x 1-bit
- 6 linhas de endereçamento estão divididas igualmente entre um descodificador de linha e outro de coluna (o de coluna é de
facto uma combinaação de MUX/DEMUX)
- Uma linha de dados bidireccional é usada para input e output
- Durante uma operação de READ, uma linha inteira é seleccionada que irá alimentar a coluna MUX que seleciona apenas um único
bit para output
- Durante uma operação de WRITE, o bit a ser escrito é distribuído pelo DEMUX para a coluna destino, e o descodificador de linha
selecciona a linha apropriada para a escrita.
- As colunas têm dois bits de comprimento, um para seleccionar a coluna e outro com o dado lido/escrito (bidireccional)

Na prática, para reduzir o número de pins, existem normalmente m/2 pins de endereços no chip.
- Os endereços das colunas e das linhas são multiplexados em tempo nestas m/2 linhas de endereços.
1. Primeiro o endereço m/2-bit da linha é aplicado em conjunto com um sinal de endereço de linha (RAS).
2. O endereço da linha é fixado e descodificado pelo chip.
3. É aplicado o endereço m/2-bit da coluna em conjunto com um sinal de endereço de coluna (CAS).
4. Podem existir pins adicionais para controlar o refrescamento do chip e outras funções da memória.
5. O uso do sinal CAS também reduz o relativamente grande tempo de acesso para a transferência após o primeiro byte porque a
descodificação da linha já foi concluída e apenas é necessária a descodificação da coluna para o acesso a localizações sucessivas!!
Duas RAM de 4 words com 4-bit são usadas
para criar uma RAM de 4 words com 8-bit

9
Construir módulos de RAM grandes a partir de pequenos módulos de RAM.
Por exemplo:
- 8 módulos de RAM de 16M x 1-bit (words de 1 bit com 16 bits de endereço) podem ser combinados
para criar 1 módulo de RAM de 16M x 8-bit (words de 8 bits com 16 bits de endereço)
- 16 módulos de RAM de 16M x 8-bit podem ser combinados para criar 1 módulo de RAM de 256M x
8-bit.

Figura (aumentar número de bits por word):


- usar chip de RAM de 2-bit words de 4-bit
- criar um módulo de RAM de 2-bit x 8-bit
a) usar dois chips
b) ligar os CS dos dois chips para que sejam activados em conjunto
c) 4 bit’s da word ficam armazenados num chip (D0 a D3 e Q0 a Q3) e os restantes 4 bit’s da word
armazenados noutro chip (D4 a D7 e Q4 a Q7)
Duas RAM de 4 words com 4-bit constroem
uma RAM de 8 words com 4-bit

10
Figura (aumentar número de words disponível no chip):
- usar chip de RAM de 2-bit x 4-bit
- criar um módulo de RAM de 3-bit x 4-bit
a) As 8 words são distribuídas pelos dois chips de 4 words
b) A linha de endereço A2 é necessária porque agora existem 8 words para endereçar (23)
c) Um descodificador em A2 activa os CS do chip superior ou do chip inferior (existe uma ligação para
o CS de cada chip)
d) As linhas A0 e A1 seleccionam a word para o chip que estiver activo.

Os exemplos vistos nestes dois slides permitem escalar a RAM tanto em tamanho de word como em
número de words.
Módulo de
Memória
Single-In-line

Diagrama
esquemático de
módulo de
memória dual in-
line de 256MB.

Fonte: adaptado de
http://www-
s.ti.com/sc/ds/
tm4en64kpu.pdf.

11
No quadro (vista esquemática da memória):
- Para formar uma word de 64-bit com 16 chips de memória oito bits (1 byte) é acedido em paralelo
para cada chip

RAS[0:7]: seleccionam as linhas para a word (256 linhas = 28)


CAS[0:3]: seleccionam a coluna para a word (16 colunas = 24)

Circuito em quadrado na esquerda:


- DQ[0:7] , DQ[8:15] , DQ[16:23] , DQ[24:31] - primeiros 32 bits da word

Circuito em quadrado na direita:


- DQ[32:39] , DQ[40:47] , DQ[48:55] , DQ[56:63] - restantes 32 bits da word
Módulo de
Memória
Single-In-Line

Módulo de
memória de 256
MB dual in-line
organizado para
words de 64-bit
com 16 16M × 8-
bit chip’s de RAM
(8 chip’s em cada
lado do DIMM).

12
Módulos de memória comerciais

Figura:
- Organização de 16 chips de 16M(16*1024*1024) x 8-bit num DIMM (Dual In-line Memory Module)
que formam um módulo de 32M x 64-bit (256MB):
- 16 chips no total permitem criar 32M x 64-bit
- 32M x 64-bit = 256M x 8-bit = (256*1024*1024) x 8-bit = 228 x 8-bit , logo necessitaríamos de
28 linhas de endereço
- Mas apenas 14 linhas de endereço são fornecidas (A0 a A13)
- Os endereços de 14-bit das linhas e das colunas são carregados separadamente
- Os sinais CAS e o RAS são aplicados depois da correspondente porção do endereço estar
disponível.
- Apesar desta organização parecer dobrar o tempo que leva a aceder a uma localização particular
de memória, no geral, o tempo de acesso é muito melhor porque apenas os endereços da linha ou da
coluna necessitam ser actualizados.

No quadro (vista descritiva dos pins da memória):


- contactos eléctricos (pins) 1 a 84 na parte frontal do módulo
- contactos eléctricos (pins) 65 a 168 na parte traseira do módulo
ROM armazena 4 words de 4-bit

13
ROM - Read-Only Memory

Quando um programa é carregado em memória, permanece lá até ser sobrescrito ou a energia ser
cortada.
Para algumas aplicações o programa nunca muda e portanto é ligado directamente no hardware numa
memória só de leitura (ROM),

Usado em:
- vídeo-jogos
- calculadoras
- micro-ondas
- controladores de injecção de combustível em automóveis
- ...

ROM:
- apenas necessita de um descodificador, linhas de output e alguns gates lógicos (não requer flip-
flops nem condensadores)

Figura:
- ROM que armazena quatro words de 4-bit
- Cada endereço corresponde a uma word diferente (endereços 00,01,10 e 11)

PROM ( Programmable ROMs):


- permitem que um utilizador escreva na ROM com um dispositivo próprio: PROM burner (também
permitem ler)
Uma tabela de pesquisa (LUT)
implementa uma ALU de 8-bit

14
PROMS (Programable ROM’s) podem ser usadas para controlar unidades e mesmo para controlar a ALU
(Arithmetic Logic Unit)

Exemplo da configuração de uma ALU que realiza 4 funções (adição, subtracção, multiplicação e
divisão) em operandos de 8-bit.
- Podemos gerar a tabela da verdade que gera todas as 216 combinações de operandos
- Podemos gerar a tabela com as 22 combinações de funções
- e no final enviar as tabelas para um PROM burner que carrega numa PROM

Esta tabela de pesquisa (Lookup Table - LUT) por força bruta não é tão impraticável como parece e é
usada em muitas situações.
- existem 28 x 28 combinações para os dois operandos
- existem 22 funções
- portanto precisamos de 28 x 28 x 22 = 218 words na PROM (cada word com o resultado para a
operação e operandos em causa)
Memória FLASH

(a) Vista externa de módulo de memória flash


(b) Componentes internos do módulo flash
Fonte: adaptado de HowStuffWorks.com
15
MEMÓRIA FLASH

- Fornece um tipo de memória RAM re-escrita electricamente que mantém o seu conteúdo quando a
energia eléctrica é removida.
- Memória não-volátil
- Usado em câmeras, PDAS, telemóveis ...

Cada secção de células de memória pode ser eliminada com um único passo, flash, daí o nome da
memória.

Componentes da memória flash:


- Base de plástico
- camada de resina para juntar os componentes
- chip de memória com ligações para contactos externos
- contactos externos
Memória cache num sistema computacional

Princípio de localidade: uma localização de memória


referenciada recentemente é provável que seja referenciada
novamente (localidade temporal); um vizinho de uma localização
de memória referenciada recentemente é provável que seja
referenciada (localidade espacial).

16
O acesso à memória é geralmente lento quando comparado com a velocidade do CPU.
Assim, a memória coloca um engarrafamento significativo na performance do computador.
Como a maior parte das referências a memória provêm de um pequeno conjunto de localizações, o
princípio da “localidade” pode ser explorado para melhorar a performance.

Memória cache
- memória pequena mas rápida na qual os conteúdos das localizações mais acedidas são mantidas.
Colocada entre a memória principal e o CPU.
- um programa quando está em execução primeiro pesquisa a memória cache e, caso a word
pretendida esteja presente, esta é lida da cache.
- em princípio uma memória cache maior é desejável para que um largo número de referências de
memória possa ser mantido. Infelizmente uma memória cache maior é mais lenta e com maior custo
que uma cache pequena.
- Uma solução é criar vários níveis de cache:
i) usar uma cache o mais próximo possível do CPU, o mais rápida possível para um determinado
tamanho relativamente pequeno.
ii) compensar com uma outra cache mais próxima da memória.

Figura da esquerda (arquitectura sem cache):


- CPU com clock a 3.8GHz
- ... mas comunica com uma ligação mais lenta de System Bus com a memória a 800MHz
- .. memória que suporta uma velocidade de clock de 533MHz

NOTA: system bus é conhecido como FrontSide Bus

Figura da direita (arquitectura com cache):


- CPU com clock a 3.8GHz e cache construída no próprio CPU
- CPU comunica com cache na velocidade nativa através do Backside Bus
- ... mas comunica com uma ligação mais lenta de System Bus (a 800MHz) com a memória
- .. memória que suporta uma velocidade de clock de 533MHz
Esquema de “mapeamento
associativo” para memória cache

17
ESQUEMA DE MAPEAMENTO ASSOCIATIVO DA MEMÓRIA CACHE

MEMÓRIA PRINCIPAL
- Espaço de memória de 232 words divididos em 227 blocos de 32 words. Como 32=25 então temos 25
words por bloco
- 232=227x25

MEMÓRIA CACHE
- cache do exemplo consiste de 214 slots nos quais os blocos da memória principal é colocada.
- qualquer bloco da memória principal pode ser mapeado para um slot da memória cache
- campo com tag de 27-bit é adicionado a cada slot para identificar o bloco de memória principal em
causa
i ) armazena um identificador para o bloco entre 0 e 227-1
ii) o identificador corresponde aos 27-bit mais significativos do endereço de memória de 32-bit
iii) todas as tags são armazenadas numa memória tag especial onde podem ser pesquisadas em
paralelo
iv) quando um novo bloco é armazenado em cache, a sua tag é armazenada na localização respectiva
da memória tag
- quando um programa é carregado em memória para executar, a cache é limpa
i) valid bit: indica se o slot armazena uma linha que pertence ao programa em execução
ii) dirty bit: indica se uma linha foi modificada enquanto estava carregada na cache (em caso positivo
tem de ser re-escrito na memória antes do slot poder ser libertado para outra linha)
- hit: termo dado quando uma referência é encontrada na memória cache
- miss: termo dado quando uma referência não é encontrada na memória cache
- Quando um programa é carregado em memória os “valid bits” são colocados a zero e portanto a
pesquisa da 1ª instrução resulta num miss. O bloco que causa o “miss” é então localizado na memória
principal e carregado em memória cache.
Exemplo de mapeamento associativo

Considere como um acesso à localização de memória


(A035F014)16 é mapeado para a cache numa memória 232 words.
A memória é dividida em 227 blocos de 25 = 32 words por bloco,
e a cache consiste de 214 slots:

Se a word endereçada estiver na cache, será encontrada na word


(14)16 de um slot com a tag (501AF80)16, que é construída dos
27 bits mais significativos do endereço (A035F014)16. Se a word
endereçada não estiver na cache, então o bloco correspondente
ao campo de tag (501AF80)16 é trazido da memória principal
para um slot disponível na cache, e a referência de memória é
satisfeita a partir da cache.

18
Mapeamento de blocos de memória principal em slots de cache:
- particionar um endereço em campos para a tag e a word (conhecido como byte field)

Quando uma referência é feita para um endereço de memória principal:


- o hardware da cache intercepta a referência e pesquisada a memória tag
- para cada slot, se o valid bit for 1 é comparado o campo tag do endereço de referência com o
campo tag do slot
- todas as tags são pesquisadas em paralelo usando “MEMÓRIA ASSOCIATIVA”
- se alguma tag na memória tag da cache coincidir com a tag do endereço de referência então a
word é carregada do slot na posição especificada pelo campo da word
- se a word referenciada não for encontrada na cache então o bloco da memória principal que
contem a word é carregado para a cache e a word referenciada é carregada do respectivo slot na
cache. Os campos tag, valid e dirty são actualizados.

EXEMPLO (figura):
- mapeamento em cache do acesso à localização de memória A035F01416
- 27 bits à esquerda formam a tag e 5 bits à direita indicam a word (nota: cada slot tem 32 words =
2 5)
- Se o endereço está na cache é encontrado na word 1416 (101002) do slot com a tag 501AF8016
- Se o endereço não está na cache é trazido da memória principal o bloco correspondente à tag
501AF8016 para um slot disponível na cache e a referência que causou o “miss” é lida da cache

PROBLEMAS DESTE ESQUEMA (MEMÓRIA ASSOCIATIVA):


- decidir qual o slot a libertar quando é necessário trazer um bloco para a cache, pode ser complexo
- requer hardware e introduz atrasos nos acessos à memória
- quando a cache é procurada é necessário comparar a tag do endereço de referência com todas as
tags da cache
Atribuição de área em mapeamento associativo

Esquema de atribuição de área para mapeamento associativo


baseado nos bits armazenados:

19
ÁREA ATRIBUÍDA PARA ESQUEMA DE MAPEAMENTO ASSOCIATIVO baseado nos bits armazenados

- Existe 214 slots de cache


- Cada word tem 8-bit
- Cada slot armazena 256 bits (32 words x 8-bit) para a linha de cache, 27 tag bits, 1 valid bit e 1
dirty bit
- Custo do espaço dominante: 214 x (256 linha + 27 tag + 1 valid + 1 dirty)bits = 4.669.440-bit

MEMÓRIA ASSOCIATIVA:
- memórias pesquisáveis em paralelo para o seu conteúdo (mecanismo para pesquisar na memória tag
em paralelo)
- Se restringirmos onde cada bloco de memória pode ser colocado em memória cache, podemos
eliminar a necessidade de memória associativa (que tem um custo elevado). Por exemplo com cache
mapeada directamente
Políticas de substituição
Quando não existem slots disponíveis nos quais colocar um
bloco, é implementada uma política de substituição. A política de
substituição governa a escolha do slot que deve ser libertado
para o novo bloco.

As políticas de substituição são usadas nos esquemas de


substituição associativo e conjunto associativo, e também na
memória virtual.

Menos usado recentemente (LRU - Least recently used)

Primeiro-a-entrar/primeiro-a-sair (FIFO - First-in/first-out)

Menos usado frequentemente (LFU - Least frequently used)

Aleatório

Óptimo (usado somente para análise - analisar atrás no tempo)

20
POLÍTICAS DE SUBSTITUIÇÃO DE SLOTS DA CACHE

- Se existirem slots não usados (por exemplo quando um programa inicia a execução) pode ser usado
um slot qualquer com valid bit 0.
- Se não existirem slots livres deve ser libertado um slot para a nova linha de cache

4 Políticas de substituição:
- Least Recently Used (LRU)
. adicionado uma “time stamp” a cada slot que é actualizada sempre que o slot é acedido
. libertar o slot com “time stamp” mais antigo
- Least Frequently Used (LFU)
. adicionar um contador de frequência a cada slot que é incrementado sempre que o slot é acedido
. libertar o slot com o contador mais baixo
- First-in First-out (FIFO)
. substitui os slots um de cada vez de acordo com a ordem da sua localização física na cache
- Aleatório
. seleccionar um slot aleatoriamente

5ª Política de substituição (usada somente para análise):


- Óptimo
. não é prática mas é usada para comparar a eficiência de outras políticas com a melhor possível
. a substituição óptima só é determinada depois de um programa ter executado (de pouca ajuda para
um programa em execução)
. pode ser útil se o mesmo programa executar no mesmo conjunto de dados novamente

Estudos mostram que:


- LFU é apenas ligeiramente melhor que Random
- LRU pode ser implementada eficientemente e por vezes é preferível às outras por esta razão.
Esquema de “mapeamento directo”
para memória cache

21
ESQUEMA DE MAPEAMENTO DIRECTO DE MEMÓRIA CACHE

Cada slot de cache corresponde a um conjunto explícito de blocos da memória principal.


Cada bloco da memória principal só pode ser mapeado para um slot específico.
Cada slot pode receber mais do que um bloco.

- memória principal de 232 words, o que corresponde a 227 blocos de 32 words por bloco
- memória cache de 214 slots
- um total de 227/214=213 blocos de memória podem ser mapeados para cada slot
- para manter um registo de qual dos 213 blocos possíveis está em cada slot é adicionado uma tag de
13-bit que armazena um identificador de 0 a 213-1
- mapeamento de blocos de memória principal para slots de cache conseguido dividindo um endereço
em campos para tag, slot e word.
- referência para um endereço da memória principal:
i) o campo de slot identifica em qual dos 214 slots é encontrado o bloco se estiver em cache
ii) se o valid bit estiver a 1 é comparado o campo tag do slot com o do endereço de referência
iii) se o valid bit estiver a 1 e o endereço de referência for igual é retirada a word da posição
especificada pelo campo word
iv) se o valid bit estiver a 1 mas a tag for diferente é gravado o slot na memória se o dirty bit estiver
a 1 e o bloco correspondente de memória é carregado no slot da cache
Exemplo de mapeamento directo
Para uma cache de mapeamento directo , cada bloco de memória
principal pode ser mapeado apenas num slot, mas cada slot
pode receber mais do que um bloco. Considere como um acesso
à localização de memória (A035F014)16 é mapeado para a cache
numa memória de 232 word. A memória é dividida em 227 blocos
de 25 = 32 words por bloco, e a cache consiste de 214 slots:

Se a word endereçada estiver na cache, será encontrada na word


(14)16 do slot (2F80)16, o qual tem a tag de (1406)16.

22
EXEMPLO (figura):
- mapeamento em cache do acesso à localização de memória A035F01416
- 13 bits à esquerda formam a tag, 14 bits seguintes identificam o slot e 5 bits à direita indicam a
word (nota: cada slot tem 32 words = 25)
- Se o endereço está na cache é encontrado na word 1416 (101002) do slot 2F8016(101111100000002)
se a tag for 140616
- Se o endereço não está na cache é trazido da memória principal o bloco A035F01416 para o slot
2F8016 e lida a word 1416
Atribuição de área em mapeamento directo

Atribuição de área no esquema de mapeamento directo baseado


nos bits armazenados:

256 bits

23
ÁREA ATRIBUÍDA PARA ESQUEMA DE MAPEAMENTO DIRECTO baseado nos bits armazenados

- Existem 214 slots de cache


- Cada word tem 8-bit
- Cada slot armazena 256-bit (32 words de 8-bit) para a linha de cache + 13 tag bits + valid bit +
dirty bit
- Custo do espaço dominante: 214 x (256 linha + 13 tag + 1 valid + 1 dirty)bits = 4,440,064 bits
- menos 229,376 bits que no mapeamento de memória associativa

VANTAGENS:
- esquema relativamente simples de implementar
- ocupa menos espaço que memória associativa

PROBLEMA:
- O que acontece quando um programa acede a words que estão separadas por 219=214x25 words
(que é o tamanho da cache)?
. cada referência à memória resulta num miss que obriga a que um bloco seja carregado da memória
principal mesmo que só seja parcialmente acedido a uma word
. pior ainda, apenas uma pequena fracção da cache é utilizada
. isto acontece em cálculos de matrizes com expoentes de 2 e não é muito invulgar
- alternativa é combinar os aspectos de mapeamento associativo com mapeamento directo
Esquema de “conjunto de mapeamento
associativo” para memória cache

24
ESQUEMA DE MAPEAMENTO DE CONJUNTO ASSOCIATIVO DE MEMÓRIA CACHE

Combina a simplicidade do mapeamento directo com a flexibilidade do mapeamento associativo.


Mais prático que mapeamento associativo porque a porção associativa está limitada a alguns slots que
fazem o conjunto.
Neste exemplo dois blocos fazem um conjunto, portanto é um conjunto de cache associativa two-
way .Se existissem 4 slots por conjunto seria four-way.
Cada bloco da memória principal só pode ser mapeado para um conjunto específico.
Cada slot pode receber mais do que um bloco.

- memória principal de 232 words, o que corresponde a 227 blocos de 32 words por bloco
- memória cache de 214 slots
- um total de 214/2=213 conjuntos
- quando um endereço é mapeado para um conjunto, o esquema de mapeamento directo é usado e o
mapeamento associativo é usado dentro do conjunto para determinar o slot em causa.
- o formato de um endereço é dividido em 14-bit para a tag, 13-bit para o conjunto e 5-bit para a
word
- se usarmos conjuntos de four-way seria necessário 214/22=212 conjuntos mas precisamos de mais
mapeamento associativo para cada conjunto.
Exemplo de mapeamento de conjunto associativo

Considere como um acesso à localização de memória


(A035F014)16 é mapeado na cache para uma memória de 232
word. A memória é dividida em 227 blocos de 25 = 32 words por
bloco, existem também dois blocos por conjunto, e a cache
consiste de 214 slots:

Os 14 bits mais à esquerda formam o campo da tag, seguido de


13 bits para o campo do conjunto, seguido de 5 bits para o
campo da word:

25
EXEMPLO (figura):
- mapeamento em cache do acesso à localização de memória A035F01416
- 14 bits à esquerda formam a tag, 13 bits seguintes identificam o conjunto e 5 bits à direita indicam
a word (nota: cada slot tem 32 words = 25)
- Se o endereço está na cache é encontrado na word 1416 (101002) do conjunto 1F8016
(01111100000002) com a tag 280D16
Atribuição de área em mapeamento de conjunto associativo

Atribuição de área para o esquema de mapeamento de conjunto


associativo baseado nos bits armazenados:

26
ÁREA ATRIBUÍDA PARA ESQUEMA DE MAPEAMENTO DE CONJUNTO ASSOCIATIVO baseado nos bits
armazenados

- Existe 214 slots de cache


- Cada word tem 8-bit
- Cada slot armazena 256-bit (32 words de 8-bit) para a linha de cache + 14 tag bits + valid bit +
dirty bit
- Custo do espaço dominante: 214 x (256 linha + 14 tag + 1 valid + 1 dirty)bits = 4,456,448 bits
- muito menos que no mapeamento associativo e apenas ligeiramente maior que no mapeamento
directo
- vastamente usado nos microprocessadores
Políticas de leitura e escrita em cache

27
PERFORMANCE DE CACHE

Objectivo de usar memória cache - performance em tempo de execução

Figura resume as políticas para leitura e escrita na cache:


- políticas dependem se a a word solicitada está ou não em cache
- não existe resposta simples para qual é a melhor política. A organização da cache é optimizada para cada
arquitectura e para o conjunto de programas que o computador executa.

LEITURA
- se uma operação de read resulta num cache hit então os dados são imediatamente re-encaminhados para o CPU
- se uma operação de read resulta num cache miss então toda a linha que contém a word é lida para a cache
- Load-through: técnica que consiste em re-encaminhar para o CPU uma word que causou um cache miss, logo que é
lida para a cache e antes de ter terminado que todo o slot da cache seja pre-enchido com a linha. Pode não haver
melhoria de performance se a word estiver na última posição do bloco.

ESCRITA
- nas operações de escrita pode existir duas cópias da word (uma em cache e outra na memória principal)
- Write-through: técnica que consiste em actualizar simultaneamente uma word na cache e na memória principal.
- Write-back: técnica que consiste em atrasar a operação de escrita na memória principal até que a linha de cache seja
removida da cache, esta operação requer um dirty bit
- Write-allocate: técnica que consiste em trazer uma linha para a cache e actualizar a word da cache com o novo valor
- Write No-Allocate: técnica que consiste em actualizar uma word directamente na memória principal sem envolver a
cache

ARQUITECTURA DE HARVARD (split cache)


- usar caches separadas para instruções e dados
- dados e instruções são armazenados em diferentes secções de memória
- como slots de instruções nunca podem ser “dirty” uma cache de instruções é mais simples que uma cache de dados
Performance da cache

Hit ratio e tempo efectivo de acesso para cache de nível simples:

28
PERFORMANCE DE CACHE

Hit ratio: dividir número de words referenciadas na cache pelo número total de referências à memória.

Effective access time: dividir tempo total despendido a aceder memória pelo número total de
referências à memória.
Performance de cache

Hit ratios e tempos de acesso efectivos para cache multi-nível:

29
PERFORMANCE DE CACHE (exemplo para cache de múltiplos níveis)

Cache Level 1: cache mais rápida construída no mesmo chip do processador com velocidades muito
próximas do cpu

Cache L2, L3...: mais afastadas do CPU do que cache L1 mas no mesmo circuito integrado do CPU.

Cache de dados e instruções são normalmente mantidas separadamente na cache L1 (split cache).
Cache L2 e L3 armazenam normalmente dados e instruções (unified).

Para calcular o Hit ratio e tempo de acesso efectivo numa cache multinível é necessário registar os hits
e misses de todas as caches.

H1: hit ratio da cache L1


H2: hit ratio da cache L2 (mesmo que miss ratio da cache L1)
TEFF: Tempo de acesso efectivo geral
Tabela de eventos para um
programa exemplo

30
Foram gravados os eventos enquanto o programa executou no quadro do slide

- como memória estava vazia, primeira instrução a executar resultou num miss
- 1º evento: miss na localização 48, foi carregado o bloco 3 no slot 3 (levou 2500ns) mas como era
usado Load-through após a word ser carregada foi imediatamente passada ao CPU enquanto o resto
do bloco foi carregado no slot
- 2º evento: 15 hits para localizações entre 49 e 63
- (...)

Total hits: 213


Total misses: 5
Total acessos: 213+5=218
Cálculo dos tempos “hit ratio” e
tempo de acesso efectivo para
programa exemplo

31

Hit ratio: 97.7% !!!


Tempo de acesso efectivo: 136ns

apesar de um hit ratio de 97.7% o tempo de acesso efectivo é quase 75% maior que o tempo de acesso
à cache devido ao tempo passado a aceder a um bloco da memória principal
Memória cache multi-nível

Como exemplo, considere uma cache de dois níveis nas quais o


hit time de L1 é 5 ns, o hit time de L2 é 20 ns, e o miss time de
L2 é 100 ns. Existem 10,000 referências de memória das quais
10 causam L2 misses e 90 causam L1 misses. Compute os hit
ratios das caches L1 e L2 e o tempo de acesso efectivo global.

H1 é o rácio do número de vezes que a word acedida estiver na


cache L1 com o número total dos acessos à memória cache.
Existe um total de 85 (L1) e 15 (L2) misses, portanto:

(Continua no próximo slide)

32
Exemplo:
- cache de 2 níveis
- hit time de L1 5ns
- hit time de L2 20ns
- miss time de L2 100ns
- existem 10.000 referências de memória das quais 10 causam L2 misses e 90 causam L1 misses.

H1 - rácio do número de vezes que uma word é acedida na cache L1 com o total de número de
acessos à memória
Memória cache multi-nível
H2 é o rácio do número de vezes que a word acedida esteve na
cache L2 com o número de vezes que a cache L2 foi acedida,
portanto:

O tempo de acesso efectivo é:

33
H2 - rácio do número de vezes que uma word é acedida na cache L2 com o total de número de
acessos à cache L2
Exemplo de cache de mapeamento
directo
Computar o hit ratio e
tempo de acesso
efectivo para um
programa que executa
nas localização de
memória 48 a 95, e
efectua loops 10 vezes
de 15 a 31.

Cache de mapeamento
directo tem 4 slots de
16 words, um tempo de
hit de 80 ns, e um
tempo de miss de 2500
ns. A cache está
inicialmente limpa.

34
Exemplo:
- cache de mapeamento directo com 4 slots de 16 words
- tempo de acesso à cache 80ns
- tempo de transferência de blocos da memória para cache 2500ns
- usado Load-through
- cache inicialmente vazia

Execução:
- programa simples executa das localizações de memória 48-95
- faz ciclos 10 vezes de 15-31 antes de parar

Vous aimerez peut-être aussi