Files
print_hej/update_reports.sh
Ein Anderssono a2e13a70a1 Add comprehensive performance metrics and data collection
- Added instructions, cycles, and IPC metrics to all reports
- Created CSV data files for each language with detailed metrics
- Added timeline data (memory and CPU over time) for each run
- Updated all reports with new metrics
- Created analysis script to analyze collected data
- Generated reports for all decimal levels (1, 2, 5, 10, 100, 1000, 2000)

Key findings:
- D has highest IPC (4.00) - most efficient CPU usage
- Crystal is fastest (22ms) - faster than C and C++
- Assembly is most memory efficient (1.4MB)
- Rust and Fortran have IPC 3.11 - good optimization
2026-04-23 14:39:13 +02:00

124 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Update all report files with correct data from test results
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# Function to extract data from test output and create report
create_report() {
local decimals=$1
local input_file="reports/run_${decimals}_output.txt"
local output_file="reports/${decimals}_decimals.md"
if [ ! -f "$input_file" ]; then
echo "Warning: $input_file not found"
return
fi
echo "Creating report for $decimals decimals..."
# Create report header
cat > "$output_file" << EOF
# Performance Report: $decimals Decimal$( [ "$decimals" -gt 1 ] && echo "s" )
## Test Environment
**Hardware:**
- **Model:** MacBook Neo (Mac17,5)
- **Processor:** Apple A18 Pro (6 cores: 2 performance + 4 efficiency)
- **Memory:** 8 GB RAM
- **Operating System:** macOS (Darwin)
**Methodology:**
- Each language runs 4 times per test
- First run is considered "warmup" and excluded
- Results are the average of the 3 subsequent runs
- Time measured in milliseconds (ms)
- Memory measured in bytes via RSS (Resident Set Size)
## Performance Summary
### All Languages
| Rank | Language | Time (ms) | Memory (bytes) | Instructions | Cycles | IPC | Type |
|------|-----------|-----------|----------------|--------------|---------|-----|------|
EOF
# Extract data and sort by time, then memory
grep "SUCCESS" "$input_file" | sed 's/\x1b\[[0-9;]*m//g' | \
awk '{
lang = $1
# Time is the 3rd field (after "SUCCESS")
time = $3
# Memory is the 5th field (after "ms,")
mem = $5
# Remove commas from memory
gsub(/,/, "", mem)
print lang, time, mem
}' | sort -k2 -n -k3 -n | \
awk '{
rank = NR
lang = $1
time = $2
mem = $3
# Determine type based on language
if (lang == "Assembly" || lang == "C" || lang == "C++" || lang == "Rust" || \
lang == "Go" || lang == "Nim" || lang == "Odin" || lang == "Fortran" || \
lang == "Swift" || lang == "Crystal" || lang == "D" || lang == "Zig" || \
lang == "Objective-C" || lang == "Haskell") {
type = "Compiled"
} else if (lang == "Java" || lang == "CSharp" || lang == "Kotlin" || \
lang == "Scala" || lang == "Dart" || lang == "Julia") {
type = "JIT"
} else {
type = "Interpreted"
}
# Get instructions, cycles, and IPC from summary.csv
summary_file = "data/" lang "/summary.csv"
instructions = 0
cycles = 0
ipc = 0
while ((getline line < summary_file) > 0) {
if (line ~ /^instructions,/) {
split(line, arr, ",")
instructions = arr[2]
}
if (line ~ /^cycles,/) {
split(line, arr, ",")
cycles = arr[2]
}
if (line ~ /^ipc,/) {
split(line, arr, ",")
ipc = arr[2]
}
}
close(summary_file)
printf "| %d | %s | %s | %s | %s | %s | %.2f | %s |\n", rank, lang, time, mem, instructions, cycles, ipc, type
}' >> "$output_file"
# Add detailed results section
cat >> "$output_file" << EOF
## Detailed Results
See the full test output in \`reports/run_${decimals}_output.txt\`.
---
*Generated from Pi Calculation Benchmark - Apple A18 Pro Performance Study*
EOF
echo "✓ Created $output_file"
}
# Create reports for all decimal levels
for decimals in 1 2 5 10 100 1000 2000; do
create_report "$decimals"
done
echo ""
echo "=== All reports updated ==="