You are on page 1of 4

5.1.

Neste exercício, analisamos as propriedades de localidade de memória


da computação matricial. O código a seguir é escrito em C, onde os elementos
dentro da mesma linha são armazenados contíguamente. Suponha que cada
palavra seja um inteiro de 64 bits.
para (I=0; I<8; I++)
para (J=0; J<8000; J++)
A[I][J]=B[I][0]+A[J][I];
5.1.1 Quantos inteiros de 64 bits podem ser armazenados em um bloco de
cache
de 16 bytes?
Responder:
1 byte = 8 bits
=> 16 bytes = 128bits
=> Em um bloco de cache de 16 bytes, 2 inteiros de 64 bits podem ser
armazenados.
5.1.2 Quais referências variáveis apresentam localidade temporal?
Responder:
Variável de localidade temporal: I, J, B[I][0]

5.1.3 Quais referências variáveis apresentam localidade espacial? A localidade é


afetada pela ordem de referência e pelo layout de dados. A mesma computação
também pode ser escrita abaixo no Matlab, que difere de C por armazenar
elementos matriciais dentro da mesma coluna contíguamente na memória.
para I=1:8
para J=1:8000
A(I,J)=B(I,0)+A(J,I);
fim

Responder: A[I][J]
5.1.4 Quais referências variáveis apresentam localidade temporal?
Responder: I, J, B(I,0)

5.1.5 Quais variáveis referenciais apresentam localidade espacial?


Responder: A(J,I) e B(I,0)
5.1.6 Quantos blocos de cache de 16 bytes são necessários para armazenar
todos os elementos de matriz de 64 bits
que estão sendo referenciados usando o armazenamento em matriz do Matlab?
Quantos usam o armazenamento matricial de C? (Suponha que cada linha
contenha mais de um elemento.)
Responder:
Com a matriz A, o código faz referência a 8*8000=64 000 inteiros. Como 2
inteiros por bloco de 16 bytes, precisamos de 64 000/2 = 32 000 blocos.
Usando o armazenamento matricial de C (que armazena elementos de matriz
dentro da mesma coluna contíguamente na memória), com matriz B tem 8
blocos
=> 32000 + 8 = 32 008 (blocos)
Usando o armazenamento matricial do Matlab (que armazena elementos de
matriz dentro da mesma linha contíguamente na memória), com a matriz B tem
4 blocos (2 inteiros por bloco)
=> 32000 + 4 = 32 004 (blocos)

5.2 Os caches são importantes para fornecer uma hierarquia


de memória de alto desempenho aos processadores. Abaixo está uma lista de
referências de endereço de memória de 64 bits, dadas como endereços de
palavras.
0x03, 0xb4, 0x2b, 0x02, 0xbf, 0x58, 0xbe, 0x0e, 0xb5, 0x2c, 0xba 0xfd
5.2.1 Para cada uma dessas referências, identifique o endereço da palavra
binária, a tag e o índice com um cache mapeado diretamente com 16 blocos de
uma palavra. Liste também se cada referência é um acerto ou um erro, supondo
que o cache esteja inicialmente vazio.
Responder:
16 blocos = 2 4 => Índice de4 bits
Endereço Endereço binário Etiqueta Índice Acerto/
nominal Miss
0x03 0000 0011 0x0 0011 M
0xb4 1011 0100 0xb 0100 M
0x2b 0010 1011 0x2 1011 M
0x02 0000 0010 0x0 0010 M
0xbf 1011 1111 0xb 1111 M
0x58 0101 1000 0x5 1000 M
0xbe 1011 1110 0xb 1110 M
0x0e 0000 1110 0x0 1110 M
0xb5 1011 0101 0xb 0101 M
0x2c 0010 1100 0x2 1100 M
0xba 1011 1010 0xb 1010 M
0xfd 1111 1101 0xf 1101 M

5.2.2 Para cada uma dessas referências, identifique o endereço da palavra


binária, a tag, o índice e o deslocamento dado um cache mapeado diretamente
com blocos de duas palavras e um tamanho total de oito blocos. Liste também
se cada referência é um acerto ou um erro, supondo
que o cache esteja inicialmente vazio.
Responder:
8 blocos = 2 3 => índice
de3 bits 2 palavras/bloco = 2 1 => deslocamento de1 bit
Endereço Endereço Etiquet Índice Offset Acerto/
nominal binário a Miss
0x03 0000 0011 0x0 001 1 M
0xb4 1011 0100 0xb 010 0 M
0x2b 0010 1011 0x2 101 1 M
0x02 0000 0010 0x0 001 0 M
0xbf 1011 1111 0xb 111 1 M
0x58 0101 1000 0x5 100 0 M
0xbe 1011 1110 0xb 111 0 M
0x0e 0000 1110 0x0 111 0 M
0xb5 1011 0101 0xb 010 1 M
0x2c 0010 1100 0x2 110 0 M
0xba 1011 1010 0xb 101 0 M
0xfd 1111 1101 0xf 110 1 M

5.2.3 Você será solicitado a otimizar um design de cache para as referências


fornecidas. Há três designs de cache mapeados diretamente possíveis, todos
com um total de oito palavras de dados:
■ C1 tem blocos de 1 palavra■ C2 tem blocos de 2 palavras ■ C3 tem blocos
de 4 palavras
.
Responder:
C1 tem blocos de 1 palavra => 8 blocos => índice de 3 bits, sem deslocamento
de bits
C2 tem blocos de 2 palavras => 4 blocos => índice de 2 bits + deslocamento de
1 bit
C3 tem blocos de 4 palavras => 2 blocos => índice de 1 bit + deslocamento de 2
bits

Endereç Endereço Etiqu Cache 1 Cache 2 Cache 3


o Word binário eta Índic Acerto/ Índic Acerto/ Índic Acerto/
e Miss e Miss e Miss
0x03 0000 0011 0x00 011 M 01 M 0 M
0xb4 1011 0100 0x16 100 M 10 M 1 M
0x2b 0010 1011 0x05 011 M 01 M 0 M
0x02 0000 0010 0x00 010 M 01 M 0 M
0xbf 1011 1111 0x17 111 M 11 M 1 M
0x58 0101 1000 0x0b 000 M 00 M 0 M
0xbe 1011 1110 0x17 110 M 11 H 1 H
0x0e 0000 1110 0x01 110 M 11 M 1 M
0xb5 1011 0101 0x16 101 M 10 H 1 M
0x2c 0010 1100 0x02 100 M 10 M 1 M
0xba 1011 1010 0x17 010 M 01 M 0 M
0xfd 1111 1101 0x1f 101 M 10 M 1 M

Taxa de erros do cache 1 = 100%Taxa de erros do cache 2 = 10/12 = 83%

Taxa de erros do cache 3 = 11/12 = 92%


=> O cache 2 oferece o melhor desempenho.

You might also like