Exercício 5 - Avaliando o efeito de uma cache

Informações Gerais

Dicas sobre o Exercício

Motivação

Objetivos

Esse exercício vai ser dividido em partes e, ao final delas, vocês devem ser capazes de:

Contextualização

Atenção: Todos os arquivos que você precisa para essa atividade estão disponíveis em /home/staff/rodolfo/mc723/download.

Em cada parte, leia todo o enunciado uma vez antes de executar suas atividades.

Parte 1 - Preparando para a inclusão das caches

Até agora, você não precisou alterar o código do simulador do processador. Esta é uma das partes mais importantes deste exercício. Embora a alteração seja simples, ela terá que ser sincronizada com o resto do seu código.

Comece pela plataforma com roteador do exercício anterior, ela já possui parte da infraestrutura que você precisará. Separe no controle de versões (git) este código e continue desenvolvendo a partir dele agora.

Alteração do código do processador: No início do código do processador, existe uma declaração da forma ac_tlm_mem DM:5M;. Esta linha declara uma porta de comunicação externa com o nome DM e define o intervalo válido de valores (para programas) de 5MB. Você já deve ter relacionado o nome DM ao DM_port que tanto utilizou no exercício anterior. O sufixo _port é adicionado a todas as portas declaradas desta forma (qualquer que for o nome, externamente ao processador, ele terá o sufixo). O ArchC considera a última porta declarada como o local onde o programa lido do disco será colocado(não se preocupe com isto) e, consequentemente, de onde as instruções serão lidas (esta parte é importante). Então, se você declarar duas ac_tlm_port, o programa será lido do disco e colocado na última porta declarada (esta não é a melhor forma de definir uma linguagem mas é assim que está implementado hoje).

Sua meta, nesta parte 1, é incluir outra porta (deixar o processador com duas portas de saída) e manter o simulador funcionando. As duas portas distintas serão utilizadas para separar os acessos às caches de instruções e de dados. Você deve se preocupar com os seguintes detalhes:

Parte 2 - Inclusão das caches

Agora é a hora de projetar uma cache. Olhando bem do alto nível, a cache serve para guardar dados que garantidamente estão na memória mas que têm sido frequentemente utilizados.

Sua cache deve ser configurável. Deve ser possível definir, em tempo de compilação:

O tamanho do bloco, como você já deve saber, tem que ser um múltiplo do tamanho da palavra do processador. Tanto o número de vias quanto o número de linhas devem ser maiores que zero.

Sua primeira versão da cache deve ter política write through pois é mais fácil de implementar. Também por facilidade de implementação, a política de substituição pode ser round robin com um único contador global por cache, desde que não existam blocos inválidos na cache (primeiro procure por um bloco inválido, se não encontrar, substitua um escolhido pelo round robin).

Um bom ponto de partida para sua cache é o roteador do exercício 4, numa versão com apenas uma entrada e uma saída. Inclua uma cache de dados e uma cache de instruções na sua plataforma, teste com o programa hello world com vários parâmetros diferentes para certificar-se de que o funcionamento está ok. (sua cache deve ficar no diretório IP da ARP).

Programe sua cache para coletar estatísticas de hits e misses. Imprima estas estatísticas antes de encerrar o programa. Utilize o destrutor da classe da cache para realizar a impressão.

Como ficou o desempenho do simulador? Faz sentido?

Parte 3 - Avaliando as caches

Como escolher a melhor cache? Para caches L1, são esperadas taxas de misses da ordem de 2% a 5%.

Você deve avaliar a melhor configuração de cache para o programa que você escolheu no exercício 3. Para isto, execute o programa diversas vezes, com configurações diferentes de caches de instruções e dados (elas podem ser diferentes entre si!) e escolha a melhor configuração. Coloque todas as configurações que você buscar no seu relatório, juntamente com a taxa de misses, indicando a direção da pesquisa. Atenção: No início da execução, o simulador lê o programa do disco e grava na memória, você não pode contabilizar estes primeiros acessos.

Dica: Utilize o conceito dos 3Cs das caches para te auxiliar na procura pela melhor configuração.

Parte 4 - Avaliando uma cache L2 (opcional valendo bônus)

Com a melhor configuração que encontrou para as caches L1, agora inclua uma cache L2 e ache a melhor configuração para ela. Neste momento, seu miss deve ficar entre 1% e 2%. A cache L2 é unificada, não existe diferença entre instruções e dados nela. Utilize o mesmo programa da Parte 3.

Entrega

O código desta atividade terá que ser entregue. Envie o relatório pelo Susy e guarde o código na sua área até que eu solicite. Enviar um relatório de apenas 1 página descrevendo a atividade realizada e os resultados obtidos.