Skip to content

gfx11: sync with master (2026-10-16) - #151

Merged
jimw567 merged 615 commits into
gfx11from
jimwu.gfx11-sync-master-20261016
Oct 19, 2026
Merged

jimw567 merged 615 commits into
gfx11from
jimwu.gfx11-sync-master-20261016

Conversation

@jimw567

@jimw567 jimw567 commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator

Merge origin/master into gfx11.

Conflict resolution:

  • mmq: adopt upstream prec_src1; fork RDNA3.5/ROCMFP4 kernels use GGML_PREC_Q8. Upstream moved J selection into mmq.cu, so the RDNA3.5 J tuning moves to mmq_rdna35_select_J(). ggml_cuda_mmq_needs_fallback() takes cc (RDNA3.5 uses I == 64). Compacted-MoE grid kept.
  • gated_delta_net: fork RDNA3.5 chunked kernel first, then upstream MMA GDN.
  • supports_op: keep ROCMFP4 F16-activation path; add upstream fwht and MUL_MAT_ID PREC_F32 checks.
  • metal, test-backend-ops: take upstream.

Fix: mmvdq now skips fused shared experts (upstream ggml-org#29184); MUL_MAT_ID_SHARED n=1 failed on RDNA3.5.

Testing (gfx1151):

  • test-backend-ops: 18916/18916 pass.
  • mul_mat_q tile selection identical to gfx11 (kernel trace, 5 models).
  • Prefill/decode A/B vs gfx11 within noise, except Q8_0 pp128 ~-2.5% (same kernels; not root-caused).

am17an and others added 30 commits October 4, 2026 21:38
* agents: add note about skipping forks

* rm critical line
* add windows vulkan arm64 release

* add link
Signed-off-by: Adrien Gallouët <angt@huggingface.co>
…#29806)

* ggml-cpu: vectorize BF16 K tails in tinyBLAS

* tests: Skip tinyBLAS when use_ref is enabled so CPU tests compare against the vec_dot path.

* ggml-cpu: vectorize tinyBLAS F16/F32 tails
* CUDA: refactor swizzling code

* fix templates/loop bounds
* llama: support both embd + raw tokens in batch

* add to test-llama-archs

* also check case llm_arch_supports_mixed_batch = false

* constant graph topology

* have dedicated input for mixed case

* rm set_tensor_backend

* is_embd --> type

* consolidate m-rope pos handling into one place

* nits
… router mode (ggml-org#29895)

* log, server: make router child lines carry their own colors

The logger writes the color reset after the trailing newline, so the
reset opens the next line. On the shared pipe of a router child it lands
in front of the next state command, which the router then misses, and
the line break that works around it shows up as an empty log line on
every progress update.

The reset now goes before the trailing newlines, so every line is self
contained and the command goes back to its plain framing. The router
passes its effective color setting to its children, whose output ends
up in its terminal, and leaves that option out when comparing presets
on reload.

* log: enable ANSI colors on the Windows console

A Windows console renders ANSI sequences only in virtual terminal mode,
which nothing turns on for the logger, so llama-server prints raw escape
codes on the Windows 10 console while llama-cli, whose console code
enables it, shows colors. The logger now enables virtual terminal mode
on stdout and stderr when it turns colors on, and keeps colors off when
a console cannot render them. Pipes and files take the sequences as is.

* server: separate the router child commands from its logs

The child sent its state commands on the same pipe as its logs, so the
router had to pick them out of the log stream by a line prefix, and any
unterminated write in front of a command made the router miss it. This
resolves the TODO at the spawn that called for splitting stdout and
stderr.

The child now keeps stdout for the commands and points everything else
written to stdout at stderr, before anything is written. The router
reads both pipes, handles the commands from stdout and forwards stderr
as the log, and warns about any other line on the command pipe.

* server: address review from ngxson

The single server_child is now created first in the entry point and its
constructor keeps stdout for the commands, so the stream is a member of
the instance instead of a static, and init() is gone. The instance is
passed down to the server, while the CLI entry point creates its own.

* Update tools/server/server.cpp

---------

Co-authored-by: Xuan-Son Nguyen <thichthat@gmail.com>
…g#29633)

* CUDA: use MMVF for thin f16/bf16 mul_mat at small batch size

Signed-off-by: ynankani <ynankani@nvidia.com>

* adjust kernel selection logic

---------

Signed-off-by: ynankani <ynankani@nvidia.com>
Co-authored-by: Johannes Gäßler <johannesg@5d6.de>
* metal : few-row MMA mat-mul and batched copies for speculative decoding

Speculative decoding verifies a few draft tokens per step. Without the tensor API, Metal ran these mat-muls with the mat-vec kernels, whose time grows with every src1 row, so DFlash2 decoding on an M3 Ultra was slower than serial decoding.

- add mat-mul kernels for 2..16 src1 rows on 8x8 simdgroup matrices: each weight is dequantized once for all rows, and the simdgroups of a threadgroup split K. Q4_0, Q8_0 and Q5_K have their own kernels, F32, F16, Q4_1, Q5_0, Q5_1, Q4_K and Q6_K use a generic path over the 16-weight dequantizers, and Q4_0 at 2 rows uses a 2-row variant of the mat-vec kernel
- use them only on MTLGPUFamilyApple7+ without the tensor API, from the row count at which they beat the mat-vec kernels on an M3 Ultra (F32: 6, F16, Q4_K, Q5_0, Q5_1: 3, other types: 2)
- fusion table: MUL_MAT + ADD adds a same-shape residual in the MMA store, and up to 16 adjacent same-layout f32 copies between the same two tensors run as one dispatch
- the fusion checks and ggml_graph_optimize take the device props, so the reorder packs MUL_MAT + ADD only on devices that can fuse it, at every src1 row count
- views do not count toward GGML_METAL_FUSION_MAX when the reorder packs a group, so 16 recurrent state snapshot copies with views between them stay one group
- the encoder checks the inner nodes of a fused group for concurrency, tracks written views by their extent, and does not count the destination of a CPY as a read
- CONCAT splits long rows across threadgroups when there are few rows
- tests: few-row MUL_MAT, MUL_MAT_ADD, CPY_BATCH and CONCAT cases in test-backend-ops (with a prepare_graph hook for the copy order), test-metal-graph-optimize, test-metal-cpy-batch-alias

* metal : remove the CPY_BATCH fusion and the memory range changes

Remove the batched copy fusion with its kernel and tests, and revert the
memory range changes, as suggested in review. The memory ranges, the
graph reorder and the CPY encoder are again the same as on master.

* cont : clean-up

* cont : drop has_tensor gate

* cont : clean-up operand/residual logic

* cont : drop Q4_0 ne11=2 special-case

* cont : add kernels/mul_mv_mma.metal

* cont : consolidate mma pipeline selection logic

* cont : decouple fusion logic from device props

---------

Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
…ml-org#29901)

* cuda: tile the lightning indexer over keys and tokens for 4 heads

With too few heads for a wmma tile, a block scores 64 keys against 8
tokens: the keys are staged once in half precision, the queries one
head at a time, and each thread owns one key for two tokens, so no dot
product needs a cross thread reduction. Batches smaller than a token
tile keep the vector kernel. test-backend-ops measures 4 heads.

* cuda: multiply the lightning indexer tile in float

Address review from am17an: the half2 products overflow once a single
q * k exceeds the f16 range. The queries stay in float in shared memory
and each half2 of keys is widened once for both tokens, so every
product and sum is computed in float.

* cuda: widen each lightning indexer key once for all heads

The tile kernel stages the queries and weights of every head at once,
so each key element is widened from half once and feeds all heads,
with a single barrier. F16 keys are copied into the tile without a
float round trip. Keeping the keys in float in shared memory measures
slower, the occupancy drops.

* cuda: stop the lightning indexer tile from spilling registers on ROCm

Each thread of the tile kernel now scores two keys for a single token,
so a warp shares its token and the query reads are broadcasts: six
shared reads per element pair instead of nine for the same products.
The inner loop is unrolled by 8, which keeps gfx908 at 63 VGPRs with no
spill where the fully unrolled loop needed over a thousand, and makes
the kernel 36x faster on an R9700 and slightly faster on CUDA.
…l-org#29483)

* add supports for q1/q5/q3_k/q5_k/q6_k/mxfp4 of mmvq path

* Add K_QUANTS_HANDLING macro to q1_0 of mmvq path
* ggml-cpu : add Q8_0 IME1 matrix kernel for SpacemiT X60

On the SpacemiT X60, IME matrix acceleration only covered Q4_0/Q4_1/Q4_K.
Q8_0 had no IME1 kernel, and since the SpacemiT build sets
GGML_CPU_REPACK=OFF there was no repack path compiled in either, so Q8_0
had no accelerated path at all and ran roughly ten times slower than
Q4_0 for prefill on the same board.

- add make_block_q8_0x16 and the Q8_0 repack entry: interleave the
  weights into the 16-column layout the IME1 vmadot sequence expects
- add ime1::gemm_kernel_i8i8, an int8 x int8 IME1 kernel with a
  single-row and a 4-row A path; the 4-row path loads each B panel once
  and reuses it across 4 rows of A
- add quantize_a_4row_i8 for the 4-row activation quantization
- wire both into forward_mul_mat and the repack factory for Q8_0
- docs: mark Q8_0 as supported on X60

Correctness was checked against a quant-exact integer reference for
K = 32 up to 4096, with a max relative error of about 1e-6, and by
checking that generation stays coherent across several prompts.

Tested on Milk-V Jupiter (SpacemiT X60), Bianbu 2.1.1, gcc 14.2, with
Qwen2.5-0.5B-Instruct Q8_0. llama-bench -t 4 under taskset -c 0-3, 5
repetitions on an idle board: pp128 goes from 10.70 to 93.87 t/s. Q4_0
is unchanged at 106.40 -> 107.51 t/s, as expected since this does not
touch that path.

* ggml-cpu : move q8_0_16x32 decl to IME1 section

* ggml-cpu : align q8_0 IME1 kernel assignments
…rotation metadata (ggml-org#28498)

* kv-cache: save exact KV rotation metadata, reject restoring mismatched rotation

* tests : move the state rotation test to test-save-load-state

the test is now part of the save/load test matrix and runs against
every model under test, like the rest of the suite

it probes the KV cache type combinations supported by the model and
treats models that do not use attention rotation as passing vacuously

Assisted-by: pi:llama.cpp/Qwen3.8-27B

* cont : skip unsupported KV caches

---------

Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
…org#29958)

* llama : fix unexpected graph reallocation in the k-pool models

Both k-pool models built a graph shape that depends on state the
full-context reserve cannot know:

- qwen4exp branched on inp->cache_safe, which turns false as soon as
  llama_memory_seq_cp shares cells (e.g. batched-bench -pps): the QSA
  layers swapped scatter+gather for fill+concat and dropped the
  new_pool_rep leaf, so the decode graph had 12 fewer nodes than the
  reserved one
- glm5-next branched on gather = n_tokens <= 16 && n_kv > n_sel, so the
  TG decode built the gather shape (7564 nodes) while the last reserve,
  the PP one, had the dense shape (7762 nodes)

Either mismatch forces a decode-time re-reserve that drops the
worst-case sizing and bakes in the current state, so the next state
growth (n_pool, n_kv, n_new) needs more room at an unchanged graph size
and aborts under GGML_SCHED_DEBUG_REALLOC=1. Reproduce with, e.g.:

  GGML_SCHED_DEBUG_REALLOC=1 ./bin/llama-batched-bench \
    -hf ggml-org/GLM-5.3-Flash-GGUF:Q2_K -npp 2500 -ntg 32 -npl 1,2 \
    -c 32768 -pps -kvu

Always scatter+gather the pooled keys, and pick gather from context
constants only: n_ubatch bounds every ubatch, top_k + kpool - 1 bounds
n_sel. Every graph of a context then shares one shape, which the
reserve covers, and the dense path measured faster than the gather path
at 2.5k and 16k context.

Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD

* llama : drop the unused k-pool cache_safe graph API

The k-pool graphs no longer branch on cache_safe, so nothing reads
get_kpool_cache_safe() or the conditional new_pool_rep any more: both
models always pass the scatter target, which set_input_kpool now
requires instead of merely preferring.

Also drop the cache_safe copy in kpool_build_sizes(), a sizes-only
helper. The layout and state flag itself stays, it still decides which
pools a layout with shared cells must re-pool.

Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD

* tests : add a shared-seq graph reserve regression test

Decode a prompt into seq 0, share its cells with seq 1 via
llama_memory_seq_cp (what llama-batched-bench does for -pps), then keep
decoding both sequences. For the k-pool models sharing clears
cache_safe, which changes the graph topology while the pools keep
growing, so a scheduler that re-reserves with the current state
instead of the worst-case one aborts under GGML_SCHED_DEBUG_REALLOC=1.
The test registration sets that flag, and the test aborts on both
k-pool models before 2220411.

kimi-linear and minimax-01 are skipped: they reserve the final pp graph
with n_seqs = 1 (see [TAG_RESERVE_DIAG_DECAY] in llama-context.cpp), so
every multi-seq graph has a different layout and re-reserves by design.

Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD

* cont : add TODOs

* cont : fix comment

* cuda: match the moe weighted reduction on empty ubatches

ggml_cuda_match_moe_weighted_reduction rejected tensors with zero
rows. A ubatch without outputs shrinks the last layer to zero rows
through inp_out_ids, so graph_optimize dropped its alloc dep there and
the scheduler graph lost one node compared to the reserved one. The
scheduler then re-reserved at the size of that ubatch, and the next
ubatch with the same node count but larger tensors aborted under
GGML_SCHED_DEBUG_REALLOC=1.

The compute loop already skips empty nodes before trying any fusion,
so the guard only made the alloc deps depend on the row count.

* tests: build the rollback test only where internal symbols link

The shared-seq case calls llm_arch_from_string, which libllama does
not export through LLAMA_API, so linking test-recurrent-state-rollback
fails on Windows with shared libraries. Its build now sits in the
NOT WIN32 OR NOT BUILD_SHARED_LIBS block, next to test-llama-archs and
the test registration it already lives under.

* tests: skip archs by name in the shared-seq reserve test

The skip of kimi-linear and minimax-01 went through llm_arch_from_string,
which libllama does not export through LLAMA_API, so the test could not
link on Windows with shared libraries. It now compares the
general.architecture string directly, and the test builds on every
platform again.

---------

Co-authored-by: Pascal <admin@serveurperso.com>
* vulkan: sparse flash attention for quantized K/V

Assisted-by: Claude

* vulkan: single-scan sparse FA index compaction

The compaction ran one workgroup per mask row and walked the row in
BLOCK_SIZE chunks, with a workgroup scan per chunk. For decode that is
one workgroup doing KV/1024 barrier-bound iterations, so at 128k cells
it cost more than the sparse attention it feeds.

Split the row into contiguous segments instead: one per subgroup with
ballot counting over coalesced loads, or one per thread without
subgroups. A single scan over the segment counts then gives each
segment its output offset. The index list stays ascending.
* server: reject partial media truncation

* server: keep only the keep_first fix

Drop the mtmd test helper change, which no longer builds since
clip_image_f32_batch stores its entries by value, and drop the
vision test: no test fixture reaches a cut between two adjacent
media chunks with a reused cache (tinygemma3 uses SWA and wraps
images in text tokens, tinyopenjev and small-test are recurrent),
so the test passed or failed independently of the fix.

---------

Co-authored-by: Pascal <admin@serveurperso.com>
* ggml_cuda: optimize accumulation in mmq_vec_dot_fp4_fp4_mma for better performance

* remove whitespace

* fix: correct indentation in mma_block_scaled_fp4 loop
* server: support vision input for Clef

* move input_attn_causal to private

* extend old server_batch::embd

* server_batch::token::pos to multi dim

* nits

* fix abort

* fix img tokens cap

* fix yield_to_queue mutate data
…tatistics (ggml-org#27990)

* webui: Use toLocaleString() format consistently across chat message statistics

* Add missing semicolon

* ui: respect lint
* cuda: stage the lightning indexer queries in head passes for MUSA

MUSA archs 21 and 22 cap static shared memory at 28 KB, and the tile
kernel staged the queries of all four heads next to the key tile for
33 KB. The queries are now staged in passes of
LIGHTNING_INDEXER_TILE_HEADS_PER_PASS heads: two on MUSA for 25 KB,
four elsewhere where the single pass folds to the previous kernel.

* cuda: use the vector lightning indexer kernel on MUSA

Address review from am17an: the tile kernel stays off MUSA, whose archs
21 and 22 cap static shared memory at 28 KB, below the 33 KB the tile
needs, so MUSA keeps the vector kernel it ran before. This replaces the
head passes, CUDA and ROCm run the merged kernel unchanged.
…29936)

* Fix Intel prefill regression on MoE models

* Revert the n_per_expert change back to nei1
lhez and others added 23 commits October 14, 2026 09:17
tojson printed floats through a C++ stream (6 significant digits, no
".0"), so 48.858844 became 48.8588 and 1.0 became 1 in tool definitions,
tool-call arguments and other template output. Write the shortest digits
that read back as the same value, as json.dumps does. The string and safe
filters of a float use the same code.
)

* cuda : use SIMT implicit GEMM conv2d on AMD without WMMA

Assisted-by: Claude Opus

* cuda : update conv2d SIMT comment

* cuda : skip SIMT conv2d on AMD for short reductions

Co-authored-by: thelittlefireman <5165783+thelittlefireman@users.noreply.github.com>

---------

Co-authored-by: thelittlefireman <5165783+thelittlefireman@users.noreply.github.com>
- add rpc_log_format_size() and print byte counts in KiB/MiB/GiB across the
  RPC client, server and transport traces
- add rpc_log_format_tensor() and include tensor name, op, type and shape in
  the set/get/memset/copy/init tensor logs
- fix rpc_cmd_name() returning UNKNOWN for SET_TENSOR_2D, GET_TENSOR_2D,
  COMM_INIT, COMM_ALLREDUCE and COMM_FREE
- move the log helpers to ggml-rpc/log.{h,cpp} under a common rpc_log_ prefix

Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next
Signed-off-by: Adrien Gallouët <angt@huggingface.co>
…rg#29677)

When every device reports zero free memory the split points are
normalized by a zero sum, the NaN split sends layers to a device index
past the end and loading aborts with vector::_M_range_check.
…gml-org#30407)

Added that the oneapi toolkit includes the sycl dependencies. This makes it clear for first time users, that the toolkit includes all necessary dependencies, so that the user is guided to install the toolkit if they do not already have the dependencies separately
* common : add --spec-draft-n-ubatch

Allow configuring the physical batch size of the draft context. The
drafters feed it at most the drafted tokens per sequence and chunk larger
batches by its own n_ubatch, so it does not need the ubatch of the target.
A smaller value shrinks the draft compute buffer and leaves more VRAM for
the target KV cache (the draft is fitted together with the target).

The default 0 keeps the current behavior of following --n-ubatch.

Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next

* cont : remove comment

[no ci]
* ggml: fix conv_1d result layout for batched input

The GEMM behind conv_1d folds the batch into its rows, so the product
sits in memory as [OL, N, OC] while the reshape claims [OL, OC, N].
The shape is right and the contents are transposed, so nothing fires:
no assert, no abort, the graph just runs and the channels come out
interleaved with the batches. With N == 1 the two readings describe
the same buffer, which is why the three vocoders in the tree never
hit it, they all squeeze to 2d right after the call.

Reshape to the real layout and permute OC and N back. The N == 1 path
keeps its direct reshape, so the current callers build the same graph
and pay for no extra copy.

tests/test-conv-1d.cpp compares one batched convolution against N
single batch convolutions built from the same weight and the same
input slices. Five of the seven geometries fail before this change and
all seven pass after. N == 1 and OC == 1 pass either way, since
swapping two dimensions when one of them is 1 changes nothing.

The batched path matters to downstream audio projects where several
synthesis lanes share a single graph. Nothing in mtmd batches a
vocoder today, each one streams one flow and carries its left context
between calls, but the op is correct now if one of them grows a lane
dimension.

* ggml: build the same conv_1d graph for every batch size

Address review from ggerganov: drop the N == 1 branch of ggml_conv_1d.
The GEMM result is always reshaped to [OC, N, OL] and permuted back,
as ggml_conv_2d does, so every batch size builds the same graph. For
N == 1 this adds a cont on an already ordered tensor.
* skill : add tools/ui review checklist to code-review skill

Adds a WebUI (tools/ui) section distilled from a year of review
feedback on tools/ui PRs: constants/enums placement, layering
(stores/services/utils/hooks), DRY and dead code, Svelte 5 idioms,
comment hygiene, streaming perf, frontend security, and PR hygiene
(static build, demos, scope discipline). Scoped to tools/ui only.

* skill : expand tools/ui constants/enums ruleset

Replaces the short constants bullet list with a decision ruleset
distilled from review outcomes: when a literal becomes a string
enum vs an enum-keyed map vs a declarative config vs a grouped
as-const object vs a scalar constant, naming and suffix
conventions (_REGEX, _MS, _PX, semantic separators), placement
and composition rules, and what legitimately stays inline.

* skill : drop stale static-build-commit requirement for tools/ui

Static build output is no longer stored in the repo - the UI is
built by CI and bundled at release time. Keep the requirement that
npm run build succeeds and the UI build job is green.

* skill : address copilot review of tools/ui checklist

- scope the video-demo requirement to user-facing interactive/visual
  changes instead of every tools/ui PR
- narrow the constants trigger to reused/domain-significant literals,
  keeping the inline boundary as the escape hatch
- carve out independent literals for persisted/wire-contract test
  assertions so they don't become tautological via shared constants
- allow simple presentation-local $derived in components; only shared
  business logic, orchestration and parsing leave the component
- match the existing barrel documentation style instead of requiring
  per-export JSDoc everywhere
- keep non-obvious why/rationale comments; move only examples and
  edge-case enumerations into tests
- point at the actual interpolate-size/grid-template-rows transition
  pattern in CollapsibleRegion.svelte instead of calc-size()

* skill : use spaces for nested list indentation

EditorConfig CI requires space indentation for all files; the
scalar-constants sub-bullets used tabs. Matches the 2-space nested
list convention used in docs/.
* cuda, hip: GDN chunked kernel

Ported-from: tetherto#257
Source-commit: 53f0027
Co-authored-by: Aman Gupta <aman.gupta@tether.io>

* fix older builds

* review fixes

* cuda: enable GDN MMA on tested Ampere and Ada GPUs

Enable SM86 and SM89 after RTX 3090 and RTX 4090 correctness and prefill benchmarks. Keep other untested architectures on the existing fallback.

Assisted-by: Codex

* cuda : use refactored swizzle API in GDN MMA

* ggml : GDN only guarantees the final state when n_tokens > K

* cuda : add short GDN MMA phase comments

---------

Co-authored-by: gianni-cor <gianfranco.cordella@tether.io>
Co-authored-by: Aman Gupta <aman.gupta@tether.io>
…30454)

* ggml-cpu : size set_rows conversion buffer for all threads

SET_ROWS is planned with n_tasks = 1, but every thread runs it and uses its own row of the F16 -> F32 conversion buffer, so threads > 0 wrote past the work buffer when the graph had another multi-threaded op.

* move set_rows to n_task = n_threads group
* docs: update zdnn lib install + add notes on running models

Signed-off-by: Aaron Teo <aaron.teo1@ibm.com>

* docs: change title

Signed-off-by: Aaron Teo <aaron.teo1@ibm.com>

* docs: add note about minimum version

Signed-off-by: Aaron Teo <aaron.teo1@ibm.com>

---------

Signed-off-by: Aaron Teo <aaron.teo1@ibm.com>
…g#30342) (ggml-org#30343)

* ggml-cpu : keep the FP16->FP32 lookup table on x86 with F16C (ggml-org#30342)

ggml-org#30270 routed both scalar conversions through F16C. For FP16->FP32, Clang 20.1.8
lowers the intrinsic to a vpinsrw merging into the live accumulator register of
the quantized dot products, which serialises the loop (19 vs 4 cycles/iteration
estimated, 45-65% slower Q8_0/Q4_0 MUL_MAT_ID kernels measured). Keep F16C for
FP32->FP16 as intended and the table for FP16->FP32.

* ggml-cpu : comment out the F16C FP16->FP32 define instead of removing it (review)
* sycl: persistent IQ3_S/IQ3_XXS weight reorder for SYCL decode and prefill

Add persistent reordered weight layouts for IQ3_S and IQ3_XXS. Weights
are reordered once at load time; the reordered MMVQ dot products then
walk dense super-blocks with dp4a and SWAR sign expansion instead of
gathering bits from the interleaved standard layout. Reorder-aware
dequantization feeds the batched prefill GEMMs so prompt processing
sees the same benefit.

Also harden the oneDNN build check: a missing DNNL package or a
CPU-only DNNL build now fails at configure time instead of silently
producing a degraded backend.

Measured on Intel Arc Pro B70 with Qwen3.8-27B-GSQ-RCO-IQ3_S (MTP),
-ngl 999 -b 4096 -ub 1024 -fa on:

tg256 @ 0 ctx      12.92 -> 23.54 tok/s (+82%)
tg256 @ 9,216      12.33 -> 21.69 tok/s (+76%)
tg256 @ 64,000      9.76 -> 14.91 tok/s (+53%)
pp8192             833.9  -> 833.6 tok/s (flat)

Qwen3.5-9B Q4_K_M / Q3_K_M are unchanged within noise (largest delta
-0.5% pp, tg flat), so standard quants are not affected.

The MMVQ GLU fusion widening and rms_norm+scale fusion are
intentionally not part of this change; master already carries them
via ggml-org#28931.

* removing wait as per review request

* sycl : fix fusion.cpp line ending
The clamp kernel indexed source and destination as one flat contiguous array, so
a strided view as input (the new CLAMP v=1 case) read the wrong elements. Add a
strided kernel_clamp_nc, as the other unary ops have, and take it whenever the
source is not contiguous.
Conflict resolution:
- mmq: adopt upstream prec_src1 template param; fork RDNA3.5/ROCMFP4
  kernels use GGML_PREC_Q8. Upstream moved J selection to host
  (mmq.cu), so the fork's RDNA3.5 J tuning moves to
  mmq_rdna35_select_J(). ggml_cuda_mmq_needs_fallback() takes cc
  (RDNA3.5 uses I == 64). Fork compacted-MoE grid kept.
- gated_delta_net: keep fork RDNA3.5 chunked kernel first, then
  upstream MMA GDN path.
- ggml-cuda supports_op: keep ROCMFP4 F16-activation accept, add
  upstream fwht and MUL_MAT_ID PREC_F32 checks.
- metal: nullable src[3] + fork SSM_CONV layout guard.
- test-backend-ops: take upstream tests.

Co-Authored-By: Claude <noreply@anthropic.com>
Upstream ggml-org#29184 fuses the MoE shared expert into MMVQ via
fusion->shared_up/shared_gate/shared_dst. mmvdq ignored those fields,
so on RDNA3.5 the fused op left shared_dst unwritten
(MUL_MAT_ID_SHARED n=1 failed). Fall back to mmvq when a shared
expert is fused.

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

Copy link
Copy Markdown

llama.cpp PR #151 versus gfx11: full regression catalog

PR #151 has reproducible performance regressions. The largest are prompt-dependent MTP throughput losses of about 3%, 5%, and 12%. A controlled one-line GDN diagnostic identifies the main cause. Smaller ordinary decode and prefill losses involve normalization overhead and unnecessary transfers for mixed-input graph branches. All original benchmark status and sanity checks passed.

Tested revisions and coverage

  • PR: gfx11: sync with master (2026-10-16), #151, 9c47b44518afbb9e956da5f2f8934162847246e4.
  • Baseline gfx11: 0e6a78abf37dc0dcc0eba80247cb0f55592cc56a. Both remote refs still matched at final verification.
  • rocm-scripts catalog and harness: b33825aaa457be4d182528aab4dde189fd24b722.
  • Full coverage: 111 paired tasks, 166 result rows per build: 50 ordinary LLM workloads, 50 VLM workloads, and 11 MTP configurations with six rows each. These are workload/configuration counts, not 166 distinct model weights.
  • Independent confirmation: 24 rows across 18 tasks, two fresh runs per build with reversed arm order. Each regular run uses 10 repetitions. MTP uses five repetitions per prompt, n_max=3, a 200-token budget, greedy generation, and thinking disabled. All original MTP configurations also passed the separate n_max=1 identity check; timing-only repeats explicitly mark that check NOT_RUN.
  • Strix Halo gfx1151, Radeon 8060S, 96 GiB GPU carveout, on xconucstrhalo05 and xconucstrhalo40. Every comparison pair used the same board. Same ROCm 7.15 / clang 23 toolchain and build flags, HIP graphs, full GPU offload, flash attention, and f16 KV cache.
  • Unsafe math OFF. Checkpoints ON: 32 checkpoints, minimum spacing 8192 tokens. MTP retains the catalog's GGML_CUDA_DQ_MMV=0 setting in both builds.
  • All actual input-token counts match between builds. Model/projector hashes match. Fixed datasets retain their catalog fingerprints; synthetic image cases use the same deterministic first solid image in both arms.

The first-pass median TTFT change is -0.40% for LLMs and -1.38% for VLMs. Median decode TPS changes are -0.58% and -0.42%, respectively. Decode is lower in 49/50 LLM rows and 44/50 VLM rows, so the common small loss should not be dismissed merely because many rows are below the 2% screening threshold.

Main repeated regressions

Values below come from the two independent repeat pairs, excluding the initial screening run. Negative TPS change means slower generation; positive TTFT change means slower first token.

Workload Metric gfx11 PR #151 Change Interpretation
Qwen3.6-27B Q4_0 MTP, prose Decode tok/s 28.40 25.06 -11.77% Changed continuation and fewer useful tokens per verification step; GDN reduction-order cause demonstrated
Qwen3.5-9B Q4_0 MTP, prose Decode tok/s 63.91 60.40 -5.50% Same mechanism; one-column diagnostic restores the old answer and most of the loss
Qwen3.5-9B Q4_0 MTP, code Decode tok/s 85.55 81.00 -5.32% One-column diagnostic restores the old answer and throughput
Qwen3.5-2B Q4_0 MTP, code Decode tok/s 177.00 171.78 -2.95% One-column diagnostic restores the old answer and throughput
Qwen2.5-0.5B Q4_K_M, 3968 tokens Decode tok/s 319.65 312.87 -2.12% Consistent ordinary decode loss; normalization and mixed-input transfers are implicated
Cosmos-Reason2-8B Q4_K_M VLM TTFT ms 1533.36 1566.63 +2.17% Same 1322 input tokens; modest increases across language normalization/matmul and vision attention
Gemma-4-E4B Q4_0 VLM, text-short-smoke Decode tok/s 49.61 47.71 -3.83% Only six generated tokens; pair deltas range from -6.64% to -1.01%, so the percentage is unstable

Smaller repeated effects remain: Qwen3-1.7B/4B pp128 TTFT is +1.67%/+1.74%; Cosmos Q8 VLM TTFT is +1.73%; Qwen2.5-0.5B pp128 decode is -1.88%; Gemma-4-E2B Q4_K_M/Q4_0 decode is -1.39%/-1.51%.

The original Gemma-3-4B pp128 TTFT candidate did not reproduce (-0.81% on repeats). The original Qwen3.6-27B MTP code prompt-time candidate also did not reproduce (-0.78%). The PR author's Q8_0 pp128 concern was checked with Cosmos Q8: repeated TTFT is +1.07%, rather than a confirmed 2.5% loss in this setup.

Cause 1: changed GDN reduction order changes MTP output and acceptance

Upstream commit 24e41838e (#30087) changes the recurrent-attention kernel from one to four state columns per warp. On gfx1151, a state size of 128 changes from 32 lanes summing four entries each to eight lanes summing 16 entries each. The mathematical result is the same, but floating-point summation order changes.

For the affected prompts, both ordinary generation and MTP produce different continuations. The MTP loop then produces fewer useful output tokens per verification cycle. Server timing decomposition shows:

Case Useful tokens per verification step Verification-cycle time Repeated TPS
Qwen3.5-2B code -5.42% About -2.4% -2.95%
Qwen3.5-9B code -6.07% About -0.8% -5.32%
Qwen3.5-9B prose -6.17% About -0.7% -5.50%
Qwen3.6-27B prose -12.51% About -0.84% -11.77%

The verification cycle is slightly faster. Lower output yield per cycle accounts for the throughput loss. Cycle time includes all server evaluation work and must not be interpreted as every individual kernel becoming faster. Acceptance percentage alone is also insufficient: some list prompts change the number of proposed tokens without changing useful tokens per verification step.

Controlled confirmation: an isolated PR library changes only gdn_cols_per_warp = 4 to 1. It restores the exact gfx11 answer text in all four affected cases, including ordinary generation. Diagnostic MTP TPS becomes 178.19 for 2B code, 86.07 for 9B code, 62.97 for 9B prose, and 28.55 for 27B prose. Three cases recover baseline throughput; 9B prose retains roughly a 1.5% residual. Its acceptance pattern is not fully restored, so this is evidence for the main cause, not proof that every MTP difference comes from this one change.

The separate normalization diagnostic leaves the PR answers unchanged. Exact /apply-template text and token-ID checks also match between the two stock builds for the 2B and 9B models. Both builds use unsafe math OFF. The new GDN MMA path is ineligible for these short prompts on HIP, where it requires at least 2048 tokens.

This is a real request-level throughput change, even though it comes from different continuations and draft acceptance rather than slower verification. It is not an n_max=1 identity failure or evidence by itself of lower model accuracy. For 2B code, gfx11 completes at 187 tokens; the PR's longer answer reaches the 200-token budget mid-code.

Evidence: probe analysis, GDN diagnostic diff, repeated verification-step analysis, input parity.

Cause 2: normalization's large-grid fix adds overhead to ordinary shapes

Upstream fda186661 (ggml-org#28175) adds sample/channel loops and a trailing block barrier so norm-family kernels support dimensions above CUDA's grid limits. Ordinary-sized tensors use the same loop structure. The compiled fused RMS kernels rise from about 10 VGPRs to 28-29, and from one to two barriers.

An isolated diagnostic removes only these loops and trailing barriers while retaining the rest of the PR. Two runs of 20 repetitions per variant, ordered gfx11 / PR / diagnostic / diagnostic / PR / gfx11, show:

Workload gfx11 PR PR with norm diagnostic Recovered time
Qwen2.5-0.5B pp128 decode, tok/s 357.74 351.66 353.91 18.1 microseconds/token, 37.5% of this gap
Gemma-4-E2B Q4_K_M pp128 decode, tok/s 109.33 107.84 108.40 47.5 microseconds/token, 37.6% of this gap
Qwen3-4B pp128 prefill, ms 54.16 54.93 54.64 0.290 ms, 37.8% of this gap

Thus normalization is a demonstrated contributor, but it does not explain the whole ordinary-model regression. Stock Qwen3 traces also show normalization as the largest growing kernel family with unchanged normalization counts. The diagnostic is not a production patch: a proper fix should keep the large-grid path and provide an efficient ordinary-size path.

Evidence: ablation timings and samples, compiled-kernel comparison, diagnostic diff.

Cause 3: mixed-input graph support adds transfers during token-only decode

Commit 0bb496dbd (ggml-org#29622), supporting raw embeddings and token IDs in the same batch, adds graph branches for mixed input. Tensor-name instrumentation proves that their inputs are still transferred during token-only llama-bench decoding:

  • Qwen2.5-0.5B: runtime copy kernels increase 6 to 9 per token. The three new transfers are inp_mixed_embd, the mixed token-embedding lookup (node_1), and inp_mixed_slots.
  • Gemma-4-E2B: copy kernels increase 10 to 14 per token. It also transfers inp_scale_rows; the graph adds embedding selection and scaling operations. Total non-attention/non-matmul/non-normalization kernels increase by eight per token.

These transfers introduce host API overhead as well as small GPU copy launches. The copy-instrumented CPU language-call scope increases by about 36 microseconds for Qwen and 32 microseconds for Gemma. Those are diagnostic scope differences, not isolated causal savings or end-to-end token latency: the calls are asynchronous, and tracing affects timing.

The tensor names and source branch establish where the extra work comes from. A production optimization should avoid preparing inactive branch inputs while preserving later mixed-input requests and graph reuse. Globally disabling mixed-input support would discard the capability added by the upstream change. No production fix was made in this investigation.

Evidence: Qwen gfx11 copy attribution, Qwen PR copy attribution, Gemma PR copy attribution, source change.

Smaller VLM effects and limits of attribution

Cosmos Q4 and Q8 VLM process the same 1322 tokens in every selected profiled request. Kernel counts and language/vision work sizes match. The loss is distributed, rather than one attention explosion. Median request kernel totals show language normalization growing by about 6.6/6.3 ms and vision normalization by 1.8/1.6 ms. Vision attention grows by about 7.5/3.7 ms, while vision conversion improves by about 7.7/6.5 ms. Language matmul grows modestly, about 10.7/5.0 ms. These profiled deltas do not fully account for the unprofiled +33.3/+24.7 ms TTFT changes; host work and tracing variability limit exact additive attribution. The remaining matmul/attention differences have not been isolated to individual commits.

Gemma-4-E4B text-short-smoke has 21 input and six output tokens. Its repeat medians give 178.43 to 182.51 ms total response time, about 4.1 ms more, but the two PR runs differ considerably. Reversed profile collection confirms an approximately 0.6 ms increase in normalization GPU work across the six-token decode, plus additional copy work. The remaining client/server overhead is not fully isolated. Treat -3.83% as a variable short-response measurement, not a general E4B generation-rate regression of that size.

Some VLM traces contain isolated 100-400 ms stalls. They appear in both builds and in different kernel families on reversed runs. All events are retained. The VLM discussion uses per-request medians, and the unprofiled repeats remain the primary performance evidence; trace averages containing these stalls must not replace them.

Longer generated answers are separately recorded. For example, Qwen3.6-35B large-context VLM has the same 16262 input tokens: first-pass TTFT improves 10331.28 to 10262.36 ms and TPS improves 55.95 to 56.10, but output grows from 206 to 294 tokens, making total response time 14.07 to 15.56 seconds. That extra response time is explained by generating more text.

Assessment

The full catalog passes its existing sanity checks, but the PR should not be described as performance-neutral. The largest MTP losses have a demonstrated numerical-order cause. The common smaller decode loss has both a demonstrated normalization contributor and traced unnecessary mixed-input transfers. Small residual VLM and host costs remain only partially attributed. These measurements do not justify discarding all lower results as noise or as changed input length.

The most concrete follow-ups are an ordinary-size normalization fast path, avoiding inactive mixed-input transfers, and evaluating the GDN schedule with MTP acceptance and output behavior as well as kernel speed. The isolated diagnostics are evidence for those directions, not validated production changes.

The full first pass and every independent repeat are included below. CSV contains primary metrics, repeat medians, and findings; repeat JSON retains individual run values; final audit records status, input parity, checkpoints, and unchanged source/binary hashes. Original raw logs, commands, configs, and traces remain in this directory.

Independent repeats

Two fresh runs per build, with reversed arm order. Each regular run retains 10 catalog repetitions; MTP repeats retain five repetitions per prompt. These estimates exclude the first pass. Positive TTFT change means slower; negative TPS change means slower.

Task Workload gfx11 TTFT ms PR TTFT ms TTFT change gfx11 TPS PR TPS TPS change
000 Qwen2.5-0.5B-Instruct_Q4_K_M_GGUF_128 12.19 11.97 -1.82% 358.49 351.74 -1.88%
001 Qwen2.5-0.5B-Instruct_Q4_K_M_GGUF_3968 281.45 278.88 -0.91% 319.65 312.87 -2.12%
006 Qwen3-1.7B_Q4_K_M_GGUF_128 24.65 25.06 +1.67% 163.25 161.47 -1.09%
008 Qwen3-4B_Q4_K_M_GGUF_128 56.18 57.16 +1.74% 78.60 77.97 -0.80%
013 Qwen3.5-2B_Q4_K_M_GGUF_128 27.70 27.40 -1.09% 129.99 130.03 +0.04%
016 Llama-2-7B_Q4_K_M_GGUF_128 86.35 86.61 +0.30% 50.38 50.21 -0.32%
020 SmolLM2-1.7B-Instruct_Q4_K_M_GGUF_128 28.19 28.22 +0.11% 167.31 166.22 -0.65%
022 SmolLM2-1.7B-Instruct_F16_GGUF_128 31.11 29.94 -3.76% 53.12 52.90 -0.42%
026 Gemma-4-E2B-IT_Q4_K_M_GGUF_128 37.55 37.37 -0.48% 109.39 107.87 -1.39%
042 Cosmos-Reason2-8B_Q4_K_M_GGUF_VLM_apolo13x 1533.36 1566.63 +2.17% 41.67 41.66 -0.01%
043 Cosmos-Reason2-8B_Q8_0_GGUF_VLM_prithivMLmods 1428.01 1452.76 +1.73% 26.10 26.06 -0.13%
063 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_text-short-smoke 60.32 60.02 -0.49% 49.61 47.71 -3.83%
088 Cosmos-Reason2-8B_Q8_0_GGUF_128 86.82 87.75 +1.07% 26.92 26.85 -0.25%
089 Gemma-3-4B-IT-ggmlorg_Q4_K_M_GGUF_128 50.90 50.48 -0.81% 76.50 75.99 -0.67%
091 Gemma-4-E2B-IT-ggmlorg_Q4_0_GGUF_128 36.38 36.11 -0.74% 105.20 103.61 -1.51%
100 Qwen3.5-2B_Q4_0_GGUF_mtp_code 29.86 29.24 -2.07% 177.00 171.78 -2.95%
100 Qwen3.5-2B_Q4_0_GGUF_mtp_list 29.13 29.05 -0.26% 211.71 216.03 +2.04%
100 Qwen3.5-2B_Q4_0_GGUF_mtp_prose 29.56 28.80 -2.58% 123.44 130.01 +5.32%
104 Qwen3.5-9B_Q4_0_GGUF_mtp_code 111.02 109.05 -1.77% 85.55 81.00 -5.32%
104 Qwen3.5-9B_Q4_0_GGUF_mtp_list 109.69 107.94 -1.59% 85.65 86.43 +0.91%
104 Qwen3.5-9B_Q4_0_GGUF_mtp_prose 109.07 107.64 -1.31% 63.91 60.40 -5.50%
106 Qwen3.6-27B_Q4_0_GGUF_mtp_code 325.60 323.06 -0.78% 36.07 36.26 +0.51%
106 Qwen3.6-27B_Q4_0_GGUF_mtp_list 321.87 322.36 +0.15% 35.66 35.98 +0.89%
106 Qwen3.6-27B_Q4_0_GGUF_mtp_prose 320.64 319.71 -0.29% 28.40 25.06 -11.77%

Full regression catalog: first pass

All 166 rows below passed the original catalog sanity checks. 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.22 11.98 -2.00% 358.66 352.54 -1.71% Repeated decode loss; normalization contribution demonstrated, plus three mixed-input copies/token.
001 Qwen2.5-0.5B-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 277.74 275.57 -0.78% 319.45 312.93 -2.04% Repeated decode -2.12%; same input/output lengths. Related pp128 normalization/copy diagnostics.
002 Qwen2.5-3B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 41.80 41.73 -0.19% 99.09 98.86 -0.23% No >2% candidate in first pass; see the common decode trend.
003 Qwen2.5-3B-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1198.64 1189.74 -0.74% 92.58 91.96 -0.67% No >2% candidate in first pass; see the common decode trend.
004 Qwen2.5-7B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 78.96 78.95 -0.01% 48.25 48.10 -0.32% No >2% candidate in first pass; see the common decode trend.
005 Qwen2.5-7B-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 2441.29 2423.32 -0.74% 45.10 44.88 -0.49% No >2% candidate in first pass; see the common decode trend.
006 Qwen3-1.7B_Q4_K_M_GGUF_128 LLM 128 128 / 128 24.93 25.26 +1.33% 163.27 161.58 -1.04% Repeated pp128 TTFT +1.67%; normalization is the largest growing kernel family in the trace.
007 Qwen3-1.7B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 706.61 718.91 +1.74% 119.78 118.94 -0.70% No >2% candidate in first pass; see the common decode trend.
008 Qwen3-4B_Q4_K_M_GGUF_128 LLM 128 128 / 128 55.35 57.83 +4.47% 78.59 77.98 -0.78% Repeated pp128 TTFT +1.74%; norm diagnostic recovers 0.290 ms in a separate controlled series.
009 Qwen3-4B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1532.29 1551.43 +1.25% 64.89 64.50 -0.61% No >2% candidate in first pass; see the common decode trend.
010 Qwen3-4B_UD-Q4_K_XL_GGUF_128 LLM 128 128 / 128 56.89 57.36 +0.82% 76.99 76.32 -0.87% No >2% candidate in first pass; see the common decode trend.
011 Qwen3-8B_Q4_K_M_GGUF_128 LLM 128 128 / 128 90.08 90.83 +0.83% 44.42 44.26 -0.35% No >2% candidate in first pass; see the common decode trend.
012 Qwen3-8B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 2700.12 2748.35 +1.79% 39.18 39.06 -0.30% No >2% candidate in first pass; see the common decode trend.
013 Qwen3.5-2B_Q4_K_M_GGUF_128 LLM 128 128 / 128 27.64 27.52 -0.43% 129.88 129.83 -0.04% Repeat decode essentially unchanged; repeated prefill improves.
014 Qwen3.5-4B_Q4_K_M_GGUF_128 LLM 128 128 / 128 56.80 56.32 -0.86% 64.30 64.24 -0.10% No >2% candidate in first pass; see the common decode trend.
015 Qwen3.5-9B_Q4_K_M_GGUF_128 LLM 128 128 / 128 104.28 100.05 -4.06% 37.88 37.88 -0.02% No >2% candidate in first pass; see the common decode trend.
016 Llama-2-7B_Q4_K_M_GGUF_128 LLM 128 128 / 128 86.25 86.40 +0.18% 50.36 50.19 -0.34% Small repeat decode loss (-0.32%); prefill within 0.30%.
017 Llama-2-7B_Q4_K_M_GGUF_1920 LLM 1920 128 / 128 1231.76 1230.97 -0.06% 36.01 35.89 -0.33% No >2% candidate in first pass; see the common decode trend.
018 Gemma-2B_Q4_K_M_GGUF_128 LLM 128 128 / 128 31.45 30.03 -4.53% 121.29 120.76 -0.44% No >2% candidate in first pass; see the common decode trend.
019 Gemma-2B_Q4_K_M_GGUF_8000 LLM 8000 128 / 128 1979.58 1965.17 -0.73% 111.57 110.94 -0.56% No >2% candidate in first pass; see the common decode trend.
020 SmolLM2-1.7B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 28.20 28.07 -0.46% 167.62 165.81 -1.08% Small repeated decode loss (-0.65%).
021 SmolLM2-1.7B-Instruct_Q4_K_M_GGUF_8000 LLM 8000 128 / 128 3185.00 3181.60 -0.11% 37.47 37.41 -0.16% No >2% candidate in first pass; see the common decode trend.
022 SmolLM2-1.7B-Instruct_F16_GGUF_128 LLM 128 128 / 128 31.12 29.98 -3.69% 53.07 52.89 -0.34% Prefill improves; small repeated decode loss (-0.42%).
023 SmolLM2-1.7B-Instruct_F16_GGUF_8000 LLM 8000 128 / 128 2901.62 2842.41 -2.04% 25.39 25.35 -0.15% No >2% candidate in first pass; see the common decode trend.
024 Llama-3.1-8B-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 95.85 97.14 +1.35% 44.88 44.80 -0.18% No >2% candidate in first pass; see the common decode trend.
025 Qwen3-30B-A3B-Instruct-2507_Q4_K_M_GGUF_128 LLM 128 128 / 128 104.65 102.55 -2.01% 88.48 87.86 -0.70% No >2% candidate in first pass; see the common decode trend.
026 Gemma-4-E2B-IT_Q4_K_M_GGUF_128 LLM 128 128 / 128 37.56 37.25 -0.82% 109.34 107.80 -1.40% Repeated decode -1.39%; norm diagnostic recovers part; mixed-input copies increase 10 to 14/token.
027 Gemma-4-E2B-IT_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1072.49 1063.19 -0.87% 102.81 101.51 -1.27% No >2% candidate in first pass; see the common decode trend.
028 Gemma-4-E2B-IT_BF16_GGUF_128 LLM 128 128 / 128 40.25 38.69 -3.88% 43.29 42.98 -0.72% No >2% candidate in first pass; see the common decode trend.
029 Gemma-4-E2B-IT_UD-Q4_K_XL_GGUF_128 LLM 128 128 / 128 39.97 38.88 -2.72% 105.65 104.20 -1.37% No >2% candidate in first pass; see the common decode trend.
030 Qwen3.5-35B-A3B_Q4_K_M_GGUF_128 LLM 128 128 / 128 98.70 98.44 -0.26% 62.69 62.54 -0.24% No >2% candidate in first pass; see the common decode trend.
031 Qwen3.5-35B-A3B_VLM VLM 414 128 / 128 438.99 433.13 -1.33% 61.13 61.45 +0.52% No >2% candidate in first pass; see the common decode trend.
032 Qwen3.6-35B-A3B_Q4_K_M_GGUF_128 LLM 128 128 / 128 100.23 99.09 -1.13% 62.50 62.45 -0.07% No >2% candidate in first pass; see the common decode trend.
033 Qwen3.6-35B-A3B_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 2194.52 2221.41 +1.23% 59.68 60.98 +2.18% No >2% candidate in first pass; see the common decode trend.
034 Qwen3.6-35B-A3B_VLM_large-context VLM 16262 206 / 294 10331.28 10262.36 -0.67% 55.95 56.10 +0.27% Same 16262-token input; rates improve; longer answer increases total response time.
035 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM VLM 1322 128 / 128 729.24 743.79 +2.00% 137.26 136.71 -0.41% No >2% candidate in first pass; see the common decode trend.
036 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_text-short-smoke VLM 20 2 / 2 15.90 13.12 -17.53% 139.73 138.09 -1.17% No >2% candidate in first pass; see the common decode trend.
037 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_image-caption-224 VLM 84 49 / 49 61.17 58.40 -4.53% 151.12 150.51 -0.40% No >2% candidate in first pass; see the common decode trend.
038 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_vqa-448 VLM 228 30 / 30 139.88 135.72 -2.97% 149.55 149.11 -0.29% No >2% candidate in first pass; see the common decode trend.
039 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_ocr-1024 VLM 1062 44 / 44 878.87 869.83 -1.03% 137.74 137.04 -0.50% No >2% candidate in first pass; see the common decode trend.
040 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_multi-image-reasoning VLM 436 78 / 78 258.19 253.46 -1.83% 147.74 147.28 -0.31% No >2% candidate in first pass; see the common decode trend.
041 Cosmos-Reason2-2B_Q4_K_M_GGUF_VLM_document-qa-long-context VLM 434 104 / 104 87.53 86.56 -1.11% 147.03 146.44 -0.40% No >2% candidate in first pass; see the common decode trend.
042 Cosmos-Reason2-8B_Q4_K_M_GGUF_VLM_apolo13x VLM 1322 105 / 105 1540.05 1577.20 +2.41% 41.69 41.78 +0.21% Repeated TTFT +2.17%; unchanged input work, distributed norm/matmul/vision costs; partial attribution.
043 Cosmos-Reason2-8B_Q8_0_GGUF_VLM_prithivMLmods VLM 1322 115 / 115 1427.05 1455.90 +2.02% 26.08 26.06 -0.07% Repeated TTFT +1.73%; unchanged input work; partial attribution from language/vision profiling.
044 Gemma-3-4B-IT_VLM VLM 779 128 / 128 1154.60 1131.94 -1.96% 71.06 70.49 -0.80% No >2% candidate in first pass; see the common decode trend.
045 Gemma-4-E2B-IT_Q4_0_GGUF_VLM VLM 880 128 / 128 494.24 494.70 +0.09% 100.17 99.20 -0.97% No >2% candidate in first pass; see the common decode trend.
046 Gemma-4-E4B-IT_Q4_0_GGUF_VLM VLM 880 77 / 77 692.19 691.27 -0.13% 56.27 55.76 -0.90% No >2% candidate in first pass; see the common decode trend.
047 Gemma-4-E2B-IT_BF16_GGUF_VLM VLM 880 128 / 128 535.48 524.52 -2.05% 42.40 42.22 -0.44% No >2% candidate in first pass; see the common decode trend.
048 Gemma-4-E2B-IT_UD-Q4_K_XL_GGUF_VLM VLM 880 128 / 128 526.97 528.53 +0.30% 100.13 99.62 -0.51% No >2% candidate in first pass; see the common decode trend.
049 Gemma-4-E4B-IT_BF16_GGUF_VLM VLM 880 120 / 120 758.13 735.40 -3.00% 22.00 21.95 -0.21% No >2% candidate in first pass; see the common decode trend.
050 Gemma-4-E4B-IT_UD-Q4_K_XL_GGUF_VLM VLM 880 106 / 109 734.86 733.05 -0.25% 55.72 55.31 -0.74% No >2% candidate in first pass; see the common decode trend.
051 Gemma-3-4B-IT_VLM_text-short-smoke VLM 21 6 / 6 51.72 51.17 -1.08% 71.70 70.88 -1.15% No >2% candidate in first pass; see the common decode trend.
052 Gemma-3-4B-IT_VLM_image-caption-224 VLM 292 34 / 34 910.51 892.48 -1.98% 72.07 72.07 +0.00% No >2% candidate in first pass; see the common decode trend.
053 Gemma-3-4B-IT_VLM_vqa-448 VLM 291 17 / 17 925.43 903.79 -2.34% 70.35 71.08 +1.04% No >2% candidate in first pass; see the common decode trend.
054 Gemma-3-4B-IT_VLM_ocr-1024 VLM 296 241 / 241 982.91 962.86 -2.04% 72.78 72.24 -0.73% No >2% candidate in first pass; see the common decode trend.
055 Gemma-3-4B-IT_VLM_multi-image-reasoning VLM 557 118 / 118 1797.84 1761.42 -2.03% 71.93 71.51 -0.59% No >2% candidate in first pass; see the common decode trend.
056 Gemma-3-4B-IT_VLM_document-qa-long-context VLM 465 50 / 50 209.57 209.12 -0.22% 72.29 72.05 -0.33% No >2% candidate in first pass; see the common decode trend.
057 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_text-short-smoke VLM 21 6 / 6 38.19 37.08 -2.91% 82.24 81.25 -1.20% No >2% candidate in first pass; see the common decode trend.
058 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_image-caption-224 VLM 117 24 / 24 112.92 110.51 -2.13% 94.00 93.13 -0.93% No >2% candidate in first pass; see the common decode trend.
059 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_vqa-448 VLM 116 16 / 16 129.42 127.47 -1.50% 90.79 89.81 -1.08% No >2% candidate in first pass; see the common decode trend.
060 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_ocr-1024 VLM 481 243 / 232 497.41 499.72 +0.47% 99.14 98.11 -1.04% No >2% candidate in first pass; see the common decode trend.
061 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_multi-image-reasoning VLM 207 110 / 113 218.04 196.98 -9.66% 97.85 96.80 -1.07% No >2% candidate in first pass; see the common decode trend.
062 Gemma-4-E2B-IT_Q4_0_GGUF_VLM_document-qa-long-context VLM 465 48 / 32 140.21 137.49 -1.94% 93.61 94.47 +0.92% No >2% candidate in first pass; see the common decode trend.
063 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_text-short-smoke VLM 21 6 / 6 60.82 59.95 -1.43% 49.34 47.76 -3.19% Six-token reply; repeat decode -3.83% aggregate, pair range -6.64% to -1.01%; variable short-response overhead.
064 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_image-caption-224 VLM 117 34 / 34 166.88 164.73 -1.29% 55.52 55.09 -0.78% No >2% candidate in first pass; see the common decode trend.
065 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_vqa-448 VLM 116 13 / 13 184.88 183.03 -1.00% 52.20 51.79 -0.80% No >2% candidate in first pass; see the common decode trend.
066 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_ocr-1024 VLM 481 193 / 199 618.79 620.27 +0.24% 56.22 55.76 -0.81% No >2% candidate in first pass; see the common decode trend.
067 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_multi-image-reasoning VLM 207 145 / 153 297.20 268.61 -9.62% 56.42 56.04 -0.67% No >2% candidate in first pass; see the common decode trend.
068 Gemma-4-E4B-IT_Q4_0_GGUF_VLM_document-qa-long-context VLM 465 72 / 71 244.39 239.80 -1.88% 55.23 54.76 -0.84% No >2% candidate in first pass; see the common decode trend.
069 Qwen2.5-VL-3B-Instruct_VLM VLM 1606 36 / 36 2233.34 2256.45 +1.03% 93.94 93.62 -0.34% No >2% candidate in first pass; see the common decode trend.
070 Qwen2.5-VL-7B-Instruct_VLM VLM 1606 53 / 53 2764.00 2795.90 +1.15% 46.05 46.04 -0.04% No >2% candidate in first pass; see the common decode trend.
071 Qwen3-VL-4B-Instruct_VLM VLM 1322 128 / 128 1030.67 1040.80 +0.98% 71.30 71.16 -0.21% No >2% candidate in first pass; see the common decode trend.
072 Gemma-4-26B-A4B-IT_VLM VLM 884 55 / 55 1276.67 1263.47 -1.03% 47.19 46.99 -0.42% No >2% candidate in first pass; see the common decode trend.
073 Gemma-4-31B-IT_VLM VLM 884 50 / 50 3563.53 3528.23 -0.99% 10.64 10.62 -0.16% No >2% candidate in first pass; see the common decode trend.
074 Gemma-4-31B-IT_VLM_OpenNav VLM 473 256 / 256 2017.98 1977.79 -1.99% 10.75 10.73 -0.18% No >2% candidate in first pass; see the common decode trend.
075 Qwen3-Omni-30B-A3B-Instruct_VLM VLM 1322 121 / 116 1283.04 1272.60 -0.81% 80.13 79.78 -0.43% No >2% candidate in first pass; see the common decode trend.
076 MiniCPM-V-2_6_VLM VLM 994 48 / 48 1467.41 1428.75 -2.63% 46.91 46.87 -0.08% No >2% candidate in first pass; see the common decode trend.
077 MiniCPM-o-2_6_VLM VLM 1004 89 / 89 1475.46 1434.02 -2.81% 46.82 46.78 -0.07% No >2% candidate in first pass; see the common decode trend.
078 Janus-Pro-1B_VLM VLM 1095 51 / 51 240.36 238.63 -0.72% 154.86 154.30 -0.36% No >2% candidate in first pass; see the common decode trend.
079 Janus-Pro-7B_VLM VLM 1095 23 / 23 739.84 736.17 -0.50% 41.40 41.33 -0.17% No >2% candidate in first pass; see the common decode trend.
080 Qwen3.6-27B_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 9612.87 9630.29 +0.18% 12.32 12.31 -0.06% No >2% candidate in first pass; see the common decode trend.
081 Qwen3.8-27B_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 9061.42 8868.70 -2.13% 12.83 12.82 -0.05% No >2% candidate in first pass; see the common decode trend.
082 GLM-4.7-Flash_Q4_K_M_GGUF_128 LLM 128 128 / 128 123.77 123.31 -0.37% 65.20 64.80 -0.62% No >2% candidate in first pass; see the common decode trend.
083 Gemma-4-12B-it_Q4_K_M_GGUF_128 LLM 128 128 / 128 134.55 133.79 -0.56% 28.61 28.53 -0.31% No >2% candidate in first pass; see the common decode trend.
084 Gemma-3-12B-IT_Q4_K_M_GGUF_VLM VLM 367 94 / 94 1253.68 1227.42 -2.09% 27.37 27.24 -0.46% No >2% candidate in first pass; see the common decode trend.
085 Gemma-3-12B-IT_Q4_K_M_GGUF_4096 LLM 4096 128 / 128 4278.08 4257.08 -0.49% 24.94 24.76 -0.72% No >2% candidate in first pass; see the common decode trend.
086 Cosmos-Reason2-2B_Q4_K_M_GGUF_128 LLM 128 128 / 128 25.87 26.02 +0.59% 159.61 158.14 -0.92% No >2% candidate in first pass; see the common decode trend.
087 Cosmos-Reason2-2B_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 743.70 753.19 +1.28% 117.91 116.84 -0.91% No >2% candidate in first pass; see the common decode trend.
088 Cosmos-Reason2-8B_Q8_0_GGUF_128 LLM 128 128 / 128 86.30 87.15 +0.99% 26.93 26.86 -0.25% Explicit Q8 pp128 control: repeat TTFT +1.07%, decode -0.25%.
089 Gemma-3-4B-IT-ggmlorg_Q4_K_M_GGUF_128 LLM 128 128 / 128 50.76 51.91 +2.27% 76.32 75.72 -0.79% Initial TTFT candidate did not reproduce; repeat TTFT -0.81%. Small decode loss remains.
090 Gemma-3-4B-IT-ggmlorg_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1373.86 1378.17 +0.31% 69.65 69.18 -0.67% No >2% candidate in first pass; see the common decode trend.
091 Gemma-4-E2B-IT-ggmlorg_Q4_0_GGUF_128 LLM 128 128 / 128 36.13 36.08 -0.14% 102.88 100.79 -2.03% Repeated decode -1.51%; same architecture as the Q4_K_M norm/copy control.
092 Gemma-4-E4B-IT_Q4_0_GGUF_128 LLM 128 128 / 128 64.64 64.27 -0.58% 58.96 58.38 -0.99% No >2% candidate in first pass; see the common decode trend.
093 Gemma-4-E4B-IT_Q4_0_GGUF_3968 LLM 3968 128 / 128 1684.22 1673.64 -0.63% 55.65 55.16 -0.88% No >2% candidate in first pass; see the common decode trend.
094 Gemma-4-E4B-IT_BF16_GGUF_128 LLM 128 128 / 128 76.07 73.83 -2.94% 22.39 22.31 -0.38% No >2% candidate in first pass; see the common decode trend.
095 Gemma-4-E4B-IT_UD-Q4_K_XL_GGUF_128 LLM 128 128 / 128 62.68 62.51 -0.27% 58.46 57.95 -0.89% No >2% candidate in first pass; see the common decode trend.
096 Phi-4-Mini-Instruct_Q4_K_M_GGUF_128 LLM 128 128 / 128 44.86 44.57 -0.66% 78.12 77.77 -0.45% No >2% candidate in first pass; see the common decode trend.
097 Phi-4-Mini-Instruct_Q4_K_M_GGUF_3968 LLM 3968 128 / 128 1387.24 1386.15 -0.08% 57.78 57.41 -0.63% No >2% candidate in first pass; see the common decode trend.
098 SmolVLM-500M-Instruct_VLM VLM 853 59 / 59 219.45 210.52 -4.07% 311.49 310.05 -0.46% No >2% candidate in first pass; see the common decode trend.
099 SmolVLM2-2.2B-Instruct_VLM VLM 1104 81 / 81 797.20 770.66 -3.33% 118.12 118.11 -0.00% No >2% candidate in first pass; see the common decode trend.
100 Qwen3.5-2B_Q4_0_GGUF_baseline_code MTP/control 32 187 / 200 27.60 27.37 -0.86% 125.64 126.09 +0.35% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
100 Qwen3.5-2B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 27.19 26.43 -2.80% 123.96 124.65 +0.55% No >2% candidate in first pass; see the common decode trend.
100 Qwen3.5-2B_Q4_0_GGUF_baseline_prose MTP/control 22 144 / 116 27.33 26.55 -2.85% 125.48 125.69 +0.17% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
100 Qwen3.5-2B_Q4_0_GGUF_mtp_code MTP/control 32 187 / 200 30.02 29.66 -1.20% 176.86 171.70 -2.92% Repeated MTP TPS loss; fewer useful tokens per verification cycle. GDN one-column diagnostic restores baseline answer.
100 Qwen3.5-2B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 29.09 28.89 -0.69% 211.70 215.66 +1.87% No >2% candidate in first pass; see the common decode trend.
100 Qwen3.5-2B_Q4_0_GGUF_mtp_prose MTP/control 22 144 / 116 29.35 28.93 -1.43% 123.61 130.14 +5.28% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
101 Qwen3.5-2B_Q4_K_M_GGUF_baseline_code MTP/control 32 200 / 200 26.04 25.28 -2.91% 117.30 117.38 +0.07% No >2% candidate in first pass; see the common decode trend.
101 Qwen3.5-2B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 25.33 24.20 -4.48% 116.24 116.45 +0.17% No >2% candidate in first pass; see the common decode trend.
101 Qwen3.5-2B_Q4_K_M_GGUF_baseline_prose MTP/control 22 120 / 124 25.31 24.78 -2.08% 116.99 117.13 +0.12% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
101 Qwen3.5-2B_Q4_K_M_GGUF_mtp_code MTP/control 32 200 / 200 27.52 27.00 -1.87% 168.41 171.64 +1.92% No >2% candidate in first pass; see the common decode trend.
101 Qwen3.5-2B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 27.34 27.06 -1.02% 193.70 197.70 +2.07% No >2% candidate in first pass; see the common decode trend.
101 Qwen3.5-2B_Q4_K_M_GGUF_mtp_prose MTP/control 22 120 / 124 27.57 26.63 -3.38% 112.10 124.31 +10.90% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
102 Qwen3.5-4B_Q4_0_GGUF_baseline_code MTP/control 32 200 / 200 65.86 65.02 -1.27% 65.10 65.01 -0.14% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
102 Qwen3.5-4B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 65.81 63.88 -2.93% 64.57 64.50 -0.10% No >2% candidate in first pass; see the common decode trend.
102 Qwen3.5-4B_Q4_0_GGUF_baseline_prose MTP/control 22 142 / 110 65.06 64.18 -1.34% 64.99 64.83 -0.25% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
102 Qwen3.5-4B_Q4_0_GGUF_mtp_code MTP/control 32 200 / 200 81.34 80.34 -1.23% 123.61 122.93 -0.54% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
102 Qwen3.5-4B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 77.49 77.09 -0.51% 130.85 132.74 +1.45% No >2% candidate in first pass; see the common decode trend.
102 Qwen3.5-4B_Q4_0_GGUF_mtp_prose MTP/control 22 142 / 110 80.29 77.25 -3.79% 82.26 81.11 -1.40% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
103 Qwen3.5-4B_Q4_K_M_GGUF_baseline_code MTP/control 32 200 / 200 59.58 57.88 -2.85% 59.71 59.61 -0.17% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
103 Qwen3.5-4B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 57.52 57.09 -0.75% 59.32 59.23 -0.17% No >2% candidate in first pass; see the common decode trend.
103 Qwen3.5-4B_Q4_K_M_GGUF_baseline_prose MTP/control 22 144 / 150 57.31 55.28 -3.56% 59.64 59.56 -0.14% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
103 Qwen3.5-4B_Q4_K_M_GGUF_mtp_code MTP/control 32 200 / 200 71.47 71.55 +0.11% 104.66 108.51 +3.68% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
103 Qwen3.5-4B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 71.83 69.94 -2.62% 112.31 114.05 +1.55% No >2% candidate in first pass; see the common decode trend.
103 Qwen3.5-4B_Q4_K_M_GGUF_mtp_prose MTP/control 22 144 / 150 69.80 70.05 +0.36% 70.87 72.41 +2.17% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
104 Qwen3.5-9B_Q4_0_GGUF_baseline_code MTP/control 32 198 / 200 96.74 94.44 -2.38% 39.50 39.52 +0.04% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
104 Qwen3.5-9B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 96.12 93.31 -2.92% 39.31 39.34 +0.06% No >2% candidate in first pass; see the common decode trend.
104 Qwen3.5-9B_Q4_0_GGUF_baseline_prose MTP/control 22 134 / 131 93.92 93.61 -0.33% 39.49 39.47 -0.04% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
104 Qwen3.5-9B_Q4_0_GGUF_mtp_code MTP/control 32 198 / 200 110.92 107.96 -2.67% 85.49 80.93 -5.34% Repeated MTP TPS loss; fewer useful tokens per verification cycle. GDN one-column diagnostic restores baseline answer.
104 Qwen3.5-9B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 110.65 108.00 -2.39% 85.61 86.54 +1.09% No >2% candidate in first pass; see the common decode trend.
104 Qwen3.5-9B_Q4_0_GGUF_mtp_prose MTP/control 22 134 / 131 110.56 106.79 -3.40% 63.90 60.46 -5.40% Repeated MTP TPS loss; fewer useful tokens per verification cycle. GDN one-column diagnostic restores baseline answer.
105 Qwen3.5-9B_Q4_K_M_GGUF_baseline_code MTP/control 32 200 / 200 83.41 80.52 -3.47% 37.10 37.08 -0.06% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
105 Qwen3.5-9B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 82.92 79.92 -3.63% 36.95 36.93 -0.05% No >2% candidate in first pass; see the common decode trend.
105 Qwen3.5-9B_Q4_K_M_GGUF_baseline_prose MTP/control 22 116 / 113 81.14 79.59 -1.92% 37.04 37.04 -0.01% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
105 Qwen3.5-9B_Q4_K_M_GGUF_mtp_code MTP/control 32 200 / 200 97.19 94.60 -2.66% 70.80 71.26 +0.65% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
105 Qwen3.5-9B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 95.52 94.83 -0.73% 75.34 75.88 +0.71% No >2% candidate in first pass; see the common decode trend.
105 Qwen3.5-9B_Q4_K_M_GGUF_mtp_prose MTP/control 22 116 / 113 95.44 92.41 -3.17% 52.48 52.66 +0.36% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
106 Qwen3.6-27B_Q4_0_GGUF_baseline_code MTP/control 32 99 / 99 281.83 281.76 -0.03% 13.31 13.31 -0.02% No >2% candidate in first pass; see the common decode trend.
106 Qwen3.6-27B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 277.40 278.51 +0.40% 13.28 13.27 -0.06% No >2% candidate in first pass; see the common decode trend.
106 Qwen3.6-27B_Q4_0_GGUF_baseline_prose MTP/control 22 127 / 142 276.33 280.96 +1.67% 13.32 13.31 -0.08% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
106 Qwen3.6-27B_Q4_0_GGUF_mtp_code MTP/control 32 99 / 99 315.41 323.01 +2.41% 36.11 36.25 +0.40% Initial prompt-time candidate did not reproduce; repeated TTFT -0.78%, TPS +0.51%.
106 Qwen3.6-27B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 315.55 318.81 +1.03% 35.75 35.95 +0.58% No >2% candidate in first pass; see the common decode trend.
106 Qwen3.6-27B_Q4_0_GGUF_mtp_prose MTP/control 22 127 / 142 316.67 317.27 +0.19% 28.40 25.07 -11.72% Repeated MTP TPS loss; fewer useful tokens per verification cycle. GDN one-column diagnostic restores baseline answer.
107 Qwen3.6-27B_Q4_K_M_GGUF_baseline_code MTP/control 32 113 / 164 241.74 237.94 -1.57% 12.42 12.41 -0.06% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
107 Qwen3.6-27B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 239.46 235.76 -1.54% 12.38 12.38 -0.00% No >2% candidate in first pass; see the common decode trend.
107 Qwen3.6-27B_Q4_K_M_GGUF_baseline_prose MTP/control 22 107 / 104 236.76 234.89 -0.79% 12.41 12.41 -0.04% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
107 Qwen3.6-27B_Q4_K_M_GGUF_mtp_code MTP/control 32 113 / 164 279.51 276.62 -1.03% 29.35 30.85 +5.09% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
107 Qwen3.6-27B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 276.53 272.94 -1.30% 29.40 29.61 +0.73% No >2% candidate in first pass; see the common decode trend.
107 Qwen3.6-27B_Q4_K_M_GGUF_mtp_prose MTP/control 22 107 / 104 276.94 275.21 -0.62% 22.03 22.08 +0.20% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
108 Qwen3.8-27B_Q4_0_GGUF_baseline_code MTP/control 32 101 / 101 285.80 279.13 -2.34% 13.32 13.30 -0.11% No >2% candidate in first pass; see the common decode trend.
108 Qwen3.8-27B_Q4_0_GGUF_baseline_list MTP/control 26 51 / 51 281.34 276.79 -1.61% 13.28 13.27 -0.10% No >2% candidate in first pass; see the common decode trend.
108 Qwen3.8-27B_Q4_0_GGUF_baseline_prose MTP/control 22 126 / 129 276.19 273.57 -0.95% 13.33 13.31 -0.13% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
108 Qwen3.8-27B_Q4_0_GGUF_mtp_code MTP/control 32 101 / 101 319.41 315.12 -1.34% 36.80 37.03 +0.64% No >2% candidate in first pass; see the common decode trend.
108 Qwen3.8-27B_Q4_0_GGUF_mtp_list MTP/control 26 51 / 51 316.30 313.91 -0.75% 35.69 35.75 +0.17% No >2% candidate in first pass; see the common decode trend.
108 Qwen3.8-27B_Q4_0_GGUF_mtp_prose MTP/control 22 126 / 129 321.13 315.53 -1.74% 25.82 28.33 +9.71% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
109 Qwen3.8-27B_Q4_K_M_GGUF_baseline_code MTP/control 32 99 / 99 257.11 252.33 -1.86% 12.77 12.77 -0.01% No >2% candidate in first pass; see the common decode trend.
109 Qwen3.8-27B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 255.64 250.09 -2.17% 12.74 12.74 -0.02% No >2% candidate in first pass; see the common decode trend.
109 Qwen3.8-27B_Q4_K_M_GGUF_baseline_prose MTP/control 22 127 / 127 247.83 245.16 -1.07% 12.78 12.77 -0.05% No >2% candidate in first pass; see the common decode trend.
109 Qwen3.8-27B_Q4_K_M_GGUF_mtp_code MTP/control 32 99 / 99 289.23 292.94 +1.28% 32.69 34.19 +4.58% No >2% candidate in first pass; see the common decode trend.
109 Qwen3.8-27B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 289.65 292.74 +1.07% 29.94 32.60 +8.88% No >2% candidate in first pass; see the common decode trend.
109 Qwen3.8-27B_Q4_K_M_GGUF_mtp_prose MTP/control 22 127 / 127 284.13 289.63 +1.94% 26.32 26.47 +0.58% No >2% candidate in first pass; see the common decode trend.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_baseline_code MTP/control 32 183 / 183 104.28 100.83 -3.30% 59.23 59.35 +0.21% No >2% candidate in first pass; see the common decode trend.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_baseline_list MTP/control 26 51 / 51 97.38 95.38 -2.06% 58.04 58.18 +0.24% No >2% candidate in first pass; see the common decode trend.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_baseline_prose MTP/control 22 145 / 128 98.32 94.73 -3.65% 59.15 59.17 +0.04% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_mtp_code MTP/control 32 183 / 183 117.82 117.09 -0.62% 102.02 105.80 +3.70% No >2% candidate in first pass; see the common decode trend.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_mtp_list MTP/control 26 51 / 51 113.92 113.54 -0.33% 99.56 101.04 +1.48% No >2% candidate in first pass; see the common decode trend.
110 Qwen3.6-35B-A3B_Q4_K_M_GGUF_mtp_prose MTP/control 22 122 / 133 114.58 110.87 -3.23% 78.25 78.46 +0.28% Generated answer changes; inspect rates, output length, and acceptance separately. No >2% first-pass rate candidate.

@liangliangchang liangliangchang 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.

LGTM

@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.

I will work on MTP improvement on RDNA3.5.

@jimw567
jimw567 merged commit 9ab1b6a into gfx11 Oct 19, 2026
17 of 41 checks passed
@jimw567
jimw567 deleted the jimwu.gfx11-sync-master-20261016 branch October 19, 2026 19:59
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.