Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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
2
CONTEÚDOS
Hierarquia da memória
3
Memória é organizada de uma forma hierárquica.
À 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
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
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.
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.
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.
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
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.
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)
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
- 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.
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.
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
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)
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
19
ÁREA ATRIBUÍDA PARA ESQUEMA DE MAPEAMENTO ASSOCIATIVO baseado nos bits armazenados
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.
Aleatório
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
21
ESQUEMA DE MAPEAMENTO DIRECTO DE MEMÓRIA CACHE
- 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:
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
256 bits
23
ÁREA ATRIBUÍDA PARA ESQUEMA DE MAPEAMENTO DIRECTO baseado nos bits armazenados
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
- 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
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
26
ÁREA ATRIBUÍDA PARA ESQUEMA DE MAPEAMENTO DE CONJUNTO ASSOCIATIVO baseado nos bits
armazenados
27
PERFORMANCE DE CACHE
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
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
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.
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
- (...)
31
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
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:
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