• Nenhum resultado encontrado

Nesta seção detalhamos os valores utilizados para os parâmetros do cache de matrizes unificado e para a avaliação dos caches de matrizes particionados. Explicamos também como foram gerados os rastros de acesso à memória após as aplicações terem sido instrumentadas.

5.4.1 Parâmetros do Cache de Matrizes Unificado

Nosso algoritmo foi avaliado em caches de 8 e 12K bytes. Estes tamanhos de cache foram escolhidos porque diversos tamanhos de caches embarcados se encontram neste intervalo, como os

caches da famílias de processadores ARM9E, ARM10E e ARM11 [23]. Além disso, utilizamos caches de 12K bytes para avaliarmos o algoritmo de particionamento com caches com associatividades

diferentes de potência de 2, como 3 e 6, por exemplo.

Consideramos linhas de 16, 32 e 64 bytes. Linhas de 32 e 64 bytes foram escolhidos devido ao menor tempo médio de acesso à memória observado nestes tamanhos de linhas em caches de 4 e 16K

bytes [7]. Linhas de 16 bytes foram usados para fornecer mais uma opção de tamanho de linha.

Devido ao elevado custo de cada via, foram considerados caches embarcados com até 8 vias. Como um cache de matrizes unificado de n vias pode ser decomposto em até (n-1) cache particionados (C1|C2), e como usamos valores de associatividades iguais à 2, 3, 4, 6 e 8 nos caches de matrizes

unificados, temos de 2-1=1 a 8-1=7 opções de particionamento.

Utilizamos estes valores pré-determinados de tamanhos de cache, tamanhos de linha e associatividade somente para limitar o espaço de projeto a ser explorado nas aplicações de avaliação, mas não há limite para estes valores impostos por nossa metodologia.

5.4.2 Parâmetros para Geração dos Rastros de Acesso à Memória

Assim que o rastro é gerado para uma entrada da aplicação, ele é usado como entrada no algoritmo para verificar se ele acessa uma quantidade de blocos distintos maior que a disponível pelo

cache de 12K bytes. Esta primeira execução do rastro é sempre realizada para uma configuração de cache de 12K bytes porque, como o mesmo rastro é empregado nos caches de 8 e 12K bytes, se o

Apenas uma simulação em alguma configuração do cache de 12K bytes é necessária, pois, para um mesmo valor de b, diferentes valores de n e m resultam no mesmo volume de linhas de cache disponíveis. Além disso, para diferentes valores de b, o número de blocos distintos acessados pelo rastro tende a variar na mesma proporção que o número de linhas disponíveis.

Garantimos que os acessos da aplicação inteira não cabem no maior tamanho de cache simulado, permitindo a ocorrência de faltas ao cache decorrentes não somente de faltas compulsórias e de capacidade. Quando esta condição não é satisfeita, o rasto gerado é descartado e a aplicação é executada novamente com novos dados de entrada selecionados para poder exercitar uma maior quantidade de blocos distintos, produzindo um rastro mais longo.

Nesta etapa, a fim de verificar se houve algum erro na instrumentação das aplicações, verificamos se o produto da quantidade de blocos distintos acessados pelo tamanho de linha é igual ou inferior ao tamanho da matriz declarado no código fonte.

5.4.3 Parâmetros para Avaliação de Cache

Os valores dos parâmetros das equações de avaliação de caches, descritos no Capítulo 4, foram pesquisados para os tamanhos de cache, linha e associatividades de todos caches de matrizes unificados e particionados simulados. Estes valores foram obtidos de diversas fontes.

Os valores do tempo e energia requeridos para um acerto foram extraídos do software CACTI disponível online [32], no modo normal, para uma tecnologia de 90 nm e um único banco de cache. Quando estes valores não estavam disponíveis no CACTI, estimamos o valor através de interpolação linear.

Para realizar esta interpolação linear, primeiro procuramos pela proporção encontrada em caches com mesmo tamanho total e tamanho de linha, mas com associatividades diferentes. Caso esta proporção não estivesse disponível, procuramos pela proporção encontrada em caches com tamanho imediatamente maior ou menor que o do cache avaliado, e mesmo tamanho de linha e associatividade. Quando esta proporção também não estava disponível, ou se ela já havia sido estimada por outros cálculos de proporção, procuramos pela proporção usada em outros tamanhos de linha, e mesmo tamanho de cache e associatividade.

