LLM·

Prefetch-steered routing — Logical vs physical expert cache — What does it mean?

The news. On October 26, 2026, Siming Huang (HKUST Guangzhou) posted a paper on prefetch-steered routing for offloaded MoE decoding. On OLMoE-1B-7B with an RTX 4090 and 50% of experts resident, it reports 10.7 ms per token (teacher-forced) against 24.7 ms for exact routing with LRU. Read the paper →

Picture a kitchen where the pantry is too small for every ingredient. A chef (the router) picks dishes for each order, and a runner fetches missing ingredients from a distant warehouse. A model with offloaded experts works the same way: the router picks 8 experts per layer, and every pick that is not on the GPU waits for a PCIe copy. At batch size one, those waits dominate decoding. Because decoding is limited by moving bytes rather than by arithmetic, this is the memory-hierarchy problem in its plainest form: the slow link between host memory and the GPU sets the speed.

The obvious fix is to nudge the chef toward ingredients already on the shelf. That is cache-aware routing, and it works: fewer copies. The trap appears when you add prefetching. If the chef looks at the physical shelf, then whether a tomato is on it at the moment of cooking depends on how fast the runner was, which depends on link bandwidth and load. The same prompt can produce different text on a different machine, and a benchmark harness that does not copy the engine's timing is scoring a different model. The paper measures this: with routing on the physical cache, changing only the number of copies in flight (1, 2 or 4) moves perplexity from 8.755 to 8.627, and repeated runs on the same GPU differ by up to 0.054.

PSR's answer is a menu board. The router reads a logical cache that evolves by a fixed rule from the token history alone: at each layer, up to n (1 or 2) of the next layer's pre-gate predictions are inserted into the logical set, whether or not their copies have arrived yet. The engine then issues the real copies to match the board, and waits only when the chef must cook something that has not landed. Timing changes how long a token takes, never what it computes. In the same experiment the logical cache gives 8.509 perplexity at every setting, with zero run-to-run range. Inserting a pre-gate prediction also helps quality: the bonus lands on experts the router was already likely to choose, so it steers routing onto experts that are already in flight.

DesignWhat routing readsOutput depends on timing?Copies on the critical path
Exact routing + LRUNothing about the cacheNoEvery miss is a demand copy
Cache-aware, physical cacheBytes that have arrivedYesFewer copies, but each is a demand copy
Cache-aware, logical cache (PSR)Deterministic bookkeeping setNoFewer copies, most started a layer early

Worked example (50% residency, OLMoE-1B-7B; per-token averages from the paper's copy accounting, combined here for illustration). Cache-Prior at lambda 0.2 makes 10.5 copies per token, every one a demand copy, and the paper puts its latency above the all-GPU floor at 0.70 ms per copy: 10.5 × 0.70 ≈ 7.4 ms of stall. PSR makes more copies, 13.8 per token, but only 2.2 are demand copies, and 9.9 of its prefetches were issued one layer earlier and are still in flight, so the layer waits only for the remainder. Averaged over all its copies, PSR's latency above the floor is 0.28 ms per copy: 13.8 × 0.28 ≈ 3.9 ms of stall. PSR makes more copies than Cache-Prior but pays about half the stall, because it hides most of each copy behind the previous layer's compute. The paper's measured token latency is 10.7 ms for PSR (teacher-forced).

The budget n matters. Letting every non-resident pre-gate candidate in (n = 8) gives the closest match to exact routing but commits about 25 copies per token, more than the link can overlap, and decodes at 17.0 ms, slower than Cache-Prior without prefetching. A small fixed budget keeps the extra copies within what the link can carry. The gains are also workload- and hardware-dependent: on Qwen3.6-35B-A3B, where copies are cheap relative to compute, PSR keeps its quality edge on likelihood benchmarks but not its speed, and in greedy generation Cache-Prior is faster on HumanEval at 50% residency. The authors state that the numbers must be re-measured for other models and links, and that the baselines are reimplementations in one engine, not comparisons against tuned systems.

Goes deeper in: GPU & CUDA → Memory Hierarchy → NVLink & PCIe

Related explainers

Frequently Asked Questions

Check what you knowMap your AI & GPU knowledge across every track — free, role-based