Este projeto contém simuladores de cache desenvolvidos para a disciplina de Arquitetura de Computadores. Os simuladores permitem avaliar o desempenho de diferentes configurações de cache utilizando um arquivo de trace de acessos à memória.
O objetivo principal é implementar e analisar o comportamento de caches com diferentes organizações:
- Cache Única Unificada: Um único nível de cache que armazena tanto instruções quanto dados.
- Cache Única Dividida (Split): Um único nível de cache, mas com caches separadas para instruções e dados.
- Cache de Múltiplos Níveis: Uma hierarquia com cache L1 dividida (instruções e dados) e uma cache L2 unificada.
Os simuladores são implementados em C e utilizam um arquivo de trace (traceDijkstra.txt) para simular os acessos à memória.
cache.c: Contém a implementação das funcionalidades básicas da cache (lógica de busca, inserção, políticas de substituição, etc.), utilizada por todos os simuladores.cache.h: Arquivo de cabeçalho paracache.c, definindo as estruturas de dados e protótipos das funções da cache.simbasica.c: Implementação do simulador de cache única unificada.simsplit.c: Implementação do simulador de cache única dividida (uma para instruções, outra para dados).simniveis.c: Implementação do simulador de cache com dois níveis (L1 dividida e L2 unificada).traceDijkstra.txt: Arquivo de trace contendo os endereços de memória acessados, utilizado como entrada para as simulações. (Nota: Este arquivo é grande e pode não estar incluído diretamente no repositório. Consulte as instruções de obtenção se necessário).colocarnomedoarwuivo: Documento contendo a análise detalhada dos experimentos realizados com os simuladores.README.md: Este arquivo.
Os simuladores podem ser compilados utilizando um compilador C (como o GCC) e a biblioteca matemática (-lm). Execute os seguintes comandos no terminal, no diretório do projeto:
-
Para o simulador básico (cache unificada):
gcc -o simbasica simbasica.c cache.c -lm
-
Para o simulador com cache dividida:
gcc -o simsplit simsplit.c cache.c -lm
-
Para o simulador com múltiplos níveis de cache:
gcc -o simniveis simniveis.c cache.c -lm
Após a compilação, os simuladores podem ser executados a partir do terminal. Eles geralmente requerem um arquivo de configuração da cache e o arquivo de trace como argumentos.
Os arquivos de configuração especificam os parâmetros da(s) cache(s). O formato exato pode variar ligeiramente entre os simuladores:
-
simbasica(Cache L1 Unificada):<NBlocos_L1> <Associatividade_L1> <NPalavrasBloco_L1>Exemplo de arquivo
config_l1.txt:64 1 2 -
simsplit(Cache L1 Dividida - I1 para Instruções, D1 para Dados):<NBlocos_I1> <Associatividade_I1> <NPalavrasBloco_I1> <NBlocos_D1> <Associatividade_D1> <NPalavrasBloco_D1>Exemplo de arquivo
config_split.txt:32 1 1 32 1 1 -
simniveis(Cache L1 Dividida e L2 Unificada):<NBlocos_I1> <Associatividade_I1> <NPalavrasBloco_I1> <NBlocos_D1> <Associatividade_D1> <NPalavrasBloco_D1> <NBlocos_L2> <Associatividade_L2> <NPalavrasBloco_L2>Exemplo de arquivo
config_niveis.txt:32 1 2 32 1 2 64 2 8
-
simbasica:./simbasica <arquivo_config_l1.txt> <arquivo_trace.txt>
Exemplo:
./simbasica config_l1.txt traceDijkstra.txt
-
simsplit:./simsplit <arquivo_config_split.txt> <arquivo_trace.txt>
Exemplo:
./simsplit config_split.txt traceDijkstra.txt
-
simniveis:./simniveis <arquivo_config_niveis.txt> <arquivo_trace.txt>
Exemplo:
./simniveis config_niveis.txt traceDijkstra.txt
A saída dos simuladores geralmente inclui estatísticas como número de acessos, número de falhas (misses) e taxas de falha para cada nível de cache.
Foram realizados diversos experimentos para avaliar o impacto de diferentes parâmetros da cache (tamanho, associatividade, tamanho do bloco) e organizações (unificada vs. dividida, um nível vs. dois níveis) no desempenho geral. As análises detalhadas, incluindo os resultados das simulações e as respostas às questões propostas, podem ser encontradas no arquivo Universidade Federal do Mato Grosso do Sul.pdf que acompanha este projeto.
Este trabalho foi desenvolvido por João Pedro Santos de Brito, Arthur Antonio Cavalari Cacciatore e Pedro E Silva Candia como parte dos requisitos da disciplina de Arquitetura de Computadores 2.