Skip to content

chore(scribe): consolidate Marlin int4 GEMM decisions + logs - #972

Merged
justinchuby merged 1 commit into
mainfrom
chore/scribe-marlin
Aug 14, 2026
Merged

justinchuby merged 1 commit into
mainfrom
chore/scribe-marlin

Conversation

@justinchuby

Copy link
Copy Markdown
Owner

Scribe consolidation for the Marlin int4 GEMM program landing (#960/#961/#962).

State-only change. Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

…ions, logs, histories

Merged 5 inbox drops (deckard-marlin-kernel #960, pris-marlin-numerics #961,
sebastian-marlin-bench #962, chew-marlin-numerics-review, gaff-marlin-quality-review)
into a single consolidated Marlin program entry in decisions.md, with the corrected
per-model attribution (Deckard update-10 supersedes update-8: glm block-128 gate_up
fusion is a NO-OP; glm 2.63→2.16× was the general small-M split-K retune).

- decisions.md 45,991 B → 42,104 B (HARD-GATE: archived by SIZE per charter — three
  verbose "Last consolidated" lines + the resolved #957/#948/#949 spec-capture & Lever B
  sub-entry bodies moved to decisions-archive/2026-08.md; live keeps compact pointers).
- Deleted the 5 processed inbox drops (README kept).
- Wrote orchestration logs for deckard, sebastian, pris, chew, gaff.
- Wrote session log 2026-08-14T21-43-12Z-marlin-int4-gemm-landed.
- Appended the Marlin outcome to deckard/sebastian/pris/chew/gaff histories.
- HISTORY chronicle gate: compacted sebastian (12,308 B / ~13 dated entries) — 08-12/13
  decode arc moved to history-archive.md; live keeps role + durable lessons + context +
  the 08-14 entries.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justinchuby
justinchuby merged commit 6adcf41 into main Aug 14, 2026
9 of 13 checks passed
@justinchuby
justinchuby deleted the chore/scribe-marlin branch August 14, 2026 21:58
@codecov

codecov Bot commented Aug 14, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 78.99%. Comparing base (df6d3af) to head (68256ac).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #972      +/-   ##
==========================================
- Coverage   79.63%   78.99%   -0.64%     
==========================================
  Files         356      356              
  Lines      150211   150211              
  Branches   150211   150211              
==========================================
- Hits       119620   118659     -961     
- Misses      25935    26899     +964     
+ Partials     4656     4653       -3     
Flag Coverage Δ
cli-ort-linux 83.52% <ø> (ø)
cli-ort-windows 83.11% <ø> (ø)
mlas 80.87% <ø> (-0.10%) ⬇️
offline 78.79% <ø> (-0.68%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 7 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

Copy link
Copy Markdown

✅ Benchmarks — No Regression

Comparison of criterion micro-benchmarks: PR head vs merge-base, measured on the same runner in the same job (base first → PR second).

ℹ️ Absolute times are informational only — they vary with runner load. The % change column is the reliable signal because both sides ran under identical conditions.

Status Scenario Base PR Change
✅ logit_processing/seven_processor_chain_per_step 297.77 µs 330.61 µs +11.0%
✅ kv_cache/alloc_dealloc_pages 36.81 µs 40.27 µs +9.4%
✅ grammar_masking/llguidance_compute_mask/32 71.44 µs 78.01 µs +9.2%
✅ gather/medium_f32_threads=1-internal/32768 3.62 µs 3.89 µs +7.6%
✅ qwen3_sampling_processors/top_k_top_p_fast 632.74 µs 673.31 µs +6.4%
✅ qwen3_sampling_processors/top_k_partial_selection 129.82 µs 137.17 µs +5.7%
✅ sampling_latency/min_p_per_token 191.52 µs 194.43 µs +1.5%
✅ qwen3_sampling_processors/top_p_fast_after_top_k 487.35 µs 490.68 µs +0.7%
✅ sampling_latency/top_p_per_token 351.51 µs 352.54 µs +0.3%
✅ tokenization/encode_tokens_per_second 351.13 µs 351.32 µs +0.1%
✅ qwen3_sampling_processors/top_k_top_p_full_sort_baseline 5.79 ms 5.79 ms +0.0%
✅ qwen3_sampling_processors/top_k_full_sort_baseline 1.97 ms 1.95 ms -1.2%
✅ qwen3_sampling_processors/top_p_full_sort_after_top_k_baseline 3.28 ms 3.23 ms -1.7%
✅ matmul/small_generic_bf16_threads=8/1x256x256 31.39 µs 29.54 µs -5.9%
✅ gather/medium_bf16_threads=1-internal/32768 2.40 µs 2.24 µs -6.9%
✅ matmul/medium_generic_bf16_threads=1/32x512x512 527.77 µs 490.21 µs -7.1%
✅ sampling_latency/top_k_per_token 52.10 µs 48.32 µs -7.2%
✅ matmul/small_generic_f16_threads=8/1x256x256 31.72 µs 29.24 µs -7.8%
✅ gather/small_bf16_threads=1-internal/4096 478.5 ns 441.0 ns -7.8%
✅ block_quantized_moe_cached_dense/mxfp4_cached_dense_expert_repeated_call/rows=1,H=256,I=256,E=4,top_k=1 79.58 µs 72.51 µs -8.9%
✅ reduce_mean/medium_f32_threads=1-internal/65536 253.15 µs 226.98 µs -10.3%
✅ add/large_bf16_threads=1-internal/4194304 48.68 ms 43.62 ms -10.4%
✅ matmul/medium_generic_f16_threads=8/32x512x512 31.87 µs 28.55 µs -10.4%
✅ matmul/medium_generic_f32_threads=1/32x512x512 2.40 ms 2.15 ms -10.5%
✅ gather/small_f32_threads=1-internal/4096 695.0 ns 615.2 ns -11.5%
✅ add/large_f16_threads=1-internal/4194304 44.76 ms 39.44 ms -11.9%
✅ matmul/medium_generic_bf16_threads=8/32x512x512 410.74 µs 360.50 µs -12.2%
✅ add/large_f32_threads=1-internal/4194304 43.03 ms 37.49 ms -12.9%
✅ reduce_mean/large_f32_threads=1-internal/262144 1.05 ms 912.64 µs -13.3%
✅ sampling_latency/greedy_per_token 3.46 µs 2.99 µs -13.6%
✅ reduce_mean/small_f32_threads=1-internal/4096 18.34 µs 15.83 µs -13.7%
✅ block_quantized_matmul_cached_dense/mxfp4_cached_dense_repeated_call/1x1024x1024 45.19 µs 39.00 µs -13.7%
✅ gather/small_f16_threads=1-internal/4096 519.0 ns 445.8 ns -14.1%
✅ add/small_bf16_threads=1-internal/1024 15.06 µs 12.81 µs -14.9%
🟢 tokenization/decode_tokens_per_second 6.74 ms 5.72 ms -15.1%
🟢 matmul/small_generic_f32_threads=1/1x256x256 40.18 µs 33.90 µs -15.6%
🟢 add/medium_f32_threads=1-internal/262144 2.80 ms 2.35 ms -15.9%
🟢 add/medium_f16_threads=1-internal/262144 2.88 ms 2.41 ms -16.2%
🟢 matmul/large_generic_bf16_threads=1/32x1024x1024 2.18 ms 1.82 ms -16.2%
🟢 matmul/small_generic_bf16_threads=1/1x256x256 35.04 µs 28.96 µs -17.4%
🟢 matmul/medium_generic_f32_threads=8/32x512x512 1.09 ms 897.93 µs -17.8%
🟢 matmul/small_generic_f32_threads=8/1x256x256 41.45 µs 34.01 µs -18.0%
🟢 add/medium_bf16_threads=1-internal/262144 3.02 ms 2.44 ms -19.1%
🟢 matmul/medium_generic_f16_threads=1/32x512x512 34.02 µs 27.46 µs -19.3%
🟢 matmul/small_generic_f16_threads=1/1x256x256 35.04 µs 27.97 µs -20.2%
🟢 gather/medium_f16_threads=1-internal/32768 2.79 µs 2.22 µs -20.2%
🟢 add/small_f16_threads=1-internal/1024 15.75 µs 12.14 µs -22.9%
🟢 matmul/large_generic_f16_threads=8/32x1024x1024 102.23 µs 77.32 µs -24.4%
🟢 matmul/large_generic_bf16_threads=8/32x1024x1024 1.69 ms 1.24 ms -26.4%
🟢 block_quantized_moe_cached_dense/mxfp4_uncached_expert_dequant_each_call/rows=1,H=256,I=256,E=4,top_k=1 475.71 µs 345.28 µs -27.4%
🟢 matmul/large_generic_f32_threads=1/32x1024x1024 11.92 ms 8.65 ms -27.4%
🟢 block_quantized_matmul_cached_dense/mxfp4_uncached_dequant_each_call/1x1024x1024 752.33 µs 499.02 µs -33.7%
🟢 gather/large_f32_threads=1-internal/131072 37.57 µs 24.86 µs -33.8%
🟢 matmul/large_generic_f16_threads=1/32x1024x1024 111.35 µs 72.63 µs -34.8%
🟢 block_quantized_matmul_cached_dense/mxfp4_preexpanded_dense_oncelock_like_proxy/1x1024x1024 66.98 µs 42.43 µs -36.7%
🟢 gather/large_f16_threads=1-internal/131072 17.97 µs 10.48 µs -41.7%
🟢 matmul/large_generic_f32_threads=8/32x1024x1024 6.68 ms 3.58 ms -46.5%
🟢 gather/large_bf16_threads=1-internal/131072 20.59 µs 10.43 µs -49.4%
🟢 add/small_f32_threads=1-internal/1024 474.6 ns 184.5 ns -61.1%

Visual flags: ⚠️ ≥ 15% slower, 🔴 ≥ 30% slower — calibrated against measured runner noise (~27% worst-case on multi-threaded matmul)

Host info
CPU: Apple M1 (Virtual)
Cores: 3
OS: Darwin 25.5.0 arm64
Rust: rustc 1.97.1 (8bab26f4f 2026-07-14)
Load avg: { 2.89 3.55 5.04 }
What this cannot catch
  • Regressions in code paths not covered by these benchmarks (e.g., end-to-end decode with a real model)
  • Sub-threshold regressions that compound over multiple PRs
  • Performance changes that only manifest under GPU execution
  • Latency changes in the ORT integration path (these benchmarks exercise the native Rust kernels)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant