Você está na página 1de 54

Fundamentos da Arquitetura de Computadores

Memria Cache

Prof. Andr Renato 1 Semestre / 2012

Memria Cache
Vamos

revisar alguns pontos importantes:

O principal uso dos sistemas computacionais para execuo de programas; A velocidade do processador bem maior do que a da memria principal; O processador precisa de dados da memria para realizar operaes; Na maior parte do tempo, o processador fica ocioso, esperando o dado chegar da memria;

Memria Cache
Para

que meu sistema computacional possa melhorar de desempenho preciso tratar o ponto que est sendo o gargalo do processamento; Se eu entender como funciona a execuo de um programa e como o acesso memria, eu vou conseguir melhorar o desempenho;

Memria Cache
O

que acontece com um programa qualquer (Word, por exemplo) aps ser iniciado pelo usurio?
O

estudo do fluxo de execuo dos programas mostrou que eles podem ser divididos e executados por partes.

Memria Cache

Memria Cache
Assim,

os programas costumam executar um pequeno grupo de instrues vrias vezes em diversos momentos; Foi elaborado ento o princpio da localidade como forma de ajudar na melhoria do desempenho de execuo dos programas;

Memria Cache
O

princpio da localidade uma tentativa de prever qual ser a demanda futura da CPU por instrues do programa que esto na memria principal; Ele divido em duas partes: localidade espacial e localidade temporal;

Memria Cache
A localidade

espacial baseada em uma das principais estruturas de controle de fluxo: a sequncia; muito comum que um programa seja composto por diversos comandos que devem ser executado um aps o outro;

Memria Cache
Na

hora da compilao, estes comandos so transformados em instrues de mquina que ficam prximas entre si;
Assim,

se um programa precisa de uma instruo que est na clula X da memria, muito provvel que em breve ele precise da instruo que est na clula X+1, X+2, X+3....

Memria Cache
Sendo

comum que um grupo de instrues seja executado mais frequentemente que os demais, bem provvel que aps executar uma instruo T, em breve, o programa execute a instruo T novamente;

Memria Cache
Como

tirar proveito do princpio da localidade? O projetista do sistema vai criar um elemento de memria intermedirio entre CPU/MP, chamado de memria cache.

Memria Cache
Ele

deve ter elevada velocidade e ser grande o suficiente para guardar partes do programa, aproveitando ao mximo o princpio da localidade e pequena o suficiente para no elevar muito o custo do sistema.
Como

vai funcionar o sistema?

Memria Cache
1)

Sempre que a CPU precisar de um informao (dado ou instruo), ela acessa a memria cache. 2) Se a informao estiver l, chamado de acerto de cache (cache hit) e ela transmitida em velocidade compatvel com a CPU.

Memria Cache
3)

Se a informao no estiver, chamado de falha de cache (cache miss). A informao ento pedida MP e enviada para a CPU.

No entanto, no s a informao pedida MP, mas tambm as informaes subsequentes, pressupondo que estas sero solicitadas mais tardes princpio da localidade espacial.

Memria Cache

Memria Cache
O

desempenho do sistema s vai aumentar se a quantidade de hits for bem maior do que a quantidade de misses. Isto necessrio pois quando ocorre um miss h um gasto extra de tempo para trazer o conjunto de informaes da MP para a cache e depois enviar para a CPU a informao inicialmente solicitada por ela.

Memria Cache
Estudos

mostram que o ndice de acertos (hit rate) deve ser de 80% a 99%; Ou seja, em pelo menos 80% dos casos, a CPU consegue encontrar a informao na memria cache;
A taxa

de acerto pode chegar a 100%?

Memria Cache
Tipos

A mais usual a cache de MP; Existe tambm a cache de disco: nela a cache funciona de maneira idntica em relao aos dados que so buscado no disco, porm utilizada uma parte da MP para fazer as vezes de cache do disco.

de memria cache:

Memria Cache
Cache

Os projetistas desenvolveram vrios tipos de cache de MP, com caractersticas de velocidade e capacidade de armazenamento diferente, formando uma verdadeira hierarquia de memrias cache; So utilizadas memrias SRAM; As caches so divididas em nveis, sendo os primeiros nveis mais prximos da CPU.

em mltiplos nveis:

Memria Cache
Cache

nvel 1 (L1): sempre localizada no interior do processador, muito rpida, pouca capacidade; Cache nvel 2 (L2): localizada na placame. Atualmente os processadores j trazem consigo a L2 dentro do mesmo chip; Cache nvel 3 (L3): existe apenas para poucos processadores, normalmente externa ao chip;

Memria Cache
CPU

L1

L2

L3

MP

Memria Cache
Como

a memria cache no poder ter o mesmo tamanho da MP, surge uma questo? Onde colocar os dados que chegam para serem armazenados at que a CPU precise deles? O endereo da MP no serve mais como referncia direta....

Memria Cache

preciso fazer uma associao entre os endereos da MP e as linhas da memria cache para que seja possvel procurar por um informao l. Em primeiro lugar, necessrio lembrar que a informao pedida pela cache MP vem em blocos. Logo, a MP deve ser dividida no mais em clulas, mas em blocos de clulas.

Memria Cache
Bloco com 4 clulas

Bloco com 8 clulas

Memria Cache
Mapeamento

Neste modelo, cada bloco da MP pode estar em qualquer uma das linhas da cache, pois no h uma posio prdefinida; Por exemplo, o bloco 147 pode estar na linha 35 da cache. Em uma outra vez, ele pode estar na linha 102. Como saber qual bloco est em cada uma das linhas da cache?

associativo:

Memria Cache

preciso guardar em cada linha, alm das informaes provenientes da MP, uma marcao (tag) informando o nmero do bloco que est ocupando aquela linha.

Linhas (quadros)

tag

Clula 0

Clula 1

Clula 2

Clula 3

Memria Cache
Quando

a CPU pede uma informao atravs de um endereo de MP, este endereo dividido em duas partes:

A primeira parte indica em qual bloco est a informao desejada; A segunda parte indica qual a clula procurada dentro do bloco;

Memria Cache
O

dispositivo que controla a cache verifica se em alguma das linhas existe um tag idntico ao nmero do bloco pedido pela CPU;

Se existir, a clula solicitada obtida da linha da cache e entregue CPU; Se no existir, a cache pega o bloco todo da MP e coloca-o em alguma linha que esteja disponvel. Depois repassa CPU a clula pedida.

Memria Cache
Mapeamento

Neste modelo, cada bloco da MP pode aparecer em apenas uma nica linha da cache; Em outras palavras, existe um posicionamento prvio de onde cada bloco pode estar; Se o bloco no estiver na linha correspondente, ele no estar em mais lugar algum da cache;

direto:

Memria Cache
Imagine,

por simplificao, que a cache possui apenas duas linhas; Blocos de nmeros pares s podero estar na linha 0 da cache, enquanto blocos mpares s podero estar na linha 1
MP

tag

blocos

Memria Cache
Para

Para identificar qual dos blocos pares (ou mpares) est ocupando aquela linha da cache. Vrios blocos podem ocupar a mesma linha da cache, mas um mesmo bloco ou est na linha especfica para ele ou no est na cache. Por isto, esta tcnica chamada de mapeamento direto.

o que serve a tag?

Memria Cache
Na

prtica, os linhas da cache no esto designadas a apenas linhas pares e mpares. Existiro vrios grupos de blocos dependendo da quantidade de linhas da cache.

Memria Cache

MP

tag

blocos

Memria Cache
Como

calcular tudo isso?

Primeiro,

preciso lembrar que a funo da cache usar bem o princpio da localidade. Desta forma, as clulas da memria sero dividas em blocos.

Memria Cache
Se

a memria tem MP bytes e cada bloco ser composto por B bytes, a quantidade de blocos QB ser:
QB

= MP/B

Memria Cache
Se

a memria cache tem L linhas, isto significa que os blocos sero divididos em L grupos distintos. A quantida de blocos por grupo BG ser:
BG

= QB/L

Memria Cache
A quantidade

de bits que a tag precisa ter vai depender apenas da quantidade de blocos por grupo (BG).
Bits

= log2 BG

Memria Cache
Vamos

a um exemplo prtico:

A memria

principal de um computador possui 4Gbytes. A cache possui 1024 linhas, podendo armazenar 64 bytes de dados em cada linha.
A quantidade

de blocos 4G/64 = 64M

blocos.

Memria Cache
Como

