Benchmark reprodutível de multiplicação de matrizes quadradas em C, C++, Java e Python.
O objetivo é comparar tempos de execução entre linguagens usando o mesmo contrato de entrada e o mesmo formato de saída, permitindo que colaboradores rodem os testes localmente e compartilhem seus resultados em out/<run_id>/.
Linux/WSL:
python3 -m pip install -r requirements.txt
./run_all.sh --batch --run-name meu_teste-linux-100 --B 100 --Npts 2 --M 1 --escala 1Windows PowerShell:
python -m pip install -r requirements.txt
.\run_all.ps1 -Batch -RunName meu_teste-win-100 -B 100 -Npts 2 -M 1 -Escala 1Também é possível rodar ./run_all.sh ou .\run_all.ps1 sem parâmetros para usar o modo interativo.
Cada execução gera uma pasta em out/<run_id>/ com:
resultado_c.csvresultado_c_O3.csvresultado_cpp.csvresultado_cpp_O3.csvresultado_java.csvresultado_python.csvsystem_info.mdsystem_info.jsonrun_manifest.jsongrafico_*.png
Todos os CSVs seguem o mesmo cabeçalho:
N,TCS,TAM,TDMOnde:
N: dimensão da matrizN x NTCS: tempo de cálculo da multiplicaçãoTAM: tempo de alocação e inicialização das matrizesTDM: tempo de desalocação; em Java e Python é registrado como0.0
Para cada valor de N, os benchmarks executam uma rodada de warm-up não cronometrada e depois calculam a média de M repetições cronometradas. O warm-up reduz efeitos da primeira execução, especialmente no Java por causa do JIT, e M suaviza variações pontuais do sistema.
TAM inclui alocação e inicialização das matrizes, TCS mede apenas a multiplicação, e TDM mede a liberação quando a linguagem permite controle explícito. A versão Java usa int[][], que é um array de arrays e não um buffer contíguo; isso é comportamento padrão da implementação Java deste benchmark e deve ser considerado ao comparar cache locality com C/C++.
.
├─ src/ # código-fonte dos benchmarks e gerador de gráficos
├─ experiments/ # versões ainda fora do fluxo publicável
├─ scripts/ # coleta de sistema e validação de execuções
├─ build/ # artefatos de compilação ignorados pelo Git
├─ out/ # resultados versionáveis por execução
├─ run_all.sh # execução Linux/WSL
└─ run_all.ps1 # execução Windows PowerShell
Depois de uma execução:
python3 scripts/validate_run.py out/<run_id>O validador confere CSVs esperados, cabeçalhos, valores numéricos, metadados e gráficos.
- EXECUTION.md: guia completo de execução.
- CONTRIBUTING.md: como contribuir com resultados.
- OPERATIONS.md: análise teórica de operações.
- TODO.md: plano de melhorias e próximas fases.
Este projeto está licenciado sob a licença MIT. Veja LICENSE.