Skip to content

Sync gfx11 with master (2026-11-03) - #176

Merged
Annieren merged 426 commits into
gfx11from
jimwu.gfx11-sync-master-1103
Nov 4, 2026
Merged

Annieren merged 426 commits into
gfx11from
jimwu.gfx11-sync-master-1103

Conversation

@jimw567

@jimw567 jimw567 commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

Merge fork master through 2c7fa78ff into gfx11.

Resolve upstream FP8, fused matmul, and DirectIO changes while retaining gfx11 MMQ/MoE tuning, ROCmFP4, row padding, and channels-major SSM convolution.

Validation

  • ROCm 10.1.0a20260822 Release HIP gfx1151 build passed.
  • 21 selected CPU tests and 705 selected HIP basic-op cases passed.
  • 271 executed matmul cases passed: 161 Q4_K dense, 26 ROCmFP4 dense, and 84 Q4_K MoE.
  • Qwen3.5-4B pp128/tg32 and HTTP health/completion smoke passed.

Unsupported cases were skipped. gfx1150/gfx1153, full performance parity, and vision inference were not tested.

Generated with Claude Code

ggerganov and others added 30 commits October 22, 2026 13:56
)

* server : support typed content input for rerank endpoint

Assisted-by: Opencode/Qwen3.8 27B

* server : address rerank multimodal review findings

- reject multimodal rerank input when the model has no rerank chat template (images were silently dropped)
- translate handle_media download/base64 failures to 400 instead of 500
- reject negative top_n with 400 instead of letting resize throw
- fix comment typos, redundant comments, indentation and trailing whitespace
- README: document that TEI input accepts the same shape as Jina; drop stray blank line

Assisted-by: opencode

* Trimmed README

---------

