Esta seção explica, passo a passo, como rodar todos os benchmarks (C, C++, Java e Python) usando os scripts do repositório:
run_all.sh→ Linux / WSLrun_all.ps1→ Windows (PowerShell)
Estrutura do Projeto:
.
├─ run\_all.sh
├─ run\_all.ps1
├─ src/
│ ├─ matriz\_c.c
│ ├─ matriz\_cpp.cpp
│ ├─ MatrixMultiplication.java
│ ├─ matriz\_python.py
│ └─ plot\_benchmarks.py
└─ out/
Os resultados são salvos em out/<NOME_DA_EXECUCAO>/ nos arquivos:
resultado_c.csvresultado_cpp.csvresultado_java.csvresultado_python.csv
- gcc e g++
- Java JDK (para
javac) e JRE (parajava) - Python 3 com pip
- Pacote Python: psutil
sudo apt update
sudo apt install -y build-essential openjdk-17-jdk python3 python3-pip
python3 -m pip install --user psutilNo terminal, dentro da raiz do repositório:
chmod +x ./run_all.sh # apenas na primeira vez
./run_all.shO script vai:
- Verificar/instalar dependências (quando aplicável no seu sistema).
- Pedir um nome para a execução (ex.:
meu_id-meu_pc). - Compilar e rodar C, C++, Java e Python.
- Mover os resultados para
out/<NOME_DA_EXECUCAO>/. - Gerar automaticamente os gráficos comparativos e vai salvar em
out/<NOME_DA_EXECUCAO>/.
- PowerShell (padrão no Windows 10/11)
- winget (recomendado para instalar dependências)
- MSYS2/MinGW-w64 (para
gcceg++) ou outro toolchain equivalente - Java JDK/JRE (recomendamos open jdk)
- Python 3 + pip
- Pacote Python: psutil
-
MSYS2/MinGW: https://www.msys2.org/ Depois de instalar, abra o MSYS2 MinGW x64 e rode:
pacman -S --needed mingw-w64-x86_64-gcc
Adicione
C:\msys64\mingw64\binao PATH do Windows. -
Java (Temurin 17):
-
Via winget (em PowerShell):
winget install -e --id EclipseAdoptium.Temurin.17.JDK winget install -e --id EclipseAdoptium.Temurin.17.JRE
-
-
Python 3:
winget install -e --id Python.Python.3.12 python -m pip install --user psutil
Se necessário, habilite a execução de scripts no PowerShell como Administrador:
Set-ExecutionPolicy RemoteSignedNo PowerShell, dentro da raiz do repositório:
.\run_all.ps1Os tamanhos de matriz N são definidos dentro dos códigos (ou do script). Para usar:
10, 100, 500, 1000, 1500, 2000, 2500, 3000
Edite diretamente os arrays de valores em:
src/matriz_c.csrc/matriz_cpp.cppsrc/MatrixMultiplication.javasrc/matriz_python.py
Em C++ você pode usar:
for (int N : std::initializer_list<int>{10,100,500,1000,1500,2000,2500,3000}) { /* ... */ }Em C, declare um array e itere por índice:
int Ns[] = {10,100,500,1000,1500,2000,2500,3000};
int len = sizeof(Ns)/sizeof(Ns[0]);
for (int i = 0; i < len; ++i) { int N = Ns[i]; /* ... */ }- Os executáveis/compilações rodam a partir da pasta raiz, carregando os fontes de
src/. - Cada linguagem gera um
resultado_*.dat. - Ao final, os arquivos são movidos para
out/<NOME_DA_EXECUCAO>/.
Exemplo:
out/
└─ meu_id-meu_pc/
├─ resultado_c.dat
├─ resultado_cpp.dat
├─ resultado_java.dat
└─ resultado_python.dat
“./run_all.sh: arquivos necessários não encontrados”
→ Rode o script a partir da raiz do repositório (onde o script enxerga src/).
→ Confirme que os arquivos em src/ têm exatamente os nomes esperados.
ModuleNotFoundError: No module named 'psutil'
→ Instale: python3 -m pip install --user psutil (Linux/WSL)
→ Ou: python -m pip install --user psutil (Windows)
javac: file not found ou classpath errado
→ Compile com javac src/MatrixMultiplication.java.
→ Execute com java -cp src MatrixMultiplication.
→ Garanta que o arquivo se chama MatrixMultiplication.java e que a classe é MatrixMultiplication.
Permissão negada ao rodar .sh
chmod +x ./run_all.shgcc/g++ não encontrados (Windows)
→ Instale MSYS2/MinGW-w64 e adicione C:\msys64\mingw64\bin ao PATH.
→ Feche e reabra o terminal após alterar o PATH.
Resultados não aparecem em out/
→ Verifique se cada executável realmente criou resultado_*.dat.
→ Rode cada linguagem manualmente para ver mensagens de erro.
- Prefira compilar com otimização (
-O3) para C/C++. - Feche programas pesados e rode em condições semelhantes.
- Padronize
RUN_NAMEcom informações da máquina/data (ex.:ryzen7_5700U_2025-09-03) para comparar execuções entre computadores.