Na Tabela 5.2(a), estimamos o valor do tempo de acerto para c=7, b=32 e n=3 com base nos valores do tempo de acerto para c=7, b=32, n=2 e c=7, b=32, n=4. Para os valores do tempo de acerto

para c=7, b=32 e n=5 a 8, usamos a proporção do aumento do tempo de acerto encontrados em c=8,

b=32 e n=5 a 8 da Tabela 5.2(b), pois o CACTI não retornou um valor para a primeira configuração de cache, mas retornou um valor para a segunda.

Na Tabela 5.3(a), estimamos o valor do tempo de acerto para c=6, b=32 e n=5 a 8 com base nos valores do tempo de acerto para c=6, b=16, n=5 a 8, pois o CACTI não retornou um valor para c=6,

b=32, n=8, mas retornou um valor para c=6, b=16, n=8.

Tabela 5.2 Exemplo de interpolação linear baseada na proporção encontrada em caches com tamanho

c maior, e mesmo tamanho de linha b e associatividade n. Valores em negrito foram extraídos do

CACTI [32]. Demais valores foram obtidos por interpolação. (a) (b)

Tabela 5.3 Exemplo de interpolação linear baseada na proporção encontrada em caches com tamanho de linha b menor, e mesmo tamanho de cache c e associatividade n. Valores em negrito foram

extraídos do CACTI [32]. Demais valores foram obtidos por interpolação. (a) (b)

Os valores usados para a penalidade da falta levam em conta os acessos adicionais ao cache e à memória necessários para trazer um novo bloco ao cache. Os tempos de acesso da memória foram

b (bytes) n Tempo de acerto (ns) c = 8K bytes 32 1 0,781606797 32 2 1,308343837 32 3 1,346306577 32 4 1,384269317 32 5 1,482952915 32 6 1,581636513 32 7 1,680320111 32 8 1,779003709 b (bytes) n Tempo de acerto (ns) c = 7K bytes 32 1 0,882080682 32 2 1,332600175 32 3 1,385717757 32 4 1,438835340 32 5 1,541408912 32 6 1,643982483 32 7 1,746556055 32 8 1,849129627 b (bytes) n Tempo de acerto (ns) c = 6K bytes 16 1 0,804466958 16 2 1,377521356 16 3 1,340956699 16 4 1,304392042 16 5 1,326994834 16 6 1,349597625 16 7 1,372200417 16 8 1,394803208 b (bytes) n Tempo de acerto (ns) c = 6Kbytes 32 1 0,794979217 32 2 1,315767966 32 3 1,368834915 32 4 1,421901864 32 5 1,446540891 32 6 1,471179919 32 7 1,495818946 32 8 1,520457973

necessários 67,5 ns para trazer a primeira word ao cache e 7,5 ns para trazer cada word adicional. Supomos que o barramento de memória tem largura suficiente para ler uma word de cada vez. Somamos a este valor de penalidade da falta o valor do tempo de acerto, pois o cache precisa ainda acessar o novo bloco inserido.

De acordo com [34], em microprocessadores e memórias comerciais típicas a penalidade de energia é de 50 a 200 vezes o valor da energia de acerto. Nosso trabalhou considerou que, para cada tamanho de cache e de linha, a penalidade de energia é 50 vezes a energia de acerto para um cache diretamente mapeado, para qualquer que seja a associatividade do cache avaliado. Consideramos o valor 50 para evitar a supervalorização da redução do tamanho de linha na redução da penalidade de energia, possibilitando a avaliação do nosso algoritmo sob o valor de penalidade de energia menos favorável à melhoria de consumo de energia.

Os valores de tempo de acerto, penalidade da falta, energia de acerto e penalidade da energia estão listados no Apêndice III.

Calculamos o tempo médio de acesso do cache de matrizes unificado considerando frações de acessos paralelos iguais à 0; 0,25; 0,50; 0,75 e 1, sendo que os valores mais comuns de frações de acesso paralelos são 0 e 0,25.

Documentos relacionados