Co-authored-by: timothywang21 <timothywang21@users.noreply.github.com>
…e-type (ggml-org#23343)

* nemotron : support non-standard GQA, BPE tokenizer and domyn-small pre-type

* gguf-py : write Metaspace prepend_scheme as GGUF metadata

* vocab : parse metaspace prepend_scheme into enum, rename key

* vocab : use metaspace prepend_scheme in detokenize, add TODOs for other tokenizers

* vocab : use constant for metaspace escaped space

---------

Co-authored-by: Martin Cimmino <martin.cimmino@domyn.com>
…patibility (ggml-org#30828)

std::aligned_alloc is unavailable on Android bionic below API 28 (Termux targets API 24); use posix_memalign like ggml.c does.
* Multi-column on Intel XMX matrix engines refactored

Multi-column (2 to 80 activation columns) mul_mat_vec_q for reordered K-quant and Q8_0 weights on the Intel XMX matrix engines (int8 DPAS, ESIMD), for the SYCL backend. It targets speculative decoding verification (2 to 8 tokens per step) and short prompt batches (9 to 80 tokens). Three types also use it for a single column (Q2_K, Q3_K, Q8_0).

* Fixed regression bug

real bug found: the first version produced NaN whenever the row count wasn't a multiple of 4

* Removed GGML_TYPE_Q8_0 activation

* rewritten xmx_mul_mat

64-byte alignment and 16-byte pitch check on the activations

* Implemented fused gate/up kernel

One launch computes up * act(gate) for both FFN weights, reading the activations once and applying SWIGLU or GEGLU in the epilogue. It covers up to 16 columns and works for all six XMX types.

* Removed the temporary XMX_NOGLU environment switch

* Q2_K min-sum optimization

Q2_K weight is d·scl·q − dmin·mc, where scl (the 4-bit scale) and mc (the 4-bit min code) apply to each half of a 32-weight group

* Added dispatch check and GRF sweep

tg128 on Q4_K_M goes from 26.67 to 28.23 tok/s on the B70 (+5.9%).
Q6_K is unchanged.
MUL_MAT passes 1727/1727 and MUL_MAT_VEC_FUSION 1361/1361.
Perplexity at batch 1 is 5.2064 with XMX and 5.2058 without.

* Renamed variables

* Added 2 environment variables

GGML_SYCL_XMX_MAX_COLS (default 80, any value 0 or higher) and GGML_SYCL_XMX_GLU_MAX_COLS (default 16, range 0 to 16):  the largest batch for the fused gate/up kernel. It is clamped to 16 because that is the most the fused kernel is compiled for, so the variable can only lower it.

* Update esimd.hpp

1. All five quant structs were repeating the same boilerplate, so I moved it into shared pieces.

2. A new helper xmx_term does one DPAS, converts it to float and scales it per row. The four branches are now one or two lines each, and the shared Cb += z * d8r is written once.

The refactor passes all three op tests. MUL_MAT_VEC_FUSION is 1369/1369, MUL_MAT is 2281/2281 (the count includes your uncommitted f32 tests) and MUL_MAT_ID is 937/937.
qwen4exp published the hc-wide residual [n_embd, hc, n_tokens] as
t_layer_inp, but the drafter reads layer inputs as [n_embd, n_tokens]
rows: llama_context sizes each embd_layer_inp buffer as n_embd * n_batch
and the DFlash encoder input is n_extract * n_embd wide. Evaluating a
DFlash draft over a qwen4exp target therefore aborts on the first request
in llama_context::extract_layer_inputs.

Collapse the streams with a plain mean before exposing them, as deepseek4
already does for its hyper-connection residual, and build the mean only
for the layers a drafter actually requested.

Assisted-by: pi:llama.cpp/ggml-org/Qwen3.8-Flash-Next-GGUF (MacBook, M5 Max, 128GB)
* glm5 : avoid sel_mask_2d input

* cont : avoid new_pool_flat input
Signed-off-by: tc-mb <tianchi_cai@icloud.com>
* opencl: add Adreno depthwise conv2d

Assisted-by: OpenCode

* opencl: use local program for depthwise conv2d

Assisted-by: OpenCode

* opencl: use singed type for args

---------

Co-authored-by: Li He <lih@qti.qualcomm.com>
…l-org#30994)

* server: realtime API: send complete after committed audio drains

* server: realtime API: complete a commit at its end row

Completion is triggered when the stream runs dry, which is a timing
proxy: audio appended while the tail drains leaks into the committed
item, a final commit before the drain merges both items, and back to
back commits collapse into one.

mtmd_audio_stream_flush() records the row count at the end of the
flushed audio (mtmd_audio_stream_get_n_rows_flushed), next to the rows
produced so far (mtmd_audio_stream_get_n_rows). The slot keeps a FIFO
of these end rows and completes each commit once every row up to it is
decoded.

---------

Co-authored-by: Pascal <admin@serveurperso.com>
Signed-off-by: Todd Malsbary <todd.malsbary@intel.com>
…l-org#30684)

Signed-off-by: Todd Malsbary <todd.malsbary@intel.com>
…INARY_NX` (back-to-back ADDs, etc) (ggml-org#30843)

* hex-fusion: support for GELU+MUL, REPEAT+GET_ROWS and BINARY_NX (back-to-back ADD/MUL/...)

* hex-fusion: factor out fusion logic into separate .h and .cpp and update all related code

* hex-fusion: allow for RMS_NORM+MUL fusions for non-contig tensors

* hex-fusion: streamline fusion eligibility checks and cover missing corner cases

* hex-fusion: streamline fusion flow

* hex-opbatch: make n_tensors limit more scalable

* hex-bufs: adjust the trace buff sizing

* hex-glu: cleanup glu-ops interfaces and add kernel_params

* hex-kparams: clean up kparams handling in unary, ssm-conv, and other ops

* hex-kparams: update the rest of the ops PAD,DIAG,... to use kparams

* hex-unary: add support for collapsing dims

* hex-ops: cleanup redundant runtime checks

* hex-ops: consistent use of kernel_type in all kparams

* hex-fusion: remove redundant check in gdn+cpy

* hex-fusion: further streamlining of fusion rules and code

* hex-fusion: cleanup naming

* hex-opfmt: cleanup op formatting

* hex-fusion: bump fusion lookahead to 64

* hex-fusion: fuse SSM_CONV+SILU

* hex-fusion: fix hvx register spills in fused ssm_conv+silu

* hex-fusion: add more GLU fusions

* hex-fusion: remove duplicate checks and use ggml-common helpers

* hex-kparams: refactor kparams into htp-kparams.h/cpp

* hex-fusion: fix binary-nx fusion regression

* hex-kparams: another pass at cleaning up kparams (removing unused, etc)

* hex-kparams: streamling nameing and move _check_ wrappers into .h

* hex-kparams: templetize htp_kparams_check_<op> to reduce code bloat

* hex-ops: de-duplicate op dispatch switches

* hex-kparams: trim down exposed kparams calls

* hex-kparams: simplify type casting of kparams structs

* hex-fence: de-dup fence tensor construction

* hex-opbatch: simplify tensor shape init/checks

* hex-mm: cleanup leftovers of the original QK defines

* hex-fa: fix stack overflow on older npu firmware

* hex-ctx: move dma_caches into ops_ctx
* vocab : fix Nemotron-3.5-Embed tokenization

* Update src/llama-vocab.h

Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>

* rename

* Update src/llama-vocab.cpp

Co-authored-by: Daniel Bevenius <daniel.bevenius@gmail.com>

---------

Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>
Co-authored-by: Daniel Bevenius <daniel.bevenius@gmail.com>
* spec : add probabilistic sampling for DFlash2 drafts

* spec : apply review suggestions

---------

Co-authored-by: Pranesh Gonegandla <pgonegandla@nvidia.com>
* remove python from tests

* add behavior and backend ctest labels

* add behavior check workflow

[no ci]
Run npm audit fix, then bump the remaining vulnerable packages within
their current majors: storybook 10.6.2, vitest 4.1.12, vite 7.3.7,
@modelcontextprotocol/sdk 1.32.1, dompurify 3.4.17, mermaid 11.17.2,
@vite-pwa/assets-generator 1.0.4 and @tailwindcss/typography 0.5.20.

Override katex to 0.18.11 and postcss-selector-parser to 7.1.6 since
their dependents still pin vulnerable ranges, bump the sharp override
to 0.35.5, and pin @storybook/svelte so npm does not resolve the 11.0
alpha through the addon-svelte-csf peer range.

Storybook stays on 10.6.2 as 10.6.3 is newer than min-release-age.

Assisted by: Claude (Opus 5.5 Medium)
* hex-ceil: add CEIL(f32) op

* hex-ceil: add f16 version

* hex-ops: update supported ops

* hex-ops: update docs with supported ops
Signed-off-by: Adrien Gallouët <angt@huggingface.co>
* qwen4exp : build the QSA selection without the kq_mask

* clean

* lang

* qwen4exp : reshape the fused QSA selection to the kq_mask streams

ggml_top_k_mask with a single keep row returns [n_kv, n_tokens], while
build_attn_qsa expects the kq_mask layout [n_kv, n_tokens/n_stream, 1, n_stream].
With several streams the shape assert failed at graph reserve.

* test the QSA optimization

* reword

* update build_fused_top_k_mask instead of handwiring

* simplify

* keep il at the end for consistency
…31053)

* CUDA: fix build after chunked CUDA graphs (ggml-org#30804)

* Apply suggestion from @JohannesGaessler

Co-authored-by: Johannes Gäßler <johannesg@5d6.de>

* Fix newlines in common.cuh

---------

Co-authored-by: Johannes Gäßler <johannesg@5d6.de>
allozaur and others added 20 commits November 2, 2026 13:36
The router only removes models it took from the Hugging Face cache, but
the models manager offered "Delete from disk" for every model, so a model
from --models-preset or --models-dir failed with a "not removable" toast.
Read the source and can_remove fields of /models and show the delete
action disabled for those models, with a tooltip (a hint line in the
mobile drawer) saying how to remove them instead.

Assisted-by: Claude (Opus 5.5 Medium)
* sycl: fold q8_0 reorder dmmv into the generic template

* sycl: template the dmmv non-K launchers

* sycl: template the dmmv K-quant launchers
…#30956)

* Update ggml-sycl.cpp

Increases -sm tensor prompt eval t/s by +19% with zero PPL change.

* Update ggml-sycl.cpp

Replace first pair of wait() calls with ext_oneapi_submit_barrier().  The wait() calls was discovered to cause MTP degradation.

* Update ggml-sycl.cpp

Adding comm_exchange function pointer to switch between 2 and 4 buffer ggml_sycl_comm_exchange versions @ initialization time (versus hot path) controlled by SYCL_ENABLE_DEFAULT_CONTEXTS=1 setting.

* Update ggml-sycl.cpp

adding back 2nd half of 4-buffer free.

* Update ggml-sycl.cpp

Removing extra whitespace.

* Update ggml-sycl.cpp

Excluding Windows until it is validated on Windows.
* vulkan: avoid redundant scans when zeroing skipped rows

* vulkan: remove unreachable zero-expert fallback
…g#30146)

* vulkan: improve small-n split-K selection on RDNA3 and RDNA4

* Clean up test cases by removing commented code

Removed tests as requested
* vulkan: add tensor-parallel all-reduce communication

* vulkan: require shared semaphores for tensor communication

Assisted-by: Codex

* vulkan: reduce directly from shared host buffers

Assisted-by: Codex

* vulkan: fix ring all-reduce races with 3+ devices

Two hazards in the tensor-parallel ring all-reduce made -sm tensor output
non-deterministic with three GPUs:

- With n = 3, step t's host-slot region starts at t * cels * 2 bytes, which
  is not a multiple of 32, so consecutive steps' transfer copies share a
  32-byte sector of the imported host memory. On NVIDIA the later copy's
  leading bytes (up to 10 F16 values at the start of every chunk) end up
  stale in host memory, even when the copies are ordered by a semaphore.
  Give every step its own 256-byte-aligned region. n = 2 and n = 4 already
  had aligned regions for the usual sizes, so their layout is unchanged.

- A single-shot all-reduce leaves every device's host slot being read by all
  peers, but the next ring round only ordered its first transfer after nextd,
  and only from round 2 on. With n >= 3 a device could overwrite its slot
  while prevd was still summing it. Wait for all peers on the first ring
  round after a single-shot all-reduce.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* vulkan: fold the tensor-parallel all-reduce into the compute submissions

With -sm tensor the meta backend drives every device from one thread and calls
graph_compute once per subgraph (two per layer), so decode was bound by the CPU
cost of submitting, not by the GPUs: ~1500 vkQueueSubmit per token for a 64-layer
model on two GPUs, with the GPUs idle ~40% of the time.

- Don't split subgraphs by flops while a communicator is active. The heuristic
  was tuned for whole graphs and turned each small subgraph into ~5 submits.
- Fold the small (single-shot) all-reduce into the compute submissions: the
  last command buffer of a subgraph stays open, the all-reduce appends the
  gather copy to it and submits it, then opens the next command buffer with the
  peer waits and the reduce, which the next subgraph is recorded into. Each
  subgraph now costs one submit per device. The reserved progress value is
  attached by whichever path submits the open context.
- Alternate between two host slots, placed outside the ring's regions, so the
  gather no longer needs a WAR wait on the peers' previous reduce.
- On synchronize, submit the deferred work of every device in the group first,
  so the tail of the graph runs on all devices in parallel.
- Wait for the transfer queue as well as the compute queue before freeing or
  reallocating communication buffers, and don't leave a stale cap behind when a
  reallocation fails.

qwen3.5 27B Q8_0 on RTX 4090s, tg128: 2 GPUs 32.2 -> 49.7 t/s, 3 GPUs 20.9 ->
40.0, 4 GPUs 15.0 -> 27.6; pp512 on 2 GPUs 2138 -> 2320. Greedy output is
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* - Two-phase all-reduce over shared host memory: write own slot + signal, wait peers + add from their slots
- One exported timeline per device, no backend hooks; comm work recorded in the backend compute ctx
- F16 wire above 1 MiB, F32 below; small reductions ride with the next graph submit
- Double-buffered, grow-only host slots; zero-size splits zeroed
- Remove ring, transfer-queue leg, device staging, shrink, Windows shims
- comm_init returns nullptr when unsupported; add GGML_VK_COMM_DISABLE
- No flops-based submit splitting for graphs below 1 GFLOP

[rebased onto the ring all-reduce fix and the folded all-reduce, which this design replaces; their backend hooks are removed here]

* add minimal submit split size

* replace opaque_fd with sync_fd for spec compliance

* add precision check

* add semaphore pool

* rename env var, add logging if requirements not met

* reduce comments

* code improvements

* vulkan: use posix_memalign for the tensor-parallel host buffers

std::aligned_alloc is unavailable on Android bionic below API 28, which
upstream switched away from in ggml-org#30828; do the same for the communicator's
host slots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* vulkan: synchronize the tensor-parallel all-reduce through the host

Exchanging SYNC_FD semaphores costs a kernel wake-up on every all-reduce:
on NVIDIA the waiting GPU starts ~35 us after its peer has finished, which
is most of the idle time in a decode step. OPAQUE_FD semaphores avoid that
but must not be imported into another physical device.

Use only device-local timeline semaphores instead. Each device signals
done[i] once its partial sum is in host memory (after a barrier that makes
it available to the host), and a bridge thread signals go[i] from the host
once all peers of i are done. The waiting side makes the host memory
visible with a host-write barrier, since its submit predates the data.
The thread spins for up to 200 us on each wait (GGML_VK_ALLREDUCE_SPIN_US)
and then blocks, so it is idle when there is no work. This also takes the
per-round fd export, dup and import calls off the main thread and drops the
VK_KHR_external_semaphore_fd requirement and the binary semaphore pool.

Graphs below 1 GFLOP, such as tensor-parallel decode slices, are no longer
split into several submits.

qwen3.5 27B Q8_0 on RTX 4090s, tg128: 2 GPUs 37.2 -> 45.4 t/s, 3 GPUs
24.1 -> 35.5, 4 GPUs 16.5 -> 27.1; pp512 unchanged. Greedy output is
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* use sync_fd on mesa drivers

* refactor for readability

* move sync_fd semaphore handling to thread, trigger mesa submit threads

* move allreduce functions to new cpp file

* clean comments

* smaller fixes, code improvements

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Ruben Ortlam <rortlam@redhat.com>
…tforms (ggml-org#31437)

* ggml : use `vm_allocate` instead of `posix_memalign` on iOS

* ggml : use vm_allocate on all Apple platforms, run test-host-buffer-release by default
Signed-off-by: Aaron Teo <aaron.teo1@ibm.com>
ggml-org#31249)

The note under 'Run the inference' still said that the CANN backend only
supports FP16/Q4_0/Q8_0 models, while the DataType table in the same file,
and ggml-cann.cpp (BF16 is enabled for MUL_MAT, GET_ROWS, CPY and CONT for
every non-310P device), say otherwise. Spell out the per-device support and
mark BF16 as unsupported on 310P instead of leaving the cell empty.

GGML_CANN_NO_PINNED is read by ggml-cann.cpp when allocating host buffers
and when advertising the host_buffer device capability, but it was not
documented, so the escape hatch for a failing pinned host allocation was
not discoverable.

Signed-off-by: li-lizhe <147392333@qq.com>
…ggml-org#29510)

* llama : use llm_attn_mask and kv_rows for unified attention

Assisted-by: dsh:llama.cpp/ggml-org/DeepSeek-V4-Flash-Vision-Exp-GGUF (Mac Studio, M2 Ultra, 192GB)

Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>

* cont : optimize `get_seq_cells`

* llama : build the kv_rows lists from per-sequence cell bitmaps

Keep a bitmap over the cells for each sequence (the transpose of `seq`), updated in seq_pos_inc/dec, and build the cell lists by walking its set bits. The lists stay in cell order, cells shared by several sequences go to every list, and nothing has to be rebuilt when cells are removed.

Also leave out of the lists the cells that the SWA hides from every token of the slice (standard and chunked SWA).

* cont : make get_kv_rows_p_min private

* cont : minor metal

* llama : use kv_rows for every ubatch of a unified cache

A ubatch made of equal-length runs with a single sequence each (f.ex. the drafts of several slots) now splits into per-sequence slices.

Any other ubatch (interleaved, uneven or coupled sequences) becomes a single slice over the cells of all its sequences instead of falling back to the dense KQ mask, so the graph keeps the topology of the reserved graph.

* llama : merge get_kv_rows_seq_ids and get_kv_rows_p_min into get_kv_rows_slices

Assisted-by: dsh:llama.cpp/ggml-org/GLM-5.3-Flash-GGUF (Mac Studio, M5 Ultra, 256GB)

---------

Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
* model : add AR-only Clover MoE support

Add GGUF conversion, model loading, and causal hybrid attention for Clover, reusing shared attention, recurrent-state, MoE, and LoRA helpers.

* Update tests/test-llama-archs.cpp

Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>

* convert : filter Clover tensors using filter_tensors

* clover : use the standard ssm_a tensor name

---------

Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>
…#31429)

* feat: support PocketTTS voices with no voice cloning

The kyutai/pocket-tts-without-voice-cloning weights ship predefined voices as the
backbone KV state after the voice prompt. The converter turns each state back into
the prompt embeddings and stores them in the mmproj (voice.<name>), the zeroed voice
encoder is left out, and the "voice" field of /tts and --tts-voice select one of them.
A speaker reference is rejected when the model has no voice encoder.

Assisted-by: Claude Fable 5.1

* convert : pocket-tts voices never fail the conversion, log the drift of the state

The voice states shipped by Kyutai are not always the ones the pack's
weights give for the prompt: italian, german and spanish match within the
bf16 rounding, english_2026-04 is 2% off and french 20% (its layer 0 state
comes from other weights), while the reference loads them as is and they
still sound like the same voice. The converter now re-prompts the backbone
with the recovered embeddings, compares the whole state and logs the
distance per voice, warning above 5%. A state that does not belong to the
weights at all is skipped, so the packs of kyutai/pocket-tts convert too.

Assisted-by: Claude Fable 5.1

* mtmd : list the predefined voices, expose them in GET /props

mtmd_gen_audio_info gains n_voices and mtmd_gen_audio_voice_name() the
names, with the voices worded as a feature of any audio generation model.
The server lists them under "voices" in /props when the model ships some.

Assisted-by: Claude Fable 5.1

* server : an unknown voice is a bad request

A model with predefined voices answers 400 naming the voice instead of 500
"failed to process TTS prompt". A model without them ignores "voice" with a
warning, as the other audio generation models do.

Assisted-by: Claude Fable 5.1

* refactor api

* fix conversion

* small renaming

* fix lint

* tts : a model with predefined voices speaks with the first one by default

Without a voice prompt such a model only produces near silence. When neither
a voice nor a speaker reference is given, llama-tts and the server now take
the first predefined voice and say so in the log, as the LFM3-Audio template
does with its default voice.

Assisted-by: Claude Fable 5.1

* mtmd : one comment per voice accessor, converter states the rule only

The clip.h comment described clip_gen_get_voice but sat above all three
functions; the converter comment quoted the drift measured per pack, which
goes stale with the next upload of the weights.

Assisted-by: Claude Fable 5.1

* clean up redundant code and comments

* mtmd: match the LFM3-Audio voice name case-insensitively

The tts chat template lowers the voice name, so Male speaks with
the male voice; the voice lookup lowers it the same way and names the
bitmap after the canonical voice.

---------

Co-authored-by: Xuan Son Nguyen <son@huggingface.co>
Co-authored-by: Pascal <admin@serveurperso.com>
Signed-off-by: Aaron Teo <aaron.teo1@ibm.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
…-1102

Sync master with upstream (2026-11-02)
Co-Authored-By: Claude Code <noreply@anthropic.com>
@liangliangchang

Copy link
Copy Markdown

Reviewed result

PR #176 has a reproducible Flash Attention prefill penalty and five prompt-specific MTP decode losses. No VLM slowdown was confirmed. The large ordinary 27B decode percentage swings remain confounded by sustained drift reproduced on two boards.

Workload Metric gfx11 PR176 Change
Qwen3-1.7B_Q4_K_M_GGUF_3968 TTFT (ms) 752.36 769.00 +2.21%
Gemma-2B_Q4_K_M_GGUF_128 TTFT (ms) 30.88 31.42 +1.73%
Gemma-2B_Q4_K_M_GGUF_8000 TTFT (ms) 1999.63 2036.37 +1.84%
Qwen3.5-2B_Q4_0_GGUF_mtp_prose MTP decode (tokens/s) 129.39 121.15 -6.37%
Qwen3.5-2B_Q4_K_M_GGUF_mtp_code MTP decode (tokens/s) 170.52 163.02 -4.40%
Qwen3.6-27B_Q4_K_M_GGUF_mtp_code MTP decode (tokens/s) 30.31 29.61 -2.33%
Qwen3.6-27B_Q4_K_M_GGUF_mtp_prose MTP decode (tokens/s) 21.72 20.47 -5.74%
Qwen3.8-27B_Q4_K_M_GGUF_mtp_prose MTP decode (tokens/s) 26.10 24.22 -7.18%

The two Gemma penalties are below the 2% screening threshold after repetition; their attention code change and diagnostic recovery are still documented. For MTP, verification cycles are faster while fewer useful tokens survive each cycle. These losses are reproducible for the catalog prompts, with changed outputs/acceptance; they are not evidence that every prompt or each GPU kernel slows down.

The first-pass Qwen3.6-27B decode loss of 14.94% is not a stable branch effect: reversed pairs are +1.15% on halo41 and -0.97% on halo06. Both builds show substantial sustained drift. Original and aggregate losses remain visible and are not treated as clean passes.

MTP source probes recover the old output and acceptance for Qwen3.5-2B Q4_K_M code (old RMS or old Q6) and Qwen3.8-27B Q4_K_M prose (old Q3/Q6 together; old Q6 alone does not). Other affected prompts retain unresolved source interactions despite a confirmed accepted-token-yield explanation.

The clearest kernel fix is to specialize contiguous Flash Attention so it does not compile the unused indexed-KV path. An isolated diagnostic removes the measured penalty for the affected shapes. MTP needs numerical/acceptance validation before choosing a production change; reverting a faster reduction is not automatically the best fix. No production patch, remote push, PR comment, or baseline-record update was made as part of this test.

Confirmed prefill regression: contiguous Flash Attention pays for optional KV indexing

Qwen3-1.7B Q4_K_M at 3968 input tokens is 2.21% slower in two independent stock-build pairs. Gemma-2B Q4_K_M has smaller repeated increases: 1.73% at 128 tokens and 1.84% at 8000 tokens. Decode is essentially unchanged for these cases.

Commit 1b6935b22 adds multi-sequence KV-row indexing. In ggml/src/ggml-cuda/fattn-mma-f16.cuh, the generic MMA kernel now selects an optional KV_rows_ptr at runtime, including in the ordinary contiguous path. The HIP dispatcher currently rejects indexed KV-row attention, but the device kernel still includes code for it. Keeping that optional path increases register pressure and spills in kernels that were already register-limited.

The Qwen kernel flash_attn_ext_f16<128,128,32,2,false,false,false> performs the same 224 dispatches per prefill repetition with the same launch dimensions. Its GPU time rises by 21.15% and 21.86% in opposite collection orders, adding 28.62 and 29.48 ms per prefill. Normalization improves by approximately 8 ms, partially offsetting this loss; the stock end-to-end prefill regression is approximately 17 ms. Matrix multiplication timing does not show a consistent increase across orders.

Compiled-object evidence supports the cause:

Attention shape gfx11 scratch bytes/thread PR scratch bytes/thread Contiguous-path diagnostic
Qwen: 128/128/32/2 320 476 320
Gemma: 256/256/8/8 1112 1136 1112

Both selected kernels use 256 VGPRs before and after the change. The PR needs more temporary storage, so it spills more values to scratch memory. Qwen's static assembly contains 307 scratch_load_b32 instructions versus 150 in gfx11, plus additional stores, wider scratch accesses, and branches. The WMMA instruction counts are unchanged. These are static code counts, not counts of instructions executed during a benchmark.

A separate diagnostic removes only the optional non-sparse KV-row lookup in these two attention instantiations and asserts that indexed rows are absent. It restores the baseline spill/branch counts. Two new paired runs per workload produced:

Workload Stock PR TTFT change Diagnostic gfx11 TTFT Diagnostic PR TTFT Diagnostic PR change
Qwen3-1.7B, 3968 +2.21% 754.20 ms 746.07 ms -1.08%
Gemma-2B, 128 +1.73% 31.48 ms 31.16 ms -1.00%
Gemma-2B, 8000 +1.84% 2005.58 ms 1993.33 ms -0.61%

All 12 diagnostic arms passed sanity, input parity, and ten prefill/ten decode sample checks. Runtime symbol binding confirms the intended overlay was used. The first diagnostic pair per workload enabled binding logs; the reversed pair did not. Qwen and long-input Gemma recover in both orders. Short-input Gemma varies by submillisecond amounts, so its exact end-to-end improvement is less certain. Gemma's long GPU traces also contain unrelated outliers; their complete family means should not be interpreted as a clean causal breakdown.

A production fix should compile separate contiguous and indexed KV paths, retaining the feature while allowing the compiler to remove indexing from the ordinary path. The diagnostic is limited to two shapes and is not a production patch. Stock comparison binaries and source worktrees were preserved.

Evidence: paired traces, compiled resources, assembly comparison, launch shapes, diagnostic measurements and runtime bindings, and diagnostic diff.

MTP throughput: accepted-token yield and numerical changes

MTP predicts a few tokens, then verifies them with the target model. Useful throughput depends on both the time for each draft/verify cycle and the number of output tokens that survive verification. A faster cycle can still produce fewer useful tokens per second when acceptance falls.

Two small-model losses reproduce in both build orders:

Workload Repeated decode TPS change Useful tokens per verification cycle Yield change Cycle-time change
Qwen3.5-2B Q4_0, prose -6.37% 2.16981 → 1.96825 -9.29% approximately -2.88%
Qwen3.5-2B Q4_K_M, code -4.40% 3.20968 → 2.97015 -7.46% -2.85% / -3.57% in the two orders

The cycle-time metric includes drafting, verification, sampling, and rollback work in server eval time; it is not one kernel's latency. Verification-cycle counts are inferred only where the server's rounded mean accepted length permits a unique integer. Acceptance counters, output lengths, and hashes are retained for every measured request.

The Q4_0 prose response changes from 116 to 125 tokens and mean draft acceptance falls from 38.9937% to 32.6944%. The Q4_K_M code response remains capped at 200 tokens, but the text changes and acceptance falls from 73.5135% to 66.3317%. Both changes affect useful work per cycle. These are reproducible losses for the catalog prompts; they do not establish a universal loss on arbitrary prompts.

Both builds have fast/unsafe math disabled. Source-level numerical changes remain possible with these flags: grouping a floating-point reduction differently changes its rounding. In this PR, commit 623c16393 adds vectorized RMS normalization and commit 2744e48d1 changes Q6_K/Q3_K dot-product reduction grouping. Small numerical differences can alter the next greedy token, after which later activations, outputs, and draft acceptance also change.

For Q4_K_M code, three independent diagnostics—scalar RMS, old Q6_K reduction, and both together—each recover all five baseline repeat output hashes and the exact five-request acceptance signatures. The affected behavior depends on the interaction of numerical changes and token-selection boundaries; it cannot be assigned uniquely to RMS alone. The associated diagnostic throughputs are separate measurements and are not pooled into the stock-build repeat estimate.

For Q4_0 prose, restoring old Q6_K reduction alone leaves the stock PR output and acceptance unchanged. Scalar RMS, with or without the old Q6 reduction, produces a third 95-token answer with 39.5349% acceptance. That improves yield, but it does not restore the original baseline answer. The evidence establishes sensitivity to RMS numerics without isolating the complete baseline-to-PR output difference. The separate MRoPE diagnostics refine this result below.

Runtime symbol bindings were checked for the diagnostic overlays. The tested source worktrees and stock binaries remain unchanged. Recovering a previous answer does not prove it has better quality, and reverting a faster reduction is not automatically the best production fix. Broader fixed-prompt accuracy and acceptance checks are needed before choosing between numerical stability and kernel-speed changes.

Evidence: repeat comparison, first repeat cycle decomposition, reverse repeat cycle decomposition, numerical diagnostics, and source/dispatch scope.

The MRoPE isolation adds a concrete second source of output sensitivity for Q4_0 prose. Disabling only the new MRoPE/SET_ROWS fusion produces a 128-token answer and 34.0764% acceptance; restoring the old rotary implementation as well gives the exact same pattern. Combining scalar RMS with the old rotary path produces a fourth answer, 114 tokens with 34.4125% acceptance. None of those restores the 116-token gfx11 answer. Actual fusion rejection and symbol bindings were recorded in both serving modes.

Offline assembly inspection explains why a fusion with the same source formula can alter numerical behavior. The new fused half-output kernel uses v_fma_mixlo_f16 / v_fma_mixhi_f16 for the final rotary expressions. The unfused path computes and stores float32 rotary output before a separate SET_ROWS conversion to half precision. Its old and new float32 rotary variants have matching arithmetic instruction counts; their diagnostic outputs agree. The fused path therefore has a different rounding pathway. This supports numerical sensitivity to the fusion, not a claim that the fused answer is incorrect. See rotary instruction comparison.

Qwen3.6-27B Q4_K_M also reproduces an acceptance-driven MTP loss: prose -5.74% and code -2.33% TPS. Useful-token yield falls 7.32% and 3.80%, while cycle time improves approximately 1.65–1.72% and 1.44–1.54%, respectively. Prose acceptance changes 59.4595% → 52.6667%, and code 96.0506% → 92.2222%; output lengths change 104 → 130 and 164 → 113. Both repeat orders agree. Completed numerical diagnostics are summarized below.

The combined scalar RMS + old Q6 + old MRoPE diagnostic also produces the same 114-token / 34.4125% pattern as RMS + old MRoPE. It does not restore the original gfx11 answer. The remaining exact source interaction for Q4_0 prose is unresolved; the report therefore attributes its measured throughput loss to accepted-token yield and identifies demonstrated numerical sensitivities without asserting a single complete source cause.

Qwen3.8-27B Q4_K_M prose reproduces a -7.18% MTP throughput change in both orders (-7.15% / -7.20%). Useful-token yield falls 8.89%, while cycle time improves 1.87% / 1.82%. Acceptance changes 67.4603% → 58.5185%, and response length 127 → 124 tokens. Its code/list timing changes disagree by order and show sustained drift; those timing magnitudes are inconclusive as branch effects. The baseline identity failure is reviewed separately.

The completed 27B numerical probes separate two cases:

  • Qwen3.6-27B Q4_K_M: scalar RMS and old Q6 reduction each produce a third prose answer (116 tokens, 50% acceptance). Together they produce 126 tokens and 49.0196% acceptance. All three leave the code prompt at the PR output and acceptance (113 tokens, 92.2222%). None recovers the gfx11 output/acceptance. The measured loss is explained by lower useful-token yield, but the full source interaction producing that change remains unresolved.
  • Qwen3.8-27B Q4_K_M: old Q6 alone leaves the PR output and 58.5185% acceptance unchanged. Scalar RMS, with or without old Q6, keeps the PR output but changes acceptance to 56.9141%. Restoring both old Q3 and Q6 reductions recovers the original 127-token output and 67.4603% acceptance, including all five output hashes and exact acceptance signatures from both gfx11 repeat runs. The additional Q3 restoration therefore matters in this configuration. A Q3-only probe was not run, so this does not isolate every interaction. Adding scalar RMS to old Q3/Q6 produces another answer (125 tokens, 65.8730% acceptance), showing that reverting more operations does not necessarily reproduce the baseline.

All nine diagnostic variants completed: 18 variant/task combinations, 21 MTP prompt rows plus their controls. The diagnostic audit verified five requests per row, input parity, required symbol bindings, and execution of the MRoPE fusion gate. See the complete numerical probe summary, which reports output and acceptance recovery separately and excludes unpaired diagnostic throughput from stock performance estimates.

@liangliangchang

Copy link
Copy Markdown

Full regression catalog: first pass

All 166 rows below ran the original catalog checks; see the audit and reviewed findings for any failed checks and input-parity details. Input and output lengths are actual measured token counts. Workload changes include generated length and saved MTP output text changes; they are not silently excluded from the comparison. The CSV contains all raw metrics, hashes, repeated metrics, and findings. LLM TTFT is prefill-derived, VLM TTFT is streaming latency, and MTP TTFT is server prompt time.

Task Workload Mode Input tokens Output tokens gfx11 / PR gfx11 TTFT ms PR TTFT ms TTFT change gfx11 TPS PR TPS TPS change Finding
000 Qwen2.5-0.5B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 12.05 11.97 -0.64% 351.06 363.85 +3.64% No >2% slowdown candidate in the full-catalog first pass.
001 Qwen2.5-0.5B-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 279.04 276.50 -0.91% 313.02 323.30 +3.29% No >2% slowdown candidate in the full-catalog first pass.
002 Qwen2.5-3B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 43.35 42.98 -0.86% 98.83 99.28 +0.45% No >2% slowdown candidate in the full-catalog first pass.
003 Qwen2.5-3B-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1216.75 1217.52 +0.06% 91.98 92.18 +0.21% No >2% slowdown candidate in the full-catalog first pass.
004 Qwen2.5-7B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 83.71 84.59 +1.05% 47.98 47.34 -1.32% No >2% slowdown candidate in the full-catalog first pass.
005 Qwen2.5-7B-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 2476.07 2475.51 -0.02% 44.96 45.23 +0.60% No >2% slowdown candidate in the full-catalog first pass.
006 Qwen3-1.7B_Q4_K_M_GGUF_128 LLM 128 128 / 128 26.76 26.64 -0.43% 161.37 163.00 +1.02% No >2% slowdown candidate in the full-catalog first pass.
007 Qwen3-1.7B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 746.80 766.51 +2.64% 119.41 120.01 +0.50% Confirmed prefill regression from contiguous Flash Attention register spilling; repeat TTFT +2.21%; isolated attention diagnostic removes the loss.
008 Qwen3-4B_Q4_K_M_GGUF_128 LLM 128 128 / 128 56.96 57.25 +0.51% 78.25 78.79 +0.69% No >2% slowdown candidate in the full-catalog first pass.
009 Qwen3-4B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1666.23 1678.71 +0.75% 63.93 64.18 +0.40% No >2% slowdown candidate in the full-catalog first pass.
010 Qwen3-4B_UD-Q4_K_XL_GGUF_128 LLM 128 128 / 128 58.77 58.79 +0.04% 76.61 77.02 +0.55% No >2% slowdown candidate in the full-catalog first pass.
011 Qwen3-8B_Q4_K_M_GGUF_128 LLM 128 128 / 128 98.25 95.88 -2.41% 44.16 44.31 +0.35% No >2% slowdown candidate in the full-catalog first pass.
012 Qwen3-8B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 2774.12 2800.32 +0.94% 39.29 39.44 +0.37% No >2% slowdown candidate in the full-catalog first pass.
013 Qwen3.5-2B_Q4_K_M_GGUF_128 LLM 128 128 / 128 28.96 28.85 -0.37% 129.76 129.71 -0.04% No >2% slowdown candidate in the full-catalog first pass.
014 Qwen3.5-4B_Q4_K_M_GGUF_128 LLM 128 128 / 128 61.88 57.67 -6.80% 64.09 64.13 +0.06% No >2% slowdown candidate in the full-catalog first pass.
015 Qwen3.5-9B_Q4_K_M_GGUF_128 LLM 128 128 / 128 99.74 101.13 +1.39% 38.03 37.93 -0.25% No >2% slowdown candidate in the full-catalog first pass.
016 Llama-2-7B_Q4_K_M_GGUF_128 LLM 128 128 / 128 92.67 90.18 -2.69% 49.96 50.16 +0.39% No >2% slowdown candidate in the full-catalog first pass.
017 Llama-2-7B_Q4_K_M_GGUF_1920 LLM 1920 128 / 128 1318.57 1304.21 -1.09% 35.81 35.93 +0.31% No >2% slowdown candidate in the full-catalog first pass.
018 Gemma-2B_Q4_K_M_GGUF_128 LLM 128 128 / 128 30.78 32.13 +4.37% 121.07 120.75 -0.27% Small repeated prefill penalty (+1.73%); Flash Attention scratch use increases. Attention diagnostic removes the penalty; submillisecond timing varies by order.
019 Gemma-2B_Q4_K_M_GGUF_8000 LLM 8000 128 / 128 1988.96 2031.97 +2.16% 111.06 111.17 +0.09% Small repeated prefill penalty (+1.84%) from Flash Attention; isolated contiguous-path diagnostic removes the loss.
020 SmolLM2-1.7B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 29.79 28.35 -4.83% 164.81 165.77 +0.58% No >2% slowdown candidate in the full-catalog first pass.
021 SmolLM2-1.7B-Instruct_Q4_K_M_GGUF_8000 LLM 8000 128 / 128 3222.95 3204.38 -0.58% 37.37 37.41 +0.12% No >2% slowdown candidate in the full-catalog first pass.
022 SmolLM2-1.7B-Instruct_F16_GGUF_128 LLM 128 128 / 128 30.86 30.05 -2.61% 52.88 53.01 +0.24% No >2% slowdown candidate in the full-catalog first pass.
023 SmolLM2-1.7B-Instruct_F16_GGUF_8000 LLM 8000 128 / 128 2952.12 2927.01 -0.85% 25.31 25.34 +0.11% No >2% slowdown candidate in the full-catalog first pass.
024 Llama-3.1-8B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 96.25 94.19 -2.14% 44.74 44.94 +0.45% No >2% slowdown candidate in the full-catalog first pass.
025 Qwen3-30B-A3B-Instruct-2507_Q4_K_M_GGUF_128 LLM 128 128 / 128 103.89 101.42 -2.38% 87.27 87.75 +0.55% No >2% slowdown candidate in the full-catalog first pass.
026 Gemma-4-E2B-IT_Q4_K_M_GGUF_128 LLM 128 128 / 128 38.30 38.05 -0.65% 107.53 109.13 +1.49% No >2% slowdown candidate in the full-catalog first pass.
027 Gemma-4-E2B-IT_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1098.09 1084.09 -1.27% 101.07 102.38 +1.30% No >2% slowdown candidate in the full-catalog first pass.
028 Gemma-4-E2B-IT_BF16_GGUF_128 LLM 128 128 / 128 40.07 39.15 -2.29% 42.94 43.19 +0.58% No >2% slowdown candidate in the full-catalog first pass.
029 Gemma-4-E2B-IT_UD-Q4_K_XL_GGUF_128 LLM 128 128 / 128 39.46 38.14 -3.36% 103.98 105.53 +1.49% No >2% slowdown candidate in the full-catalog first pass.
030 Qwen3.5-35B-A3B_Q4_K_M_GGUF_128 LLM 128 128 / 128 99.31 95.29 -4.05% 62.45 62.32 -0.20% No >2% slowdown candidate in the full-catalog first pass.
031 Qwen3.5-35B-A3B_VLM VLM 414 128 / 128 472.28 464.25 -1.70% 61.25 61.00 -0.42% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
032 Qwen3.6-35B-A3B_Q4_K_M_GGUF_128 LLM 128 128 / 128 98.20 96.37 -1.87% 62.23 62.10 -0.20% No >2% slowdown candidate in the full-catalog first pass.
033 Qwen3.6-35B-A3B_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 2219.55 2166.12 -2.41% 60.92 60.68 -0.39% No >2% slowdown candidate in the full-catalog first pass.
034 Qwen3.6-35B-A3B_VLM_large-context VLM 16262 294 / 201 10351.90 10433.88 +0.79% 55.90 55.67 -0.42% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
035 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM VLM 1322 128 / 128 760.13 754.81 -0.70% 136.70 138.50 +1.32% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
036 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_text-short-smoke VLM 20 2 / 2 13.42 13.99 +4.26% 136.44 131.97 -3.28% Initial VLM slowdown did not reproduce: repeated TTFT -0.51%, decode +1.54%.
037 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_image-caption-224 VLM 84 49 / 41 60.06 58.65 -2.34% 149.03 151.94 +1.96% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
038 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_vqa-448 VLM 228 30 / 30 143.08 139.36 -2.60% 147.16 150.70 +2.41% No >2% slowdown candidate in the full-catalog first pass.
039 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_ocr-1024 VLM 1062 44 / 119 900.91 888.46 -1.38% 136.95 140.15 +2.33% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
040 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_multi-image-reasoning VLM 436 78 / 77 263.40 258.14 -2.00% 147.01 149.68 +1.82% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
041 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_document-qa-long-context VLM 434 104 / 61 90.77 86.02 -5.23% 145.84 149.28 +2.36% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
042 Cosmos-Reason2-8B_Q4_K_M_GGUF_VLM_apolo13x VLM 1322 105 / 105 1585.62 1570.40 -0.96% 41.72 41.81 +0.21% No >2% slowdown candidate in the full-catalog first pass.
043 Cosmos-Reason2-8B_Q8_0_GGUF_VLM_prithivMLmods VLM 1322 115 / 124 1561.08 1510.82 -3.22% 26.01 26.06 +0.21% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
044 Gemma-3-4B-IT_VLM VLM 779 128 / 128 1167.52 1168.46 +0.08% 70.35 70.96 +0.87% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
045 Gemma-4-E2B-IT_Q4_0_GGUF_VLM VLM 880 128 / 19 508.88 501.16 -1.52% 103.31 104.46 +1.11% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
046 Gemma-4-E4B-IT_Q4_0_GGUF_VLM VLM 880 31 / 35 698.06 691.30 -0.97% 57.26 57.98 +1.25% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
047 Gemma-4-E2B-IT_BF16_GGUF_VLM VLM 880 128 / 128 534.25 526.34 -1.48% 42.13 42.34 +0.49% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
048 Gemma-4-E2B-IT_UD-Q4_K_XL_GGUF_VLM VLM 880 128 / 128 535.52 528.20 -1.37% 99.48 99.98 +0.50% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
049 Gemma-4-E4B-IT_BF16_GGUF_VLM VLM 880 120 / 50 745.09 734.68 -1.40% 21.93 22.02 +0.42% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
050 Gemma-4-E4B-IT_UD-Q4_K_XL_GGUF_VLM VLM 880 109 / 97 760.27 749.43 -1.43% 55.11 55.62 +0.91% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
051 Gemma-3-4B-IT_VLM_text-short-smoke VLM 21 6 / 6 52.54 51.52 -1.93% 69.85 72.88 +4.34% No >2% slowdown candidate in the full-catalog first pass.
052 Gemma-3-4B-IT_VLM_image-caption-224 VLM 292 34 / 34 976.44 976.03 -0.04% 71.67 72.74 +1.50% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
053 Gemma-3-4B-IT_VLM_vqa-448 VLM 291 17 / 17 993.23 991.18 -0.21% 70.83 72.32 +2.10% No >2% slowdown candidate in the full-catalog first pass.
054 Gemma-3-4B-IT_VLM_ocr-1024 VLM 296 241 / 236 998.95 998.28 -0.07% 72.07 73.07 +1.37% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
055 Gemma-3-4B-IT_VLM_multi-image-reasoning VLM 557 118 / 125 1913.99 1907.75 -0.33% 71.07 71.95 +1.24% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
056 Gemma-3-4B-IT_VLM_document-qa-long-context VLM 465 50 / 50 244.00 241.14 -1.17% 71.66 72.80 +1.58% No >2% slowdown candidate in the full-catalog first pass.
057 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_text-short-smoke VLM 21 6 / 6 36.96 36.47 -1.33% 89.68 102.55 +14.35% No >2% slowdown candidate in the full-catalog first pass.
058 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_image-caption-224 VLM 117 24 / 24 111.01 109.09 -1.73% 99.01 104.36 +5.40% No >2% slowdown candidate in the full-catalog first pass.
059 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_vqa-448 VLM 116 16 / 20 128.46 126.19 -1.76% 98.49 104.16 +5.76% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
060 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_ocr-1024 VLM 481 204 / 205 503.59 495.42 -1.62% 102.27 104.77 +2.45% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
061 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_multi-image-reasoning VLM 207 110 / 120 200.14 196.85 -1.65% 101.69 105.05 +3.31% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
062 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_document-qa-long-context VLM 465 32 / 32 141.59 139.06 -1.78% 99.95 104.36 +4.40% No >2% slowdown candidate in the full-catalog first pass.
063 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_text-short-smoke VLM 21 6 / 6 59.76 58.76 -1.66% 52.58 58.14 +10.57% No >2% slowdown candidate in the full-catalog first pass.
064 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_image-caption-224 VLM 117 34 / 34 166.61 162.91 -2.22% 57.10 59.03 +3.37% No >2% slowdown candidate in the full-catalog first pass.
065 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_vqa-448 VLM 116 13 / 13 185.15 180.60 -2.46% 54.74 58.54 +6.93% No >2% slowdown candidate in the full-catalog first pass.
066 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_ocr-1024 VLM 481 200 / 199 628.52 617.65 -1.73% 57.48 58.53 +1.82% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
067 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_multi-image-reasoning VLM 207 162 / 184 274.70 272.09 -0.95% 57.77 59.07 +2.24% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
068 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_document-qa-long-context VLM 465 92 / 72 245.65 240.73 -2.00% 57.05 58.49 +2.52% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
069 Qwen2.5-VL-3B-Instruct_VLM VLM 1606 36 / 12 2305.00 2286.13 -0.82% 92.50 93.07 +0.61% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
070 Qwen2.5-VL-7B-Instruct_VLM VLM 1606 53 / 54 2810.88 2788.75 -0.79% 45.92 46.23 +0.68% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
071 Qwen3-VL-4B-Instruct_VLM VLM 1322 128 / 128 1084.48 1063.68 -1.92% 71.03 71.01 -0.04% No >2% slowdown candidate in the full-catalog first pass.
072 Gemma-4-26B-A4B-IT_VLM VLM 884 55 / 58 1314.69 1294.26 -1.55% 47.17 47.31 +0.31% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
073 Gemma-4-31B-IT_VLM VLM 884 50 / 53 3823.74 3745.93 -2.03% 10.57 10.62 +0.49% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
074 Gemma-4-31B-IT_VLM_OpenNav VLM 473 256 / 256 2027.55 1992.53 -1.73% 10.70 10.74 +0.32% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
075 Qwen3-Omni-30B-A3B-Instruct_VLM VLM 1322 116 / 114 1333.46 1311.50 -1.65% 79.73 80.01 +0.34% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
076 MiniCPM-V-2_6_VLM VLM 994 48 / 48 1510.28 1506.30 -0.26% 46.62 46.95 +0.70% No >2% slowdown candidate in the full-catalog first pass.
077 MiniCPM-o-2_6_VLM VLM 1004 89 / 89 1522.54 1506.43 -1.06% 46.58 46.87 +0.63% No >2% slowdown candidate in the full-catalog first pass.
078 Janus-Pro-1B_VLM VLM 1095 51 / 51 249.02 243.78 -2.11% 152.50 153.49 +0.65% No >2% slowdown candidate in the full-catalog first pass.
079 Janus-Pro-7B_VLM VLM 1095 23 / 23 783.22 774.10 -1.17% 41.21 41.28 +0.17% No >2% slowdown candidate in the full-catalog first pass.
080 Qwen3.6-27B_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 9571.50 9565.28 -0.07% 12.28 10.45 -14.94% Large decode loss is confounded by shared sustained drift on two boards. Reversed-pair deltas are +1.15% on halo41 and -0.97% on halo06; no stable large PR-specific kernel penalty was established. Original and aggregate losses remain visible.
081 Qwen3.8-27B_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 9592.43 9367.66 -2.34% 10.24 12.57 +22.74% No repeated slowdown; both builds have sustained decode drift. The first-pass +22.74% apparent gain is not a reliable branch effect.
082 GLM-4.7-Flash_Q4_K_M_GGUF_128 LLM 128 128 / 128 123.66 124.88 +0.98% 64.82 65.19 +0.57% No >2% slowdown candidate in the full-catalog first pass.
083 Gemma-4-12B-it_Q4_K_M_GGUF_128 LLM 128 128 / 128 143.40 139.95 -2.40% 28.37 28.62 +0.87% No >2% slowdown candidate in the full-catalog first pass.
084 Gemma-3-12B-IT_Q4_K_M_GGUF_VLM VLM 367 94 / 93 1339.04 1342.09 +0.23% 27.09 27.31 +0.80% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
085 Gemma-3-12B-IT_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 4365.34 4382.38 +0.39% 24.91 25.06 +0.63% No >2% slowdown candidate in the full-catalog first pass.
086 Cosmos-Reason2-2B_Q4_K_M_GGUF_128 LLM 128 128 / 128 27.98 27.53 -1.61% 157.25 159.58 +1.48% No >2% slowdown candidate in the full-catalog first pass.
087 Cosmos-Reason2-2B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 781.47 781.32 -0.02% 116.92 118.32 +1.19% No >2% slowdown candidate in the full-catalog first pass.
088 Cosmos-Reason2-8B_Q8_0_GGUF_128 LLM 128 128 / 128 93.57 92.57 -1.07% 26.78 26.86 +0.28% No >2% slowdown candidate in the full-catalog first pass.
089 Gemma-3-4B-IT-ggmlorg_Q4_K_M_GGUF_128 LLM 128 128 / 128 51.60 51.68 +0.15% 75.74 76.60 +1.14% No >2% slowdown candidate in the full-catalog first pass.
090 Gemma-3-4B-IT-ggmlorg_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1388.33 1403.91 +1.12% 68.97 69.50 +0.78% No >2% slowdown candidate in the full-catalog first pass.
091 Gemma-4-E2B-IT-ggmlorg_Q4_0_GGUF_128 LLM 128 128 / 128 37.81 37.60 -0.56% 108.20 109.02 +0.76% No >2% slowdown candidate in the full-catalog first pass.
092 Gemma-4-E4B-IT_Q4_0_GGUF_128 LLM 128 128 / 128 64.11 63.96 -0.22% 59.93 60.78 +1.41% No >2% slowdown candidate in the full-catalog first pass.
093 Gemma-4-E4B-IT_Q4_0_GGUF_3968 LLM 3968 128 / 128 1793.09 1774.60 -1.03% 56.57 57.23 +1.17% No >2% slowdown candidate in the full-catalog first pass.
094 Gemma-4-E4B-IT_BF16_GGUF_128 LLM 128 128 / 128 74.17 73.14 -1.39% 22.27 22.39 +0.53% No >2% slowdown candidate in the full-catalog first pass.
095 Gemma-4-E4B-IT_UD-Q4_K_XL_GGUF_128 LLM 128 128 / 128 68.60 65.28 -4.83% 57.80 58.48 +1.19% No >2% slowdown candidate in the full-catalog first pass.
096 Phi-4-Mini-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 48.99 48.21 -1.60% 77.55 79.05 +1.94% No >2% slowdown candidate in the full-catalog first pass.
097 Phi-4-Mini-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1407.37 1431.38 +1.71% 57.33 57.94 +1.06% No >2% slowdown candidate in the full-catalog first pass.
098 SmolVLM-500M-Instruct_VLM VLM 853 59 / 59 215.71 214.16 -0.72% 309.48 328.54 +6.16% No >2% slowdown candidate in the full-catalog first pass.
099 SmolVLM2-2.2B-Instruct_VLM VLM 1104 81 / 81 794.42 785.89 -1.07% 117.77 118.12 +0.30% No >2% slowdown candidate in the full-catalog first pass.
100 Qwen3.5-2B_Q4_0_GGUF_baseline_code MTP/control 32 200 / 196 27.24 26.99 -0.94% 126.33 125.17 -0.92% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
100 Qwen3.5-2B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 27.09 26.19 -3.33% 125.02 123.48 -1.23% No >2% slowdown candidate in the full-catalog first pass.
100 Qwen3.5-2B_Q4_0_GGUF_baseline_prose MTP/control 22 116 / 125 26.73 27.10 +1.42% 125.72 124.01 -1.36% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
100 Qwen3.5-2B_Q4_0_GGUF_mtp_code MTP/control 32 200 / 196 29.31 29.43 +0.39% 171.81 170.58 -0.71% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
100 Qwen3.5-2B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 28.80 27.91 -3.09% 215.87 222.85 +3.23% No >2% slowdown candidate in the full-catalog first pass.
100 Qwen3.5-2B_Q4_0_GGUF_mtp_prose MTP/control 22 116 / 125 28.80 28.44 -1.25% 130.09 119.51 -8.13% Confirmed catalog-prompt decode loss (-6.37%) from lower useful-token yield; cycles are faster. Output changes and multiple numerical sensitivities are demonstrated; the complete source interaction remains unresolved.
101 Qwen3.5-2B_Q4_K_M_GGUF_baseline_code MTP/control 32 200 / 200 24.80 24.11 -2.78% 119.02 119.21 +0.16% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
101 Qwen3.5-2B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 24.32 23.66 -2.71% 117.92 119.62 +1.44% No >2% slowdown candidate in the full-catalog first pass.
101 Qwen3.5-2B_Q4_K_M_GGUF_baseline_prose MTP/control 22 124 / 130 23.95 23.67 -1.20% 118.80 119.40 +0.51% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
101 Qwen3.5-2B_Q4_K_M_GGUF_mtp_code MTP/control 32 200 / 200 26.56 26.44 -0.45% 171.10 153.93 -10.03% Confirmed catalog-prompt decode loss (-4.40%) from lower accepted-token yield; RMS-only or Q6-only diagnostics restore baseline output and acceptance. Cycles are faster.
101 Qwen3.5-2B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 26.33 25.92 -1.55% 197.46 207.77 +5.22% No >2% slowdown candidate in the full-catalog first pass.
101 Qwen3.5-2B_Q4_K_M_GGUF_mtp_prose MTP/control 22 124 / 130 26.38 25.98 -1.51% 124.28 130.47 +4.98% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
102 Qwen3.5-4B_Q4_0_GGUF_baseline_code MTP/control 32 200 / 200 60.30 61.32 +1.69% 64.93 64.50 -0.68% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
102 Qwen3.5-4B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 57.91 60.60 +4.64% 65.33 64.72 -0.93% No >2% slowdown in independent repeats.
102 Qwen3.5-4B_Q4_0_GGUF_baseline_prose MTP/control 22 110 / 147 60.10 59.49 -1.02% 65.46 64.84 -0.95% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
102 Qwen3.5-4B_Q4_0_GGUF_mtp_code MTP/control 32 200 / 200 73.64 74.87 +1.68% 123.89 120.88 -2.43% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
102 Qwen3.5-4B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 76.94 74.72 -2.89% 133.67 138.56 +3.66% No >2% slowdown in independent repeats.
102 Qwen3.5-4B_Q4_0_GGUF_mtp_prose MTP/control 22 110 / 147 70.44 75.13 +6.65% 81.05 88.10 +8.71% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
103 Qwen3.5-4B_Q4_K_M_GGUF_baseline_code MTP/control 32 200 / 200 58.03 55.62 -4.14% 59.45 59.87 +0.70% No >2% slowdown candidate in the full-catalog first pass.
103 Qwen3.5-4B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 55.89 55.42 -0.84% 59.13 59.54 +0.69% No >2% slowdown candidate in the full-catalog first pass.
103 Qwen3.5-4B_Q4_K_M_GGUF_baseline_prose MTP/control 22 150 / 147 54.58 53.33 -2.30% 58.85 59.78 +1.58% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
103 Qwen3.5-4B_Q4_K_M_GGUF_mtp_code MTP/control 32 200 / 200 68.81 71.13 +3.37% 108.40 111.65 +2.99% No >2% slowdown in independent repeats.
103 Qwen3.5-4B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 68.34 71.11 +4.06% 114.89 119.16 +3.72% No >2% slowdown in independent repeats.
103 Qwen3.5-4B_Q4_K_M_GGUF_mtp_prose MTP/control 22 150 / 147 70.47 70.14 -0.47% 72.28 79.18 +9.55% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
104 Qwen3.5-9B_Q4_0_GGUF_baseline_code MTP/control 32 200 / 200 89.57 89.83 +0.29% 38.04 39.55 +3.97% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
104 Qwen3.5-9B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 88.14 90.35 +2.50% 38.58 39.86 +3.33% No >2% slowdown in independent repeats.
104 Qwen3.5-9B_Q4_0_GGUF_baseline_prose MTP/control 22 131 / 142 89.43 88.37 -1.19% 38.23 37.40 -2.17% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
104 Qwen3.5-9B_Q4_0_GGUF_mtp_code MTP/control 32 200 / 200 106.36 106.91 +0.51% 77.80 84.88 +9.09% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
104 Qwen3.5-9B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 104.85 104.94 +0.09% 85.91 90.60 +5.46% No >2% slowdown in independent repeats.
104 Qwen3.5-9B_Q4_0_GGUF_mtp_prose MTP/control 22 131 / 142 99.75 103.35 +3.60% 58.46 61.23 +4.73% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
105 Qwen3.5-9B_Q4_K_M_GGUF_baseline_code MTP/control 32 200 / 200 80.42 81.61 +1.47% 35.32 36.06 +2.10% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
105 Qwen3.5-9B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 78.17 79.38 +1.54% 36.65 36.30 -0.94% No >2% slowdown candidate in the full-catalog first pass.
105 Qwen3.5-9B_Q4_K_M_GGUF_baseline_prose MTP/control 22 113 / 114 78.22 78.36 +0.18% 35.52 36.93 +3.98% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
105 Qwen3.5-9B_Q4_K_M_GGUF_mtp_code MTP/control 32 200 / 200 95.37 95.47 +0.10% 71.28 70.73 -0.77% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
105 Qwen3.5-9B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 97.52 94.92 -2.67% 76.02 77.99 +2.59% No >2% slowdown candidate in the full-catalog first pass.
105 Qwen3.5-9B_Q4_K_M_GGUF_mtp_prose MTP/control 22 113 / 114 92.44 94.82 +2.58% 52.62 51.69 -1.78% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
106 Qwen3.6-27B_Q4_0_GGUF_baseline_code MTP/control 32 99 / 99 276.68 273.83 -1.03% 12.84 13.34 +3.92% Sustained decode drift affects both builds and differs strongly by run order; aggregate timing changes are inconclusive as PR kernel effects. Output/acceptance changes are recorded separately.
106 Qwen3.6-27B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 274.02 270.44 -1.31% 12.58 13.34 +6.01% Sustained decode drift affects both builds and differs strongly by run order; aggregate timing changes are inconclusive as PR kernel effects. Output/acceptance changes are recorded separately.
106 Qwen3.6-27B_Q4_0_GGUF_baseline_prose MTP/control 22 142 / 151 298.62 269.89 -9.62% 12.63 13.29 +5.23% Sustained decode drift affects both builds and differs strongly by run order; aggregate timing changes are inconclusive as PR kernel effects. Output/acceptance changes are recorded separately.
106 Qwen3.6-27B_Q4_0_GGUF_mtp_code MTP/control 32 99 / 99 319.01 312.87 -1.93% 35.44 37.52 +5.86% Sustained decode drift affects both builds and differs strongly by run order; aggregate timing changes are inconclusive as PR kernel effects. Output/acceptance changes are recorded separately.
106 Qwen3.6-27B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 310.47 313.44 +0.96% 35.34 38.19 +8.07% Sustained decode drift affects both builds and differs strongly by run order; aggregate timing changes are inconclusive as PR kernel effects. Output/acceptance changes are recorded separately.
106 Qwen3.6-27B_Q4_0_GGUF_mtp_prose MTP/control 22 142 / 151 341.56 311.99 -8.66% 23.89 28.21 +18.11% Sustained decode drift affects both builds and differs strongly by run order; aggregate timing changes are inconclusive as PR kernel effects. Output/acceptance changes are recorded separately.
107 Qwen3.6-27B_Q4_K_M_GGUF_baseline_code MTP/control 32 164 / 113 239.10 238.60 -0.21% 12.41 12.39 -0.21% No repeated slowdown. Response length changes 164 to 113 tokens and baseline timing drifts; the apparent throughput gain is not a clean kernel comparison. Generated output changed; throughput can include changed generation work.
107 Qwen3.6-27B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 232.70 238.10 +2.32% 12.54 12.41 -1.02% No repeated slowdown. Sustained baseline timing drift makes the apparent throughput gain unreliable as a branch effect.
107 Qwen3.6-27B_Q4_K_M_GGUF_baseline_prose MTP/control 22 104 / 130 232.68 231.18 -0.64% 12.41 12.40 -0.10% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
107 Qwen3.6-27B_Q4_K_M_GGUF_mtp_code MTP/control 32 164 / 113 282.57 270.51 -4.27% 30.64 29.79 -2.79% Confirmed catalog-prompt decode loss (-2.33%): useful tokens/cycle -3.80% with faster cycles; generated output and draft acceptance change. RMS/Q6 diagnostics do not recover baseline output/acceptance; full source attribution remains unresolved.
107 Qwen3.6-27B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 277.91 273.80 -1.48% 29.62 30.72 +3.72% No >2% slowdown in independent repeats.
107 Qwen3.6-27B_Q4_K_M_GGUF_mtp_prose MTP/control 22 104 / 130 292.64 272.55 -6.87% 22.29 20.69 -7.18% Confirmed catalog-prompt decode loss (-5.74%): useful tokens/cycle -7.32% with faster cycles; generated output and draft acceptance change. RMS/Q6 diagnostics do not recover baseline output/acceptance; full source attribution remains unresolved.
108 Qwen3.8-27B_Q4_0_GGUF_baseline_code MTP/control 32 101 / 101 278.20 271.96 -2.24% 12.88 13.15 +2.07% No >2% slowdown candidate in the full-catalog first pass.
108 Qwen3.8-27B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 271.49 265.52 -2.20% 13.12 13.41 +2.17% No >2% slowdown in independent repeats.
108 Qwen3.8-27B_Q4_0_GGUF_baseline_prose MTP/control 22 129 / 129 267.10 266.63 -0.18% 13.01 13.13 +0.94% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
108 Qwen3.8-27B_Q4_0_GGUF_mtp_code MTP/control 32 101 / 101 315.62 304.45 -3.54% 37.17 37.75 +1.57% No >2% slowdown candidate in the full-catalog first pass.
108 Qwen3.8-27B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 309.89 311.97 +0.67% 36.12 38.11 +5.52% No >2% slowdown in independent repeats.
108 Qwen3.8-27B_Q4_0_GGUF_mtp_prose MTP/control 22 129 / 129 318.31 303.86 -4.54% 28.32 27.74 -2.05% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
109 Qwen3.8-27B_Q4_K_M_GGUF_baseline_code MTP/control 32 99 / 101 252.41 251.80 -0.24% 12.76 12.55 -1.66% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
109 Qwen3.8-27B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 252.48 256.02 +1.40% 12.70 12.66 -0.31% No repeated slowdown; both builds show sustained timing drift, so the apparent gain has uncertain magnitude.
109 Qwen3.8-27B_Q4_K_M_GGUF_baseline_prose MTP/control 22 127 / 124 251.05 248.32 -1.09% 12.27 12.58 +2.54% Original gfx11-only identity failure did not recur in either clean full repeat; retained in the audit. No repeated >2% slowdown; generated output changes.
109 Qwen3.8-27B_Q4_K_M_GGUF_mtp_code MTP/control 32 99 / 101 284.93 289.01 +1.43% 33.30 33.93 +1.89% Decode changes +1.14% / -3.91% by order, with visible sustained drift; aggregate timing is inconclusive as a kernel effect. Output/acceptance also change.
109 Qwen3.8-27B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 284.41 281.40 -1.06% 32.81 33.92 +3.39% Decode changes +5.13% / -4.63% by order, with unchanged output/acceptance and sustained drift; aggregate timing is inconclusive as a branch effect.
109 Qwen3.8-27B_Q4_K_M_GGUF_mtp_prose MTP/control 22 127 / 124 290.86 284.33 -2.24% 25.99 24.12 -7.20% Confirmed catalog-prompt decode loss (-7.18%) from useful-token yield -8.89% with faster cycles. Old Q3/Q6 reductions restore baseline output and acceptance; old Q6 alone does not. Original baseline-only identity failure is retained; both full repeats pass.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_baseline_code MTP/control 32 183 / 183 125.65 122.57 -2.45% 59.19 59.63 +0.74% No >2% slowdown candidate in the full-catalog first pass.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 120.37 119.64 -0.60% 58.10 58.83 +1.26% No >2% slowdown candidate in the full-catalog first pass.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_baseline_prose MTP/control 22 128 / 122 120.02 119.22 -0.67% 59.07 59.46 +0.65% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_mtp_code MTP/control 32 183 / 191 137.46 140.73 +2.38% 105.73 110.74 +4.74% No >2% slowdown in independent repeats. Generated output changed; throughput can include changed generation work.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 133.43 135.95 +1.89% 101.49 111.26 +9.63% No >2% slowdown candidate in the full-catalog first pass.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_mtp_prose MTP/control 22 133 / 125 133.82 136.32 +1.87% 78.40 80.24 +2.35% No >2% slowdown candidate in the full-catalog first pass. Generated output changed; throughput can include changed generation work.

@Annieren Annieren left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MTP regression will address separately.

@Annieren
Annieren merged commit 4c2011e into gfx11 Nov 4, 2026
12 of 36 checks passed
@Annieren
Annieren deleted the jimwu.gfx11-sync-master-1103 branch November 4, 2026 23:41
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.