Research
Each study asks one question about the engine and ends with a decision. Ideas that didn’t pay off stay here alongside the ones that did, with their raw numbers.
Engine comparisons
expXa against PXA on the same weights, hardware and settings.
- No change
expXa vs PXA 4 on Qwen3.6-35B-A3B Q6_K
Both engines with and without MTP on two V100s: 48 matched requests from 512 to 65,536 input tokens, plus retrieval and cancellation checks.
- Adopted
expXa vs PXA 4 on Qwen3-30B-A3B Q4_K_M
From 49.4 s to 24.3 s on a 4,096-token request, now level with PXA 4’s 24.4 s. Ported CPU expert work did most of it; parallel activation preparation added about 6%.
- No change
Dense models across three engines
On Qwen3.5-9B and 0.8B, expXa stays within 2% of PXA 3.1. PXA 4 is 11–15% faster on the 0.8B and level on the 9B.
Kernel and runtime experiments
Changes to individual CPU and GPU operators, measured on their own and, where they were adopted, in serving.
- Not adopted
Reordering expert work for weight reuse
About 4% less operator time at 255 active jobs; slower for smaller batches and for the paired kernel.
- Adopted
Switching CPU tile modes at runtime
Three tile modes in one process with bit-identical output. With every expert on the CPU, hoisted VNNI tiles raised prefill 25–31%.
- Not adopted
Warp sharing in expert and attention kernels
The expert kernel already shares what helps. Broadcasting rescaling values in 4×8 attention made it 19% slower.
- Adopted
VNNI CPU tiles in serving
Outputs unchanged on both MoE models; no measurable serving speedup at 40 CPU expert layers.
Every measured configuration
All scored runs on Qwen3-30B-A3B Q4_K_M with 128 output tokens. Sessions, hardware and expert placement differ between rows, so compare engines only within the same session and GPU.
| Session | GPU | Engine | Setup | Input | Prefill tok/s | Decode tok/s | Request s | Range s | Runs |
|---|---|---|---|---|---|---|---|---|---|
| 3 Nov | V100 | expXa 0982 | parallel activation prep | 512 | 203.97 | 37.28 | 6.00 | 5.77–6.07 | 3 |
| 3 Nov | V100 | expXa 0982 | parallel activation prep | 4,096 | 201.53 | 32.96 | 24.27 | 24.16–27.10 | 3 |
| 3 Nov | V100 | expXa 0982 | old prep path (ablation) | 512 | 190.34 | 38.16 | 6.00 | 5.99–6.05 | 3 |
| 3 Nov | V100 | expXa 0982 | old prep path (ablation) | 4,096 | 189.38 | 30.93 | 25.83 | 25.53–25.89 | 3 |
| 3 Nov | V100 | PXA 4.0.1 | control for 0982 | 512 | 180.82 | 31.23 | 6.95 | 5.91–7.45 | 3 |
| 3 Nov | V100 | PXA 4.0.1 | control for 0982 | 4,096 | 202.00 | 30.41 | 24.38 | 24.01–26.76 | 3 |
| 3 Nov | V100 | expXa a078 | reference for 0982 | 512 | 187.43 | 37.75 | 6.13 | 6.00–6.25 | 2 |
| 3 Nov | V100 | expXa a078 | reference for 0982 | 4,096 | 179.34 | 32.46 | 26.81 | 26.17–27.44 | 2 |
| 3 Nov | V100 | expXa a078 | CPU expert path | 512 | 191.99 | 35.60 | 6.34 | 6.01–6.90 | 4 |
| 3 Nov | V100 | expXa a078 | CPU expert path | 4,096 | 186.92 | 33.18 | 25.82 | 25.68–25.89 | 4 |
| 3 Nov | V100 | PXA 4.0.1 | control for a078 | 512 | 209.54 | 37.62 | 5.84 | 5.77–6.46 | 4 |
| 3 Nov | V100 | PXA 4.0.1 | control for a078 | 4,096 | 202.80 | 33.65 | 24.01 | 23.66–26.26 | 4 |
| 2 Nov | V100 | Custom PXA 3.1 | serving build, re-measured | 512 | 123.24 | 32.94 | 8.10 | 7.71–8.52 | 3 |
| 2 Nov | V100 | Custom PXA 3.1 | serving build, re-measured | 4,096 | 125.61 | 31.11 | 36.56 | 36.51–39.68 | 3 |
| 2 Nov | V100 | Custom PXA 3.1 | isolated copy | 512 | 108.58 | 33.13 | 8.95 | 8.53–13.57 | 3 |
| 2 Nov | V100 | Custom PXA 3.1 | isolated copy | 4,096 | 128.13 | 30.10 | 36.77 | 34.53–40.92 | 3 |
| 2 Nov | V100 | PXA 4.0.1 | same settings | 512 | 206.85 | 37.42 | 5.85 | 5.76–7.83 | 3 |
| 2 Nov | V100 | PXA 4.0.1 | same settings | 4,096 | 199.57 | 29.30 | 25.16 | 23.59–27.93 | 3 |
| 2 Nov | V100 | expXa 208e21d | same settings | 512 | 79.85 | 31.94 | 10.42 | 9.05–12.16 | 3 |
| 2 Nov | V100 | expXa 208e21d | same settings | 4,096 | 90.73 | 29.21 | 49.42 | 41.64–49.83 | 3 |
| 2 Nov | V100 | Custom PXA 3.1 | serving build, first pass | 512 | 135.89 | 36.06 | 7.34 | 7.19–7.38 | 3 |
| 2 Nov | V100 | Custom PXA 3.1 | serving build, first pass | 4,096 | 135.54 | 32.66 | 34.10 | 33.97–34.26 | 3 |
| 2 Nov | Titan Xp | expXa 208e21d | 40 CPU expert banks | 512 | 11.20 | 9.43 | 59.61 | 58.74–60.06 | 3 |
| 2 Nov | Titan Xp | expXa 208e21d | 40 CPU expert banks | 4,096 | 11.29 | 8.46 | 378.47 | 376.86–380.06 | 3 |
| 2 Nov | Titan Xp | expXa 208e21d | 19 CPU expert banks | 512 | 51.58 | 23.98 | 15.30 | 15.20–15.35 | 3 |
| 2 Nov | Titan Xp | expXa 208e21d | 19 CPU expert banks | 4,096 | 51.23 | 22.25 | 85.65 | 85.61–86.25 | 3 |
| 2 Nov | Titan Xp | PXA 4.0.1 | 19 CPU expert banks | 512 | 71.00 | 25.45 | 12.24 | 12.23–12.40 | 3 |
| 2 Nov | Titan Xp | PXA 4.0.1 | 19 CPU expert banks | 4,096 | 70.75 | 22.75 | 63.51 | 63.46–63.53 | 3 |
| 2 Nov | Titan Xp | expXa 208e21d | 20 CPU expert banks | 512 | 49.09 | 24.25 | 15.71 | 15.52–15.89 | 3 |
| 2 Nov | Titan Xp | expXa 208e21d | 20 CPU expert banks | 4,096 | 49.26 | 22.41 | 88.87 | 88.83–89.24 | 3 |
| 2 Nov | Titan Xp | PXA 4.0.1 | 20 CPU expert banks | 512 | 67.92 | 23.31 | 13.03 | 12.89–13.43 | 3 |
| 2 Nov | Titan Xp | PXA 4.0.1 | 20 CPU expert banks | 4,096 | 67.56 | 21.59 | 66.46 | 66.31–80.33 | 3 |
V100 rows use one V100-SXM2 32GB with a 19.2-core CPU quota and 40 CPU expert layers. Titan Xp rows use a 12GB card with a 3.3-core quota; the 19- and 20-bank rows place fewer experts on the CPU.
Engines that couldn’t be scored
- PXA Overdrive: the option didn’t activate an Overdrive recipe for these weights, so there was nothing to measure.
- Strata v0.2.10: its loader requires PLE tensors this model doesn’t have. We didn’t substitute other weights to force a comparison.
Data
Each download holds the per-run numbers behind a study: timings, output hashes, and paired ratios with their intervals where the study used them.
| File | Contents |
|---|---|
| engine-comparison-35b-a3b.json | 35B Q6_K engine comparison: 48 requests, MTP controls and functional checks |
| configurations.json | Every configuration above, with settings and individual runs |
| dense-models.json | 54 timed requests, sanity and recovery checks |
| tile-mode-control.json | A/B runs, throttling, functional checks |
| vnni-serving.json | 72 before/after runs with paired intervals |
| warp-sharing.json | Per-fixture timings for expert, MMA and vector kernels |
| expert-reuse-ordering.json | Full sweep, confirmation and serial prototype |