ARQUITECTURA DE COMPUTADORES CAPÍTULO V AULA II Ricardo Mendão Silva [email protected] Índice • O básico de caches • Aceder à cache • Hits • Misses • Cálculos de dimensão e mapeamento directo. • Lidar com misses • Cache performance • Organização • Níveis adicionais Ricardo Mendão Silva [email protected] O básico de caches • No nosso exemplo da biblioteca, a nossa secretária acaba por ser a cache do sistema. • A cache é assim, resumidamente, um lugar seguro para guardarmos dados de que ainda vamos precisar. • O nome cache surgiu a primeira vez para classificar a memória extra que era colocada entre a memória RAM e a memória do processador (registos). Ricardo Mendão Silva [email protected] O básico de caches • Como sabemos se determinada word existe na cache? Se existir, como encontra-la? • Se cada word poder ir para um local de memória especifico, o método mais fácil será calcular a localização na cache com base no endereço que a word tem em memória e aplicar assim o método de mapeamento directo. • Com mapeamento directo o mapeamento cada localização de memória é mapeada directamente para uma localização da cache, seguindo normalmente o formato: Ricardo Mendão Silva [email protected] O básico de caches • Considerando por exemplo que a dimensão da cache é uma potencia de 2, pode-se mapear com base nos bits menos significativos dos elementos de memória. • Considerando uma cache com espaço para 8 elementos = 23 , considera-se os 3 bits menos significativos. Ricardo Mendão Silva [email protected] O básico de caches • No entanto, uma vez que cada entrada na cache pode conter dados de diferentes localizações de memória, como sabemos qual contem? • Para responder a esta pergunta utiliza-se o que se chama de tag. • A tag é composta pelos números mais significativos que compõe o endereço de memória, excepto os bits menos significativos que constituem o endereço do bloco da cache. • Esta tag é ela própria guardada na cache. • Torna-se ainda necessário identificar os blocos válidos na cache. Quando se inicia o sistema, nenhum bloco da cache tem informação válida e como tal devem ser ignoradas. Mesmo durante a execução, vários blocos podem-se manter vazios e como tal a tag dos mesmos deve ser ignorada. • Para isso utiliza-se um bit de validade, que só está activo caso existe informação válida. Ricardo Mendão Silva [email protected] O básico de caches Aceder à cache • Considerando uma sequência de 9 acesso de memória e uma cache de 8 blocos: Ricardo Mendão Silva [email protected] O básico de caches Aceder à cache • Uma vez que cada entrada na cache é identificada primariamente pelo índice, sendo esse índice composto por n bits existem 2𝑛 possibilidades. • Assim, o número de elementos de uma cache deve ser sempre uma potencia de base 2. • O número total de bits necessários para a cache é calculado em função do tamanho dos blocos de dados e dos endereços, uma vez que a cache contem não só o espaço para os dados como também o espaço para as tags. Ricardo Mendão Silva [email protected] O básico de caches Aceder à cache • Na arquitectura MIPS cada word é constituída por 32 bits. • Utilizam-se os bits menos significativos do endereço, para referenciar cada word dentro de um bloco. • Considerando 2 bits de offset ficam a restar 30 bits. • Como a cache tem 1024 entradas precisamos de 10 bits para o índice. • Ficando 20 bits disponíveis para a tag. Ricardo Mendão Silva [email protected] O básico de caches Aceder à cache • No entanto um bloco pode conter mais que uma word. • Nesse caso é necessário guardar a quantidade suficiente de bits menos significativos do endereço para os referenciar. • Na imagem 512 bits dá para guardar 16 words de 32 bits, ou seja, são necessários 4 bits para referenciar cada word. Ricardo Mendão Silva [email protected] O básico de caches Aceder à cache • Considere-se o seguinte caso: • Endereços de 32-bits • Uma cache directamente mapeada • O tamanho dessa cache é 𝟐𝒏 blocos, logo utilizam-se n bits no índice. • O tamanho do bloco é 𝟐𝒎 words. • Existem 2 words por bloco Assim, o tamanho da tag será: 32-(n + m) O número total de bits da cache será: 2𝑛 x (tamanho do bloco + tag + bit validação) Considerando um bloco com o tamanho 2𝑚 words, ou seja, 2𝑚+5 bits, qual o tamanho total da cache? 𝟐𝒏 x ( (𝟐𝒎 x 32) + (32 - (n + m)) + 1 Ricardo Mendão Silva [email protected] O básico de caches Aceder à cache Exercício: Qual o número total de bits de uma cache directamente mapeada considerando um volume de 16KB de dados, blocos de 4 words e endereços de 32 bits? 1º 16KB = 212 words = 4096 words 2º Como guardo 4 words por bloco e 4 = 22 (m = 2), logo 212 - 22 = 210 = 1024 entradas na cache, o que dá 10 bits para o índice (n = 10). 3º A tag terá 32 – (n + m ) = 32 – (10 + 2 ) = 20 bits 4º 210 x (4 x 32 + 20 + 1) = 210 * 149 = 149 KiB Total de entradas Ricardo Mendão Silva Tamanho do bloco Tag bit validação [email protected] O básico de caches Aceder à cache Exercício: Considerando a cache anterior, com m=2 e n=10, calcule em que bloco ficará a word do endereço 6146. 1º 6146 = 1 1000 0000 0010 2º m=2, logo 10 significa que ficará na terceira posição do bloco. 3º n = 10, significa que o bloco será o 1000 0000 00, ou seja, 512 Ricardo Mendão Silva [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 00 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. Hit 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 00 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. Hit 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 00 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. Hit 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 00 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. Hit 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 00 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. Miss 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 01 010000 010001 010010 010011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. Miss 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 00 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Exercício: Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. Hit 000000, 000001, 000010, 000011, 010001, 000000, 000001 V Tag 00 1 00 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] O básico de caches Aceder à cache Considerando a seguinte cache, calcule o número de hits e misses para a seguinte sequência. Apresente ainda o estado final da cache. 000000, 000001, 000010, 000011, 010001, 000000, 000001 Hits: 5 Misses:2 V Tag 00 1 01 000000 000001 000010 000011 01 1 00 000100 000101 000110 000111 10 1 00 001000 001001 001010 001011 11 0 Ricardo Mendão Silva Dados [email protected] Índice • O básico de caches • Aceder à cache • Hits • Misses • Cálculos de dimensão e mapeamento directo. • Lidar com misses • Cache performance • Organização • Níveis adicionais Ricardo Mendão Silva [email protected] O básico de caches Lidar com Misses • Sempre que ocorre um miss na cache, é da responsabilidade da unidade de controlo, detectar o mesmo e despoletar o mecanismo de acesso à memória. • A unidade de controlo do CPU actua juntamente com uma outra unidade responsável por ir à memória obter os dados em falta para a cache. • Entretanto, de modo a não gerar interrupções por falta de dados, é inserido um stall no pipeline, de modo a atrasar a execução da próxima instrução, por forma a ter todos os dados necessários carregados em cache. • Processadores superescalares com execução out-oforder conseguem lidar com misses mais eficientemente visto não necessitarem de esperar. Ricardo Mendão Silva [email protected] O básico de caches Lidar com Escrita • Ao contrário da leitura a escrita é mais pertinente. Imagine que se escreve somente na cache, deixando o valor para o mesmo endereço diferente entre cache e memória. • Nesse caso diz-se que os dados são inconsistentes. • Para resolver inconsistências utiliza-se uma técnica, write-through, que permite escrever em simultâneo, tanto na cache como na respectiva memória. • Concretizando, um store de MIPS, escreve tanto na cache como no nível imediatamente abaixo desta. Ricardo Mendão Silva [email protected] O básico de caches Lidar com Misses em Escrita • Apesar de resolver o problema de inconsistência, escrever em dois níveis torna-se numa tarefa pesada que afecta significativamente a performance. • Como tal, uma técnica de optimização é utilizar um buffer de escrita, para o qual o processador vai colocando os dados a serem escritos e que depois vão sendo passados para memória, sem afectar o processamento da sequência de instruções. • Caso o buffer de escrita esteja cheio, o CPU pode efectuar stalls e esperar por espaço no buffer. • Ainda assim, a frequência de escrita deverá ser inferior á frequência que as memórias suportam. Ricardo Mendão Silva [email protected] O básico de caches Lidar com Misses em Escrita • Em alternativa existe uma técnica que em vez de write-through, implementa write-back. • Write-back é uma técnica em que as escritas são apenas efectuadas para a cache, numa primeira instância. • Só quando estas estão para ser substituídas na cache é que o valor é actualizado na memória no nível inferior. Ricardo Mendão Silva [email protected] Índice • O básico de caches • Aceder à cache • Hits • Misses • Cálculos de dimensão e mapeamento directo. • Lidar com misses • Performance da cache • Organização • Níveis adicionais Ricardo Mendão Silva [email protected] Performance da cache • Existem principalmente dois métodos para melhorar a performance das caches: 1. Reduzir a taxa de misses com base na probabilidade em blocos de memória competirem pela mesma localização na cache – organização da cache. 2. Reduzir o miss penalty adicionando níveis de cache extra. Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Assumindo que os Hits fazem parte do durante a execução de uma aplicação, que o tempo de CPU é igual à soma do necessário para executar determinado o tempo gasto nos acessos à memória, tempo de CPU podemos assumir tempo programa, mais ou seja: TempoCPU = ( Nº Ciclos relógio de execução + Nº Ciclos relógio nos acessos à memória (stalls) ) * tempo do ciclo de relógio Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • O número de ciclos de relógio gastos em stalls durante os acessos à memória, podem ser divididos em: Nº Ciclos relógio nos acessos à memória (stalls) ) = Nº ciclos na escrita + Nº ciclos na leitura • 0 número de ciclos de leitura podem ser divididos em: Nº Ciclos leitura = Nº leituras/programa * miss rate * miss penalty Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • O número de ciclos de relógio na gastos em stalls na escrita provêm de dois casos: • Misses de escrita que requerem que se obtenha o bloco da memória. • Buffer de escrita cheio, que obriga a aguardar por “vaga”. • Assim: Nº Ciclos escrita = (Nº escritas/programa * miss rate * miss penalty) + stalls do Buffer Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Se assumirmos que os ciclos de stalls gastos em função do buffer de escrita, não são significativos, podemos concluir que: Nº Ciclos acesso à memória = Nº acessos/programa * miss rate * miss penalty Ou Nº Ciclos acesso à memória = Nº acessos/programa * nº misses / instruções * miss penalty Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • As funções anteriores não consideram o tempo de acesso à cache com sucesso, ou seja, o Hit Time. • No entanto, se o Hit Time aumenta, toda a performance irá diminuir. • A razão mais directa para o aumento do Hit Time é o próprio aumento da cache. Memórias maiores demoram mais tempo a pesquisar. • Para calcular o tempo médio de acesso (AMAT – Average Memory Access Time) à memória, utiliza-se a seguinte fórmula: AMAT = Time for a Hit + Miss time * Miss penalty Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Calcule o tempo médio de acesso à memória considerando um processador com um ciclo de 1 ns, um miss penalty de 20 ciclos, um miss rate por instrução de 0.05 e um hit time de 1 ciclo. AMAT = hit time + miss rate * miss penalty AMAT = 1 + 0.05 * 20 AMAT = 2 ciclos ou 2ns Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Ao contrário do método de mapeamento directo, onde cada endereço é mapeado directamente para o seu respectivo, na cache, existem outras técnicas mais flexíveis e optimizadas. • O exemplo mais popular, extremo ao mapeamento directo, dá pelo nome de associativismo total. • No método associativo, um endereço de memória pode ser mapeado para qualquer bloco da cache. • Como tal, para pesquisar por uma entrada especifica, é necessário correr toda a cache. Para isso é utilizado hardware extra, próprio para a comparação eficiente de endereços. • Assim, este método não é aconselhado a caches de grandes dimensões. Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Para colmatar os problemas de ambas as soluções, mapeamento directo e associativismo total, surgiu um método hibrido, chamado associativismo por grupos, que junta o melhor dos dois mundos. • No associativismo por grupos os endereços são mapeados directamente para grupos fixos de tamanho n. • Dentro de cada grupo a organização segue o método do associativismo por grupos, o que significa que será necessário pesquisar um endereço por comparação dentro do seu grupo. • No associativismo por grupos substitui-se sempre o bloco referenciado há mais tempo. Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Associativismo por grupos vs mapeamento directo vs associativismo total. Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Diferentes configurações de associativismo por grupos. Regra geral, aumentando o nível de associativismo, diminui a miss rate. Ricardo Mendão Silva [email protected] Performance da cache Organização da cache • Considere que existem três caches distintas de blocos constituídos por 4 words. Uma cache é totalmente associada, outra associada em grupos de dois e a terceira mapeada directamente. Calcule o número de misses para cada uma, considerando a seguinte sequência de endereços: 0,8,0,6,8. 1º Determinar o sub-bloco onde cada endereço corresponde, considerando as 4 words 0 = 0000 6 = 0110 8 = 1000, logo o 0 e o 8 ficam no primeiro bloco e o 6 no terceiro bloco Ricardo Mendão Silva [email protected] Performance da cache Organização da cache 2º Efectuar o mapeamento directo que é o mais simples Endereço Hit ou miss Conteúdo dos blocos no final da sequência 1 2 3 0 miss Mem[0] 8 miss Mem[8] 0 miss Mem[0] 6 miss Mem[0] Mem[6] 8 miss Mem[8] Mem[6] 4 Resultado mapeamento directo = 5 misses Ricardo Mendão Silva [email protected] Performance da cache Organização da cache 3º Efectuar o método de associativismo por grupos. Dado que temos 2 grupos, precisamos só do bit menos significativo para determinar em que grupo ficará cada endereço. Como tanto o 0, 6 e 8 terminam em 0, todos ficarão no primeiro grupo. 4º Num associativismo em grupos de dois, existem duas divisões por grupo, assim: Endereço Hit ou miss Conteúdo dos blocos no final da sequência Set 0 Set 0 0 miss Mem[0] 8 miss Mem[0] Mem[8] 0 hit Mem[0] Mem[8] 6 miss Mem[0] Mem[6] 8 miss Mem[8] Mem[6] Set 1 Set 1 Resultado mapeamento directo = 4 misses e 1 hit Ricardo Mendão Silva [email protected] Performance da cache Organização da cache 5º Por fim falta somente executar o mapeamento recorrendo ao associativismo total, ou seja: Endereço Hit ou miss Conteúdo dos blocos no final da sequência 1 2 3 0 miss Mem[0] 8 miss Mem[0] Mem[8] 0 hit Mem[0] Mem[8] 6 miss Mem[0] Mem[8] Mem[6] 8 hit Mem[0] Mem[8] Mem[6] 4 Resultado mapeamento directo = 3 misses e 2 hit Ricardo Mendão Silva [email protected] Performance da cache Organização da cache Concluindo o exercício anterior: Misses Hits Mapeamento directo 5 0 Associativismo dois-grupos 4 1 Associativismo total 3 2 Denote-se no entanto que se tivéssemos 8 blocos na cache também existiriam 2 hits no associativismo dois-grupos ou se tivéssemos 16 blocos o mesmo acontecia no caso do mapeamento directo. Ricardo Mendão Silva [email protected] Performance da cache Níveis extra • O segundo método para optimizar a performance de utilização das caches é utilizar mais que um nível de cache entre o CPU e a memória. • Aumentar os níveis de cache vem colmatar a cada vez maior diferença entre os processadores super-rápidos e as memórias DRAM. • Caso ocorra um miss na primeira cache, é consultada a segunda cache, com um tempo de resposta igual ao acesso a esta segunda cache, que normalmente está inserida no mesmo chip da primeira. • Caso o endereço não esteja em nenhuma das caches o miss penalty é superior ao normal. Ricardo Mendão Silva [email protected] Performance da cache Níveis extra • O design de um sistema com múltiplas caches é diferente dum sistema de cache única. • Comparativamente, num sistema multi-cache, a primeira cache é mais pequena que uma cache única, com o objectivo de minimizar o hit time. • • Em contrapartida, a cache de nível 2 é significativamente maior que uma cache única, de modo a minimizar a miss rate. Ricardo Mendão Silva [email protected] Próxima aula • Hierarquia de memória dependente. • Máquinas Virtuais. • Memória Virtual • Paralelismo e Hierarquia de memória Ricardo Mendão Silva [email protected] Dúvidas e Questões Ricardo Mendão Silva Junho 2014 [email protected] Ricardo Mendão Silva [email protected]