#!/usr/bin/env bash set -euo pipefail # Aggregate suite runner: tiny-hot triad, random-mixed triad, comprehensive pair, optional app benches # Usage: scripts/run_suite_compare.sh [cycles_hot] [cycles_mixed] [with_apps] # cycles_hot : tiny hot cycles (default 80000) # cycles_mixed : random mixed cycles (default 120000) # with_apps : 0/1 (default 0) — if 1, runs scripts/run_apps_with_hakmem.sh ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd) cd "$ROOT_DIR" cycles_hot=${1:-80000} cycles_mixed=${2:-120000} with_apps=${3:-0} TS=$(date +%Y%m%d_%H%M%S) OUTDIR="bench_results/suite_${TS}" mkdir -p "$OUTDIR" log() { echo "[$(date +%H:%M:%S)] $*"; } log "tiny hot triad ($cycles_hot)" bash scripts/run_tiny_hot_triad.sh "$cycles_hot" | tee "$OUTDIR/tiny_hot.log" >/dev/null || true th_csv=$(sed -n 's/^\[done\] CSV: \(.*\)$/\1/p' "$OUTDIR/tiny_hot.log" | tail -n1) log "random mixed triad ($cycles_mixed)" bash scripts/run_random_mixed_matrix.sh "$cycles_mixed" | tee "$OUTDIR/random_mixed.log" >/dev/null || true rm_csv=$(sed -n 's/^\[done\] CSV: \(.*\)$/\1/p' "$OUTDIR/random_mixed.log" | tail -n1) log "comprehensive pair" bash scripts/run_comprehensive_pair.sh | tee "$OUTDIR/comp_pair.log" >/dev/null || true cp_csv=$(sed -n 's/^\[done\] CSV: \(.*\)$/\1/p' "$OUTDIR/comp_pair.log" | tail -n1) if [[ "$with_apps" == "1" ]]; then log "apps (LD-safe)" bash scripts/run_apps_with_hakmem.sh | tee "$OUTDIR/apps.log" >/dev/null || true fi summary="$OUTDIR/summary.md" { echo "# HAKMEM vs System vs mimalloc – Suite ($TS)" echo "" echo "- tiny hot triad CSV: \ \ $th_csv" echo "- random mixed triad CSV: \ \ $rm_csv" echo "- comprehensive pair CSV: \ \ $cp_csv" if [[ "$with_apps" == "1" ]]; then echo "- apps log: $OUTDIR/apps.log" fi echo "" echo "Quick peek (head):" echo ""; echo '```'; sed -n '1,20p' "$th_csv"; echo '```' echo ""; echo '```'; sed -n '1,20p' "$rm_csv"; echo '```' echo ""; echo '```'; sed -n '1,30p' "$cp_csv"; echo '```' } > "$summary" log "done → $summary"