Este repositório contém um simulador de cache parametrizável por linha de comando
São considerados para a simulação endereços de 32 bits endereçados a byte
A entrada é um arquivo binário que contém valores inteiros sem sinal de 4 bytes (a.k.a. 32 bits) que são os endereços requisitados à memória cache
Os valores são lidos do arquivo e é simulado acesso aos endereços de memória e no final da simulação é retornado um relatório com informações de Hits, Misses, Tipos dos Misses
Foi feito como o trabalho da cadeira de Arquitetura e Organização de Computadores II
O usuário define as configurações da cache a ser simulada. Pode escolher o número de conjuntos, tamanho do bloco, nível de associatividade e a política de substituição
Existem 5 políticas de substituição implementadas, são elas
Random
,
Least Recently Used
,
First in Firt out
,
Least Frequently Used
,
Most Recently Used
É possivel obter a saída em 2 tipos diferentes de formatação (com e sem labels)
A forma de utilizar o simulador é a seguinte
java -jar cache_simulator.jar <nsets> <bsize> <assoc> <replacement> <formato_saida> <arquivo_entrada>
nsets
-> é o número de conjuntos da cache a ser simulada
bsize
-> é o número de bytes presentes em cada bloco
assoc
-> é a associatividade a ser utilizada
replacement
-> é a política de substituição a ser utilizada, pode ser:
L -> LRU
F -> FiFo
R -> Random
MRU -> MRU
LFU -> LFU
formato_saida
-> é a forma que os dados serão exibidos, quando igual a 1 a saída tem o seguinte formato:
total_acessos hit_hate miss_rate percentual_misses_compulsorios percentual_misses_capacidade percentual_misses_conflito
quando diferente de 1, tem o seguinte formato:
Total de acessos: total_acessos
Total Hits: total_hits
Total Misses: total_misses
Total Misses Compulsórios: total_misses_compulsorios
Total Misses Capacidade: total_misses_capacidade
Total Misses Conflito: total_misses_conflito
Taxa de Hit: hit_rate
Taxa de Misses: miss_rate
Taxa Misses Compulsórios: percentual_misses_compulsorios
Taxa Misses Capacidade: percentual_misses_capacidade
Taxa Misses Conflito: percentual_misses_conflito
arquivo_entrada
-> é o caminho para um arquivo binário que contém os endereços que serão requisitados na simulação. Cada endereço deve ser representado como inteiro de 32 bits sem sinal.
Um exemplo:
java -jar .\cache_simulator.jar 512 8 2 L 0 ./src/main/data/vortex.in.sem.persons.bin
A linha de comando acima simula uma cache de tamanho total 8KB, com 512 conjuntos, cada conjunto possui duas linhas (associatividade = 2), cada linha possui 8 bytes de informação, a política de substituição utilizada é a LRU e o formato de saída é livre e o arquivo de entrada é ./src/main/data/vortex.in.sem.persons.bin
Os valores de nsets
, bsize
e assoc
devem ser potências de 2.
Existem arquivos com alguns endereços que podem ser utilizados como teste, dentro da pasta ./src/main/data/
, cada arquivo possui uma versão em .txt
e a versão .bin
O tempo de simulação para caches muito grandes e com associatividade muito alta ou totalmente associativas para as políticas LRU e LFU pode ser alto.