diff --git a/benchmark/BENCHMARK_PI5.md b/benchmark/BENCHMARK_PI5.md index 4387c0e..4cc18c6 100644 --- a/benchmark/BENCHMARK_PI5.md +++ b/benchmark/BENCHMARK_PI5.md @@ -34,7 +34,7 @@ M=gguf_artifacts/gemma4-e2b-Q4_K_M.gguf # geist auto-runs prefill on all 4 cores and decode on 3. # Each point is the MEAN of 10 measured repeats, taken AFTER a discarded # warm-up run (--warmup) that pages weights resident and spins up the OMP pool: -GEIST_WEIGHT_MMAP=1 OMP_WAIT_POLICY=active \ +OMP_WAIT_POLICY=active \ bin/pi5/release/tests/bench_perf_sweep --gguf $M --seq-lens 128,256,512,1024 --decode-n 16 --warmup 16 --repeats 10 # llama.cpp reference (4 threads, prefill sweep; llama-bench warms up internally): llama-bench -m $M -p 128,256,512,1024 -n 32 -t 4 diff --git a/benchmark/TERNARY_BITNET.md b/benchmark/TERNARY_BITNET.md index 6a7ec37..1becf78 100644 --- a/benchmark/TERNARY_BITNET.md +++ b/benchmark/TERNARY_BITNET.md @@ -170,8 +170,9 @@ the unmodified f16 dot products — only *which* rows get scored is approximate. lm_head drops **49.9 → 9.2 ms/token (5.4×)**; RSS +82 MB. Greedy output is **byte-identical** to the exact dense head (verified, multiple -prompts) — the true argmax is always inside the 512 candidates. Opt-in; default -off keeps the exact head (and non-greedy sampling falls back automatically). +prompts) — the true argmax is always inside the 512 candidates. **Default on** +for greedy decode on an eligible tied lm_head; `GEIST_SPEC_HEAD=0` forces the +exact head, and non-greedy sampling falls back automatically. ### Result — geist vs Cougar vs bitnet.cpp (same Pi, same i2_s model) diff --git a/benchmark/compare_ternary_pi5.sh b/benchmark/compare_ternary_pi5.sh index 503ba93..d549f80 100755 --- a/benchmark/compare_ternary_pi5.sh +++ b/benchmark/compare_ternary_pi5.sh @@ -130,14 +130,14 @@ LLAMA_PN=( -p "$SEQ_LENS" -n "$DECODE_N" -t "$THREADS" -r "$REPEATS" ) echo note "=== geist (TQ2_0, SDOT default) ===" -GEIST_WEIGHT_MMAP=1 OMP_WAIT_POLICY=active OMP_NUM_THREADS="$THREADS" \ +OMP_WAIT_POLICY=active OMP_NUM_THREADS="$THREADS" \ "$GEIST_BIN" --gguf "$MODEL" --seq-lens "$SEQ_LENS" \ --decode-n "$DECODE_N" --warmup "$DECODE_N" --repeats "$REPEATS" \ | tee "$OUT/geist.jsonl" # Optional: geist with TL1 LUT decode (Apple-tuned path; measure on A76 too). note "=== geist (TQ2_0, GEIST_TL1=1 decode) ===" -GEIST_TL1=1 GEIST_WEIGHT_MMAP=1 OMP_WAIT_POLICY=active OMP_NUM_THREADS="$THREADS" \ +GEIST_TL1=1 OMP_WAIT_POLICY=active OMP_NUM_THREADS="$THREADS" \ "$GEIST_BIN" --gguf "$MODEL" --seq-lens "$SEQ_LENS" \ --decode-n "$DECODE_N" --warmup "$DECODE_N" --repeats "$REPEATS" \ | tee "$OUT/geist-tl1.jsonl"