Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion benchmark/BENCHMARK_PI5.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions benchmark/TERNARY_BITNET.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
4 changes: 2 additions & 2 deletions benchmark/compare_ternary_pi5.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Loading