h 64M blocos ao todo na memria e existem 1024 linhas de cache, cada linha poder conter 64k blocos (um de cada vez), pois:
BG

= QB/L BG = 64M/1024 = 64K

Memria Cache
O

tamanho do tag ser:

Bits

= log2 (64K) = 16 bits, pois 216 = 64K.

Memria Cache
Nesse

sistema, um endereo de memria ser composto por 32 bits, pois 232 = 4G. Quando a CPU pedir um dado na memria atravs de um endereo assim, como a cache saber se tem o dado ou no?
O

endereo precisa ser dividido em pedaos para ser analisado.

Memria Cache

16 bits

10 bits

6 bits

Indica o nmero especfico do bloco a ser buscado na linha da cache

Indica em qual das linhas da cache pode estar o dado buscado

Indica qual das clulas dentro do bloco a requerida pela CPU

Memria Cache
Vamos

imaginar que a CPU pediu cache abaixo o dado atravs do endereo 0000000000001010 0010010010 001001
144 145 146 147 148 149 34 78 10 31 123 90

Memria Cache
Mapeamento

associativo por

conjuntos:

Esta tcnica uma mistura das duas anteriores: Agora, cada linha da cache pode conter mais de um bloco. O que vai acontecer que diversos blocos (conjuntos) podem estar relacionados com a mesma linha. Quando a linha for descoberta, ser preciso ainda analisar cada conjunto de blocos para saber se o bloco requerido

Memria Cache
quadro tag

Linha 0 Linha 1 Linha 2 Linha 3

Quadro 0 Quadro 4 Quadro 8 Quadro 12

Quadro 1 Quadro 5 Quadro 9 Quadro 13

Quadro 2 Quadro 6 Quadro 10 Quadro 14

Quadro 3 Quadro 7 Quadro 11 Quadro 15

Memria Cache
Para

a cache funcionar corretamente ainda necessrio pensar no que acontece se a cache estiver cheia, ou seja, se for preciso trazer um dado da MP e colocar em uma linha da cache que j tenha um dado posicionado. Isto depende da tcnica escolhida:

No mapeamento direto, o novo dado s pode ocupar um nico lugar. Logo, o dado antigo dever ser substitudo.

Memria Cache
No

mapeamento associativo e no associativo por conjunto, ser necessrio escolher um bloco para ser retirado. Existem alguns critrios:

LRU (least recently used) o controlador da cache escolhe o bloco que foi utilizado h mais tempo. Este critrio tem por base o princpio da localida temporal

Memria Cache
Um

ltimo ponto precisa ser levado em considerao:

Estivemos sempre preocupados em como fazer para obter (ler) um dado da cache e repassar para a CPU; A memria, como vimos algumas vezes, permite que se faam dois tipos de operaes: leitura e escrita; Quando a CPU precisar gravar um novo dado na MP, como isso acontecer?

Memria Cache
Se

o dado for salvo diretamente, sem passar pela cache, haver um problema de consistncia:
Como assim?
Se

o dado for salvo apenas na cache, tambm poder haver problemas. Qual a soluo?

Memria Cache
Devemos

levar em considerao dois

fatores:

A MP pode ser acessada tanto pela CPU quanto por componentes E/S. Um dado pode ter sido alterado na cache e no na MP (desatualizada). Um componente E/S pode ter alterado o dado diretamente na MP e no na cache (desatualizada).

Memria Cache
Uma mesma MP pode ser acessada por diversas CPUs, cada uma contendo sua prpria cache. A alterao feita em uma cache deve ser refletida na MP e, consequentemente, nas demais caches.
Existem

alguma tcnicas conhecidas para estes problemas.

Memria Cache
Escrita

Cada escrita em uma palavra da cache resulta na escrita da palavra correspondente da MP. Se houver outras cache, elas tambm sero alteradas;

em ambas (write through):

Escrita

somente no retorno (write

back):

No faz atualizao simultnea, mas somente quando o bloco for retirado da cache e se ele tiver sido alterado.

Memria Cache
Escrita

O bloco da MP atualizado quando o bloco da cache for alterado pela primeira vez. Os demais componentes so alertados de que houve uma alterao e so impedidos de usar o dado. Outras alteraes ocorrem apenas na cache e a MP s atualizada quando o bloco sair da cache.

uma nica vez (write once):

Exerccio