Repositório dedicado ao primeiro trabalho prático de Arquiteturas Avançadas. Nesse trabalho é esperado que nós otimizemos um código de multiplicação de matrizes em C.
Da especificação do trabalho:
A partir do código de multiplicação de matrizes fornecido, implemente ao menos 3 otimizações que melhorem seu desempenho, sendo no mínimo uma que o principal objetivo seja melhorar o aproveitamento da cache. Justifique os ganhos de desempenho com valores de contadores de hardware medidos com o perf. Detalhe as características do processador utilizado para os testes. Deve ser informado o nome, família, issue, frequência, tamanho da janela de instruções, número e tipos de unidades funcionais, número de entradas da reservation station e reorder buffer, número de portas de memória (load e store), hierarquia de cache (tamanho e características da L1, L2, L3), tipo de memória DRAM, e qualquer outra que ache pertinente. (dica: consulte o wikichip) Recomenda-se alterar apenas as funções multiplica e aloca
São esperadas pelo menos 30 execuções para cada experimento (o valor considerado
será a média aritmética dessas). Além disso, repita as execuções para capturar o
valor sem a interferência do perf
.
A dimensão de entrada das matrizes é fixa (1024x1024), porém o restante é variável para o experimento.
Variáveis:
- Otimizações de código aplicadas (i.e. as 3 que faremos)
- Otimização automática de compilador (O0, O1, O2, O3)
- SMT (?)
Para buildar, rode esse único comando no root do repositório:
make