Major Features: - Debug counter infrastructure for Refill Stage tracking - Free Pipeline counters (ss_local, ss_remote, tls_sll) - Diagnostic counters for early return analysis - Unified larson.sh benchmark runner with profiles - Phase 6-3 regression analysis documentation Bug Fixes: - Fix SuperSlab disabled by default (HAKMEM_TINY_USE_SUPERSLAB) - Fix profile variable naming consistency - Add .gitignore patterns for large files Performance: - Phase 6-3: 4.79 M ops/s (has OOM risk) - With SuperSlab: 3.13 M ops/s (+19% improvement) This is a clean repository without large log files. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
80 lines
2.4 KiB
Bash
Executable File
80 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# Simple all-in-one bench runner for HAKMEM vs System vs mimalloc
|
||
# - Focus: Mid/Large MT (8–32KiB) across multiple thread counts
|
||
# - Also runs Mixed (16–1024B) single-thread as a sanity check
|
||
#
|
||
# Optional: build or point to mimalloc shared library
|
||
# - If lib not found, mimalloc runs are skipped.
|
||
|
||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
|
||
cd "$ROOT_DIR"
|
||
|
||
MIMALLOC_SO="${MIMALLOC_SO:-}"
|
||
if [[ -z "${MIMALLOC_SO}" ]]; then
|
||
# Try common local build path
|
||
if [[ -f /tmp/mimalloc-build/libmimalloc.so ]]; then
|
||
MIMALLOC_SO=/tmp/mimalloc-build/libmimalloc.so
|
||
elif [[ -L /tmp/mimalloc-build/libmimalloc.so ]]; then
|
||
MIMALLOC_SO=/tmp/mimalloc-build/libmimalloc.so
|
||
fi
|
||
fi
|
||
|
||
have_mimalloc=0
|
||
if [[ -n "${MIMALLOC_SO}" && -f "${MIMALLOC_SO}" ]]; then
|
||
have_mimalloc=1
|
||
fi
|
||
|
||
echo "== HAKMEM Bench Runner =="
|
||
echo "Repo: $ROOT_DIR"
|
||
echo "mimalloc: $([[ $have_mimalloc -eq 1 ]] && echo "found at ${MIMALLOC_SO}" || echo "not found (skipping)")"
|
||
echo
|
||
|
||
# Sanity: mixed (single-thread)
|
||
echo "-- Mixed (16–1024B, single-thread) --"
|
||
if [[ -x ./bench_random_mixed_system ]]; then
|
||
./bench_random_mixed_system | sed -n '1,8p' | sed 's/^/System | /'
|
||
else
|
||
echo "System | bench_random_mixed_system not found"
|
||
fi
|
||
if [[ -x ./bench_random_mixed_hakmem ]]; then
|
||
./bench_random_mixed_hakmem | sed -n '1,12p' | sed 's/^/HAKMEM | /'
|
||
else
|
||
echo "HAKMEM | bench_random_mixed_hakmem not found"
|
||
fi
|
||
echo
|
||
|
||
# Mid/Large MT across thread counts
|
||
echo "-- Mid/Large MT (8–32KiB), threads: 1,2,4,8 --"
|
||
THREADS_SET=(1 2 4 8)
|
||
CYCLES=40000
|
||
WS=128
|
||
SEED=42
|
||
|
||
for T in "${THREADS_SET[@]}"; do
|
||
echo "[threads=${T}]"
|
||
if [[ -x ./bench_mid_large_mt_system ]]; then
|
||
./bench_mid_large_mt_system "$T" "$CYCLES" "$WS" "$SEED" | sed -n '1,6p' | sed 's/^/System | /'
|
||
else
|
||
echo "System | bench_mid_large_mt_system not found"
|
||
fi
|
||
|
||
if [[ $have_mimalloc -eq 1 ]]; then
|
||
LD_LIBRARY_PATH="$(dirname "$MIMALLOC_SO"):${LD_LIBRARY_PATH:-}" \
|
||
LD_PRELOAD="$MIMALLOC_SO" \
|
||
./bench_mid_large_mt_system "$T" "$CYCLES" "$WS" "$SEED" | sed -n '1,6p' | sed 's/^/mimalloc | /'
|
||
else
|
||
echo "mimalloc | (skipped)"
|
||
fi
|
||
|
||
if [[ -x ./bench_mid_large_mt_hakmem ]]; then
|
||
./bench_mid_large_mt_hakmem "$T" "$CYCLES" "$WS" "$SEED" | sed -n '1,12p' | sed 's/^/HAKMEM | /'
|
||
else
|
||
echo "HAKMEM | bench_mid_large_mt_hakmem not found"
|
||
fi
|
||
echo
|
||
done
|
||
|
||
echo "== Done =="
|