• Nenhum resultado encontrado

Nesta seção descrevemos as modificações de hardware necessárias para a implementação dos

caches de matrizes particionados.

Existem diversas maneiras de implementar os caches de matrizes particionados. Para cada acesso à memória, o controlador de cache precisa gerar sinais adicionais que ativem C1 ou C2. Por exemplo,

um decodificador pode receber como entrada a partição de cache mapeada e ativar o acesso à partição de cache acessada conforme mostrado na Figura 4.13, onde a saída do decodificador ativa a partição adequada do cache no controlador de cache. Logo, existe um aumento no tempo de acerto do cache devido à necessidade de gerenciar caches com mais de uma partição.

Para cada implementação, a entrada deste decodificador é gerada de maneira diferente.

É possível obter este sinal decodificando alguns dos bits do endereço do dado. O número de bits necessários para distinguir os acessos a C1 dos a C2 é normalmente bem pequeno devido aos seguintes

um grande número de words. Por último, matrizes com endereços seqüenciais podem estar mapeadas na mesma partição de cache. Logo, o nível adicional de decodificação pode ser bem rápido.

Outra possibilidade é incluir a partição de cache em instruções de load e store customizadas. Esta modificação consiste em incluir nas instruções a indicação da partição de cache que deve ser consultada, baseado no mapeamento de matrizes às partições de cache produzido por nosso algoritmo. Esta informação é compilada junto com o código fonte e inserida no código final. Nas subseções 4.3.1 e 4.3.2 propomos 2 formas diferentes para realizar esta modificação. Estas formas estão relacionadas ao modo como a informação da partição de cache a ser acessada é armazenada nas instruções customizadas e usada durante a execução. Em ambas as propostas, o modo de funcionamento da

pipeline permanece inalterado.

Por fim, é possível utilizar os bits do contador de programa (PC) para distinguir acessos de matrizes mapeados para C1 ou C2. Uma forma de realizar esta modificação é descrita na subseção

4.3.3.

Partição de cache mapeada

Decodificador Controlador de cache C1 C2

Figura 4.13 Modificações no controlador de caches. habilita habilita

4.3.1 Instruções com indicação da Partição de Cache

O cache é consultado toda vez que há acesso a um endereço de memória. Este endereço de memória pode ser acessado para leitura ou escrita. Quando ele é lido, a instrução executada é a de

load. Quando ele é escrito, a instrução executada é a de store.

Para um processador com conjunto de instruções específico para uma aplicação, é possível usar instruções de load e store especiais, com bits reservados no código destas instruções para especificar a partição de cache correspondente ao dado associado. Ou seja, nesta primeira proposta, a informação armazenada nas instruções especiais é a partição de cache a ser acessada. A Figura 4.14 exemplifica estas instruções de load e store.

load registrador, endereço, partição de cache store registrador, endereço, partição de cache

Figura 4.14 Exemplo de instrução load e store com mapeamento de partição de cache, onde a partição de cache a ser consultada em cada endereço de memória é armazenada no registrador das instruções de

load e store.

A desvantagem desta proposta está na falta de flexibilidade para modificar o mapeamento da partição de cache em tempo de execução, visto que a indicação da partição do cache está no código da instrução.

4.3.2 Instruções com identificador da matriz e Tabela de Partição de Cache

Da mesma forma que a abordagem anterior, esta abordagem utiliza instruções de load e store especiais, com a diferença que aqui a informação armazenada nas instruções especiais é um identificador da matriz acessada.

Para permitir alterações dinâmicas no mapeamento de matrizes às partições de cache, uma alternativa à implementação anterior é preencher as instruções especiais de load e store com um identificador da matriz acessada e construir uma tabela para contem a partição de cache para cada

A partir do identificador da matriz contido nas instruções especiais de load e store, procuramos na tabela de mapeamento a sua partição de cache correspondente. Deste modo, para alterar este mapeamento após a compilação do código fonte, basta modificar o valor da partição de cache na tabela de mapeamento de matriz e partição de cache.

load/store registrador, endereço, identificador da matriz

Figura 4.15 Exemplo de mapeamento do identificador da matriz à partição de cache.

4.3.3 Mapeamento do Endereço das Instruções às Partições de Cache

Podemos mapear o endereço de cada instrução de load e store às partições de cache.

Usamos bits do endereço da instrução para fazer acesso à tabela de mapeamento de partição, como exemplificado na Figura 4.16, usando apenas um número suficiente de bits para distinguir entre os endereços de instruções de acesso à memória. A vantagem desta abordagem é não precisar de instruções de load e store especiais, pois utiliza o endereço da instrução para encontrar a partição o

cache.

endereço da instrução: load/store registrador, endereço

Figura 4.16 Exemplo de mapeamento de endereço da instrução à partição de cache.

Partição de cache 0 01 1 ... n 10 ... 01

Endereço da instrução Partição de cache

00000000 01 00000001 ... 10000000 10 ... 01

Por outro lado, nesta abordagem é necessário procurar o endereço da instrução na tabela da Figura 4.16, o que pode aumentar ainda mais o tempo para acesso ao cache. A situação pode se tornar inviável ser for necessário usar um número grande de bits do endereço.

4.4 Conclusão

Neste capítulo apresentamos nosso algoritmo para geração de caches particionados e o correspondente mapeamento de matrizes com o intuito de reduzir o tempo médio de acesso à memória.

Apresentamos alternativas para implementar nosso algoritmo na arquitetura de caches particionados. O projetista do sistema embarcado pode escolher a alternativa mais adequada dependendo da quantidade de matrizes acessadas, do número de partições de caches, da quantidade de

bits disponíveis para as alterações de hardware e da flexibilidade necessária para escolher a alteração

de mapeamento de matrizes nas partições de cache.

A utilização de instruções especiais com mapeamento da partição de cache não aumenta muito o tempo de acerto do cache porque a partição de cache mapeada já está indicada no própria instrução, de modo que não é necessário procurar esta informação.

A alternativa de utilizar instruções e tabela com mapeamento da partição de cache aumenta pouco o tempo de acerto do cache, visto que implica em somente uma busca do identificador da matriz à partição de cache.

O mapeamento do endereço das instruções às partições de cache, por sua vez, pode elevar consideravelmente o tempo de acerto do cache.

O capítulo seguinte resume os resultados da aplicação do nosso algoritmo no particionamento de

Capítulo 5

Avaliação do Algoritmo

5.1 Introdução

Neste capítulo descrevemos o ambiente de execução do algoritmo e apresentamos as aplicações e os dados de entrada utilizados na avaliação do algoritmo. Descrevemos os caches de matrizes particionados obtidos, incluindo caches gerados em múltiplas iterações do algoritmo. Por fim, analisamos e comparamos nossos resultados com os de trabalhos anteriores.

Documentos relacionados