Skip to content

Latest commit

 

History

190 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Matrix Multiplication Benchmark

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>/.

Execução Rápida

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 1

Windows PowerShell:

python -m pip install -r requirements.txt
.\run_all.ps1 -Batch -RunName meu_teste-win-100 -B 100 -Npts 2 -M 1 -Escala 1

Também é possível rodar ./run_all.sh ou .\run_all.ps1 sem parâmetros para usar o modo interativo.

Saídas

Cada execução gera uma pasta em out/<run_id>/ com:

  • resultado_c.csv
  • resultado_c_O3.csv
  • resultado_cpp.csv
  • resultado_cpp_O3.csv
  • resultado_java.csv
  • resultado_python.csv
  • system_info.md
  • system_info.json
  • run_manifest.json
  • grafico_*.png

Todos os CSVs seguem o mesmo cabeçalho:

N,TCS,TAM,TDM

Onde:

  • N: dimensão da matriz N x N
  • TCS: tempo de cálculo da multiplicação
  • TAM: tempo de alocação e inicialização das matrizes
  • TDM: tempo de desalocação; em Java e Python é registrado como 0.0

Metodologia

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++.

Estrutura

.
├─ 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

Validação

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.

Documentação

Licença

Este projeto está licenciado sob a licença MIT. Veja LICENSE.

About

Comparação de desempenho na multiplicação de matrizes usando C, C++, Python, Java, Rust, Elixir, e mais. Analisando a eficiência de cada linguagem ao lidar com operações computacionalmente intensivas em diferentes escalas.

Resources

Code of conduct

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages