Finding
With depth-one MTP, the median 4,096-token request took 2.252 s on expXa and 2.272 s on PXA 4. At 65,536 tokens, the medians were 19.545 s and 22.016 s.
At 65,536 input tokens with MTP, expXa’s median request time was 11.2% lower. MTP increased decode throughput but slightly increased total request time at that length in both engines; its benefit depends on the balance of input and output work.
This comparison changes no engine configuration. The tables show the observed medians and ranges; three repetitions per configuration support a descriptive comparison, not a statistical claim of a universal winner.
Matched depth-one MTP
Three scored runs per engine and input length, with exactly 128 generated tokens. Request time includes the whole HTTP request; native prefill and decode rates describe the engine’s timed phases.
| Engine | MTP | Input tokens | Prefill tok/s | Decode tok/s | Request s | Range s |
|---|---|---|---|---|---|---|
| expXa | Depth 1 | 512 | 1,905.1 | 109.1 | 1.453 | 1.440–1.493 |
| PXA 4.0.1 | Depth 1 | 512 | 1,908.3 | 102.7 | 1.572 | 1.566–1.582 |
| expXa | Depth 1 | 4,096 | 4,434.3 | 104.3 | 2.252 | 2.224–2.256 |
| PXA 4.0.1 | Depth 1 | 4,096 | 4,419.2 | 99.6 | 2.272 | 2.267–2.293 |
| expXa | Depth 1 | 16,384 | 4,730.7 | 99.7 | 4.837 | 4.817–4.850 |
| PXA 4.0.1 | Depth 1 | 16,384 | 4,573.3 | 91.5 | 5.049 | 5.048–5.055 |
| expXa | Depth 1 | 65,536 | 3,654.2 | 86.7 | 19.545 | 19.531–19.576 |
| PXA 4.0.1 | Depth 1 | 65,536 | 3,232.6 | 79.1 | 22.016 | 22.002–22.043 |
Matched runs with MTP disabled
| Engine | MTP | Input tokens | Prefill tok/s | Decode tok/s | Request s | Range s |
|---|---|---|---|---|---|---|
| expXa | Off | 512 | 1,900.1 | 92.2 | 1.668 | 1.662–1.706 |
| PXA 4.0.1 | Off | 512 | 1,953.8 | 93.0 | 1.651 | 1.640–1.687 |
| expXa | Off | 4,096 | 4,451.0 | 90.7 | 2.380 | 2.374–2.451 |
| PXA 4.0.1 | Off | 4,096 | 4,429.9 | 91.8 | 2.372 | 2.366–2.372 |
| expXa | Off | 16,384 | 4,779.2 | 88.2 | 4.939 | 4.921–5.054 |
| PXA 4.0.1 | Off | 16,384 | 4,638.5 | 89.1 | 5.023 | 5.011–5.028 |
| expXa | Off | 65,536 | 3,772.4 | 77.5 | 19.115 | 19.108–19.118 |
| PXA 4.0.1 | Off | 65,536 | 3,328.6 | 78.9 | 21.396 | 21.396–21.407 |
What MTP changes
The following compares median total request time with MTP off and on within each engine. Positive percentages mean a shorter request with MTP. Draft and acceptance counts for each request are included in the download.
| Input tokens | expXa off, s | expXa on, s | Reduction | PXA off, s | PXA on, s | Reduction |
|---|---|---|---|---|---|---|
| 512 | 1.668 | 1.453 | 12.9% | 1.651 | 1.572 | 4.8% |
| 4,096 | 2.380 | 2.252 | 5.4% | 2.372 | 2.272 | 4.2% |
| 16,384 | 4.939 | 4.837 | 2.1% | 5.023 | 5.049 | -0.5% |
| 65,536 | 19.115 | 19.545 | -2.3% | 21.396 | 22.016 | -2.9% |
Correctness and recovery checks
Natural-stop arithmetic, grounding, extraction and negation checks passed 48/48 cases. Chat-formatted retrieval checks placed three edited facts throughout a roughly 65K-token archive and passed 8/8 cases. Following-request checks after cancellation passed 12/12 launch groups. These are bounded functional checks, not a general model-quality benchmark.
| Engine | MTP | Short checks | 65K retrieval | Cancellation recovery |
|---|---|---|---|---|
| expXa | Depth 1 | 12/12 | 2/2 | 3/3 |
| expXa | Off | 12/12 | 2/2 | 3/3 |
| PXA 4.0.1 | Depth 1 | 12/12 | 2/2 | 3/3 |
| PXA 4.0.1 | Off | 12/12 | 2/2 | 3/3 |
Method
- Identical Q6_K weights and CPU-resident vision projector, both GPUs, equal layer split, all model layers on GPU. Context allocation 262,144; Q8_0 key/value cache; 10 generation and 10 batch threads; batch 4,096 and microbatch 1,024; one slot; 64 context checkpoints.
- expXa uses its qualified 4×8 attention and two-token Q6_K MTP profile. PXA uses its own implementation with the same explicit depth-one MTP setting. MTP-off arms disable speculation explicitly. This measures complete builds; it does not isolate one attention kernel.
- Matched token arrays at 512, 4,096, 16,384 and 65,536 tokens. Temperature zero, seed 42, prompt caching disabled. All five model end-of-generation tokens are suppressed for speed requests only. Natural-stop checks clear that bias.
- Three rounds rotate the four engine/MTP configurations and prompt-length order. Every launch has an unscored 512-token warmup. Loading is excluded. The schedule is rotated, but three rounds do not fully counterbalance four configurations.
- Every scored response must report the complete input length, no truncation and exactly 128 generated tokens. Request wall time and time to first content are measured by the same local client.
- Other inference was fenced throughout the scored window. Other models remained loaded, so this is the same shared-memory layout for both engines. Resource reserves and unrelated process identities were monitored. The original serving configuration was restored and verified afterward.
Excluded attempts
An initial launch was refused by the runtime lock before scoring. A subsequent attempt stopped after a 4,096-token request ended at 93 output tokens despite the generic ignore-EOS option. Its entire partial arm, including the preceding 512-token run, was excluded. The final study explicitly suppressed all five end-of-generation tokens for both engines and reran the comparison.
Limits
- One dual-V100 host, one quantization and three repetitions per configuration. Shared-host CPU and storage activity can still introduce noise.
- Synthetic, repetitive prompts with forced output length can favor different speculative acceptance rates than conversation. Natural stopping and real workloads may change the ranking.
- The 262K context was allocated; the longest speed prompt evaluated here was 65,536 tokens. This is not a 262K retrieval or throughput qualification.
- Output hashes were stable across repeats within each configuration. They differed across configurations at 512 and 4,096 input tokens, and matched across all four configurations at 16,384 and 65,536 tokens. Short-input decode rates therefore include differences in the generated token sequence. Passing the short functional checks does not establish broad equivalence or language quality.
All 48 scored runs
| Engine | MTP | Round | Input | Request s | First content s | Prefill tok/s | Decode tok/s |
|---|---|---|---|---|---|---|---|
| expXa | Off | 1 | 16,384 | 4.921 | 3.466 | 4,781.3 | 88.4 |
| expXa | Off | 1 | 4,096 | 2.380 | 0.967 | 4,456.1 | 90.7 |
| expXa | Off | 1 | 512 | 1.706 | 0.317 | 1,909.7 | 92.2 |
| expXa | Off | 1 | 65,536 | 19.108 | 17.424 | 3,774.7 | 76.9 |
| expXa | Off | 2 | 16,384 | 5.054 | 3.504 | 4,735.3 | 82.8 |
| expXa | Off | 2 | 4,096 | 2.451 | 0.982 | 4,386.6 | 87.2 |
| expXa | Off | 2 | 512 | 1.662 | 0.277 | 1,891.5 | 92.5 |
| expXa | Off | 2 | 65,536 | 19.115 | 17.457 | 3,766.7 | 78.2 |
| expXa | Off | 3 | 16,384 | 4.939 | 3.478 | 4,779.2 | 88.2 |
| expXa | Off | 3 | 4,096 | 2.374 | 0.967 | 4,451.0 | 91.1 |
| expXa | Off | 3 | 512 | 1.668 | 0.278 | 1,900.1 | 92.1 |
| expXa | Off | 3 | 65,536 | 19.118 | 17.435 | 3,772.4 | 77.5 |
| expXa | Depth 1 | 1 | 16,384 | 4.817 | 3.476 | 4,736.7 | 99.7 |
| expXa | Depth 1 | 1 | 4,096 | 2.256 | 0.972 | 4,431.7 | 104.0 |
| expXa | Depth 1 | 1 | 512 | 1.493 | 0.309 | 1,958.8 | 108.4 |
| expXa | Depth 1 | 1 | 65,536 | 19.545 | 17.994 | 3,654.4 | 86.7 |
| expXa | Depth 1 | 2 | 16,384 | 4.837 | 3.488 | 4,720.4 | 99.1 |
| expXa | Depth 1 | 2 | 4,096 | 2.252 | 0.972 | 4,434.3 | 104.3 |
| expXa | Depth 1 | 2 | 512 | 1.453 | 0.275 | 1,905.1 | 109.1 |
| expXa | Depth 1 | 2 | 65,536 | 19.576 | 18.023 | 3,649.0 | 86.5 |
| expXa | Depth 1 | 3 | 16,384 | 4.850 | 3.514 | 4,730.7 | 100.0 |
| expXa | Depth 1 | 3 | 4,096 | 2.224 | 0.963 | 4,470.5 | 105.9 |
| expXa | Depth 1 | 3 | 512 | 1.440 | 0.276 | 1,899.7 | 110.3 |
| expXa | Depth 1 | 3 | 65,536 | 19.531 | 17.995 | 3,654.2 | 87.8 |
| PXA 4.0.1 | Off | 1 | 16,384 | 5.028 | 3.584 | 4,638.3 | 89.0 |
| PXA 4.0.1 | Off | 1 | 4,096 | 2.372 | 0.974 | 4,429.9 | 91.7 |
| PXA 4.0.1 | Off | 1 | 512 | 1.687 | 0.310 | 1,976.3 | 93.0 |
| PXA 4.0.1 | Off | 1 | 65,536 | 21.396 | 19.748 | 3,329.3 | 78.6 |
| PXA 4.0.1 | Off | 2 | 16,384 | 5.011 | 3.570 | 4,640.5 | 89.2 |
| PXA 4.0.1 | Off | 2 | 4,096 | 2.372 | 0.979 | 4,399.5 | 92.2 |
| PXA 4.0.1 | Off | 2 | 512 | 1.640 | 0.269 | 1,949.5 | 93.4 |
| PXA 4.0.1 | Off | 2 | 65,536 | 21.407 | 19.775 | 3,325.5 | 79.3 |
| PXA 4.0.1 | Off | 3 | 16,384 | 5.023 | 3.581 | 4,638.5 | 89.1 |
| PXA 4.0.1 | Off | 3 | 4,096 | 2.366 | 0.970 | 4,434.4 | 91.8 |
| PXA 4.0.1 | Off | 3 | 512 | 1.651 | 0.269 | 1,953.8 | 92.7 |
| PXA 4.0.1 | Off | 3 | 65,536 | 21.396 | 19.755 | 3,328.6 | 78.9 |
| PXA 4.0.1 | Depth 1 | 1 | 16,384 | 5.049 | 3.589 | 4,587.8 | 91.5 |
| PXA 4.0.1 | Depth 1 | 1 | 4,096 | 2.272 | 0.935 | 4,419.2 | 99.6 |
| PXA 4.0.1 | Depth 1 | 1 | 512 | 1.572 | 0.271 | 1,908.3 | 102.7 |
| PXA 4.0.1 | Depth 1 | 1 | 65,536 | 22.016 | 20.333 | 3,233.1 | 79.5 |
| PXA 4.0.1 | Depth 1 | 2 | 16,384 | 5.055 | 3.601 | 4,573.3 | 91.5 |
| PXA 4.0.1 | Depth 1 | 2 | 4,096 | 2.293 | 0.943 | 4,369.8 | 98.7 |
| PXA 4.0.1 | Depth 1 | 2 | 512 | 1.582 | 0.275 | 1,905.3 | 102.6 |
| PXA 4.0.1 | Depth 1 | 2 | 65,536 | 22.043 | 20.343 | 3,231.9 | 78.7 |
| PXA 4.0.1 | Depth 1 | 3 | 16,384 | 5.048 | 3.600 | 4,570.2 | 91.8 |
| PXA 4.0.1 | Depth 1 | 3 | 4,096 | 2.267 | 0.931 | 4,428.6 | 99.7 |
| PXA 4.0.1 | Depth 1 | 3 | 512 | 1.566 | 0.274 | 1,909.6 | 103.5 |
| PXA 4.0.1 | Depth 1 | 3 | 65,536 | 22.002 | 20.325 | 3,232.6 | 79.1 |
Related study: the 30B Q4_K_M comparison with CPU expert offload. Its placement and model differ, so the absolute times are not a controlled model-to-model comparison.