#!/bin/sh
# Build every step, verify correctness (each binary refuses to benchmark if
# edge.csv does not parse exactly), run each on bench.csv, print the table.
# Each binary already does 3 in-process repetitions and reports its best.
set -e
cd "$(dirname "$0")"
[ -f bench.csv ] || { echo "bench.csv missing -- run: python3 gen_data.py"; python3 gen_data.py; }
for s in step1_naive step2_mmap step3_zerocopy step4_swar step5_typed; do
echo "== $s =="
c++ -std=c++20 -O2 "$s.cpp" -o "$s.bin"
./"$s.bin" | tee "/tmp/$s.out"
echo
done
echo "===================== summary ====================="
printf "%-16s %10s %12s %10s\n" step "MB/s" "Mrows/s" allocs
for s in step1_naive step2_mmap step3_zerocopy step4_swar step5_typed; do
line=$(grep '^BENCH' "/tmp/$s.out")
mbps=$(echo "$line" | sed 's/.*mbps=\([0-9.]*\).*/\1/')
secs=$(echo "$line" | sed 's/.*secs=\([0-9.]*\).*/\1/')
rows=$(echo "$line" | sed 's/.*rows=\([0-9]*\).*/\1/')
allocs=$(echo "$line" | sed 's/.*allocs=\([0-9]*\).*/\1/')
mrps=$(echo "$rows $secs" | awk '{printf "%.1f", $1/$2/1e6}')
printf "%-16s %10s %12s %10s\n" "$s" "$mbps" "$mrps" "$allocs"
done