ArXiv: 2601.05296
π― Pitch
A Mixture-of-Experts training framework eliminates the 94 GB per-layer token routing buffers that cap sequence lengths, achieving over 50% activation memory savings and 6.2Γ speedups by fusing expert computation with on-the-fly token dispatch that avoids both global sorting and atomic contention.
1. Executive Summary
MoEBlaze introduces a memory-efficient Mixture-of-Experts training framework that addresses the "memory wall" bottleneck amplified by MoE architectures' sparse activation patterns and large token routing buffers on modern GPUs. The paper's core contributions are an end-to-end token dispatch and training method that eliminates intermediate activation buffers and materialization (replacing conventional per-expert token compaction with on-the-fly gathers guided by lightweight index structures), co-designed with smart activation checkpoint and kernel fusion (fusing SwiGLU's dual projections and epilogue into a single kernel while recomputing the computationally inexpensive SiLU activation during backward rather than storing it). Evaluated against Megablocks on an NVIDIA H100 across seven MoE configurations, MoEBlaze achieves over 4Γ speedups and over 50% activation memory savings, with peak gains reaching a 3.6Γ memory reduction (from 22,000 MB to 6,100 MB) and a 6.2Γ training speedup on SwiGLU-based configurations, establishing that eliminating per-expert routed activation buffers and fusing activation computation with expert GEMMs can substantially break the memory wall β but only when the token dispatch data structures are designed to exploit GPU parallelism without atomic contention or multi-pass global sorting.
2. Context and Motivation
The Core Problem: Activation Memory Is the Unspoken Ceiling in MoE Training
The paper addresses a specific and growing bottleneck in large-scale Mixture-of-Experts training: activation memory pressure. This is not parameter memory β the well-known challenge of fitting giant weight matrices onto GPUs β but rather the dynamic memory consumed by intermediate tensors during the forward and backward passes. The authors argue that for modern MoE architectures operating at production scale, activation memory has become the dominant constraint on batch size, sequence length, and ultimately training throughput, yet it has received disproportionately less attention than parameter storage or communication optimizations.
To make this problem concrete, the paper offers two quantitative illustrations in Section 2 that are worth examining in detail because they ground the entire motivation:
The token routing buffer problem. In conventional MoE implementations, tokens must be physically dispatched β copied and reordered β into per-expert buffers before expert computation can begin. For each MoE layer, this creates a routing buffer sized proportionally to L Γ K Γ d, where L is the number of routed tokens (batch size Γ sequence length), K is the number of activated experts per token, and d is the model dimension. The paper calculates this for a DeepSeek-like configuration: L β 2 million tokens, K = 4 active experts, d = 6144, with bfloat16 storage (2 bytes per element):
Mem_routing = 2,000,000 Γ 4 Γ 6,144 Γ 2 bytes β 94 GB
That is roughly 94 gigabytes for a single MoE layer's routing buffer alone β approaching or exceeding the 80 GB HBM capacity of a single H100 GPU. This means that in conventional implementations, the token dispatch mechanism itself consumes memory comparable to the entire GPU's capacity, forcing heavy sharding across devices or aggressive reduction of batch size.
The FFN intermediate activation problem. During expert computation, each expert's first linear projection (W1_i) generates an intermediate activation of size L_i Γ h, where L_i is the number of tokens routed to that expert and h is the FFN hidden dimension (typically 4 Γ d). Aggregated across all experts, this sums to O(L Γ h), but the paper's example makes the scale concrete: with L β 2 million and h = 24,576 (a typical 4Γ expansion from d = 6144), the intermediate activation footprint is:
Mem_act = 2,000,000 Γ 24,576 Γ 2 bytes β 98 GB
For SwiGLU activations (Section 5.1), this number actually doubles because the gating path requires two separate projections (a = xW1 and b = xW2) plus multiple element-wise intermediates (SiLU(a), the sigmoid Ο(a), and the element-wise product SiLU(a) β b). Even for simpler activations like ReLU, the intermediate buffer is substantial.
The paper's central claim is that these two sources β routing buffers and FFN intermediates β together dominate the activation memory budget in MoE training, and that existing systems have not systematically addressed both simultaneously.
Why This Problem Matters Now
The timing of this work is not accidental. Several converging trends in LLM training have amplified the activation memory bottleneck to the point where it actively constrains model design decisions:
Longer sequences and larger batches. Modern LLMs are trained on ever-longer context windows (32k tokens in Mixtral, 128k+ in GPT-4 and Gemini, and even longer in recent frontier models). Each doubling of sequence length doubles L β and therefore doubles the routing buffer and FFN intermediate sizes. Combined with the trend toward larger global batch sizes for training stability, L reaches the millions-of-tokens-per-step regime where the paper's 94 GB + 98 GB estimates become realistic.
More experts and more active experts per token. Early MoE designs like Switch Transformers used K = 1 (each token routed to a single expert). Modern architectures including Mixtral 8Γ7B and DeepSeek-V3 use K = 2 or K = 4, and DeepSeek-V3 scales to 671B total parameters with 256 experts. Each increment of K linearly multiplies the routing buffer size (L Γ K Γ d), making activation memory pressure a first-order constraint on architectural choices.
Advanced activation functions. The shift from ReLU/GELU to SiLU/SwiGLU (Shazeer, 2020) in modern architectures improves model quality but creates a memory multiplier: SwiGLU requires two parallel projections plus element-wise gating, roughly doubling the intermediate activation storage per expert compared to a simple ReLU MLP. The paper explicitly identifies this as a "non-negligible bottleneck" (Section 5.1) that prior MoE systems have not specifically optimized for.
The memory wall is structural, not cyclical. The paper opens with the observation that "over the past several decades, processor throughput has advanced much faster than memory bandwidth and latency" (Section 1, citing Wulf & McKee, 1995 and Williams et al., 2009). This means that even as GPUs gain more FLOPs with each generation (H100 achieves ~1,000 TFLOPS in FP16), the rate at which data can be moved in and out of HBM improves much more slowly. For MoE training specifically, this translates to a regime where the computation becomes memory-bandwidth-bound rather than compute-bound β adding more arithmetic units doesn't help if the data can't be fed fast enough. The paper positions itself as addressing this structural gap, not a temporary hardware limitation.
Where Prior Approaches Fall Short
The paper identifies three generations of prior work on MoE system efficiency, each of which addresses part of the problem but leaves the activation memory bottleneck largely unresolved.
First generation: Capacity-limited routing with token dropping (Switch Transformers, GShard). These systems (Fedus et al., 2022; Lepikhin et al., 2021) imposed a hard capacity limit C β Ξ³ Γ (L Γ K / E) on how many tokens each expert could process, and simply dropped or re-routed tokens exceeding that capacity. This made system implementation straightforward β fixed-size buffers, predictable memory allocation, no dynamic load balancing β but directly compromised model quality. The paper points to this tradeoff as unacceptable for state-of-the-art training: "capacity-limited routing...comes at the cost of reduced model quality" (Section 2.1). More fundamentally, even capacity-limited systems still allocate the L Γ K Γ d routing buffer; the capacity cap only limits per-expert storage, not the total dispatch overhead.
Second generation: Dropless routing with computation-focused optimization (MegaBlocks, FastMoE, Tutel, DeepSpeed-MoE). These systems (Gale et al., 2023; He et al., 2021; Hwang et al., 2023; Rajbhandari et al., 2022) eliminated token dropping, preserving model quality by ensuring every token is processed by its assigned experts. They focused primarily on optimizing the computation side: MegaBlocks reformulated MoE as block-sparse operations to avoid dense padding, Tutel introduced adaptive parallelism to handle dynamic workload imbalance, and DeepSpeed-MoE provided distributed training infrastructure.
However, the paper argues these systems still maintain the fundamental memory pathology: they "compact these tokens into per-expert buffers" (Section 3), creating intermediate activations at the L Γ K Γ d routing granularity that persist through the forward pass and are needed again during backpropagation. The paper's Figure 1 (left panel) illustrates this conventional flow: tokens are dispatched into per-expert buffers (creating intermediate activations), experts compute their MLPs (creating more intermediates), and results are aggregated back to token order. The intermediate buffers at both the dispatch and computation stages are the memory bottleneck, and dropless systems haven't eliminated them β they've only made the token counts more dynamic, which can actually increase memory management complexity.
Third generation: Fused gating and metadata-driven dispatch (TurboMoE). The most recent prior work, TurboMoE (Aminabadi et al., 2025), recognized that the gating path itself is a bottleneck and introduced "fused, metadata-driven kernels and data-layout transformations" to reduce sparse-compute overhead. This moves closer to MoEBlaze's territory by avoiding some intermediate materializations. However, the paper positions MoEBlaze as going further: MoEBlaze eliminates per-expert routed activation buffers entirely rather than optimizing within them, and it co-designs the activation checkpointing with kernel fusion specifically for complex activations like SwiGLU, which TurboMoE does not address.
The blind spot: Sorting-based token dispatch. The paper identifies a specific performance pathology in existing dispatch implementations that hasn't been highlighted in prior work (Section 4.2). The natural approach to building token-expert index structures is to flatten all L Γ K routing decisions into a 1D array of (expert_id, token_id) tuples, globally sort by expert ID to group tokens, and recover indices from the sorted order. This sounds clean but has severe GPU performance consequences: multi-pass radix sort requires "several global-memory passes proportional to key width," moving O(L Γ K) data multiple times. The paper specifically calls out that this "limits fine-grained parallelism" and "forces a multi-kernel dispatch pipeline (multi-pass sorts, segmented scans, index recoveries) with high kernel launch latencies." For L β 2 million and K = 4, this means 8 million elements sorted multiple times through global memory per MoE layer per training step β a massive data movement overhead that compounds the storage problem.
How MoEBlaze Positions Itself
The paper frames its contribution not as another incremental optimization of the existing MoE computation paradigm, but as a fundamental restructuring of how token routing and expert computation interact with memory. The core insight β stated explicitly in Section 3 β is that "we do not create dedicated buffer for routed tokens." Instead of copying tokens from the (L, d) input tensor into per-expert buffers of shape (L Γ K, d) and then reading them back during expert computation, MoEBlaze accesses tokens directly from the original input tensor using lightweight index structures.
This restructuring can be understood through what the paper is eliminating versus adding:
Eliminated:
- The
L Γ K Γ dmaterialized routing buffer (94 GB in the DeepSeek example) - The per-expert intermediate buffers between the first and second MLP layers (replaced by a single buffered intermediate)
- Multiple intermediate buffers for complex activations (SwiGLU's
a,b,Ο(a),SiLU(a)), replaced by one buffered output + recomputation of cheap pointwise operations
Added:
- An
expert_token_indicesarray of sizeL Γ Kstoring token IDs, grouped by expert - An
expert_token_offsetsarray of sizeE + 1storing prefix sums for expert boundaries - A
token_expert_indicesarray of sizeL Γ Kstoring expert IDs per token - A
token_index_maparray of sizeL Γ Kstoring positions for coalesced output gathering
The key point is that these index structures store integers (token IDs, offsets, positions), not activation tensors. At 4 bytes per integer, the index structures for the DeepSeek example consume approximately 4 Γ L Γ K Γ 4 bytes = 4 Γ 2M Γ 4 Γ 4 = 128 MB β roughly 750Γ smaller than the 94 GB routing buffer they replace. This quantitative ratio explains why the paper can claim "over 50% memory savings" across configurations: the dominant memory consumers (activation buffers scaling with L Γ d Γ K) are replaced by index structures scaling only with L Γ K.
The paper also positions its GPU implementation strategy as a departure from prior sorting-based approaches. Rather than globally sorting routing tuples (which requires multiple global-memory passes and multi-kernel orchestration), MoEBlaze uses a "simple 3-step process with each step designed to be atomic-free and parallelized on GPU" (Section 4.2): build a dense token-expert bitmap, compute expert lengths via warp-level reductions, and route indices using a location map constructed through tile-level prefix scans. This replaces a O(L log L) multi-pass sort with a O(L) single-pass construction, with the critical design constraint that every step is atomic-free β avoiding the write contention that would otherwise serialize GPU threads and destroy parallelism.
Finally, the paper distinguishes its activation checkpoint strategy from standard gradient checkpointing (which trades compute for memory by recomputing entire layer outputs). MoEBlaze's approach is more surgical: it specifically targets the computationally inexpensive but memory-intensive pointwise activations within SwiGLU (Section 5.2). The SiLU function SiLU(u) = u Β· Ο(u) involves two element-wise operations (sigmoid and multiply) that are heavily memory-bandwidth-bound on modern GPUs. Rather than storing the SiLU output for the backward pass (which costs L Γ h Γ 2 bytes β another 98 GB in the example), MoEBlaze recomputes it during backward, leveraging the fact that the recomputation is so cheap compared to the memory bandwidth savings that it actually improves overall throughput. This is a more nuanced claim than "recomputation saves memory" β it asserts that for memory-bandwidth-bound pointwise operations, recomputation can be faster than the alternative of writing to and reading from global memory, even before accounting for the memory savings.
The paper thus positions itself at the intersection of three design principles that have not been jointly applied to MoE training before: (1) index-based routing that eliminates activation buffers, (2) GPU-parallel dispatch construction that avoids global sorting and atomics, and (3) activation-aware kernel fusion that exploits the memory-bandwidth-bound nature of pointwise operations to make recomputation not just memory-efficient but throughput-favorable.
3. Technical Approach
3.1 Reader Orientation
MoEBlaze is a GPU training framework that restructures how Mixture-of-Experts layers handle token routing and expert computation β replacing large per-expert activation buffers with on-the-fly token access guided by lightweight integer index lists, and fusing the SwiGLU activation's memory-heavy intermediate computations into a single kernel that recomputes cheap pointwise operations rather than storing them. The system solves the problem of activation memory dominating GPU HBM during MoE training (since conventional approaches materialize L Γ K Γ d routing buffers and multiple intermediate tensors for complex activations), and the shape of the solution is: (1) replace the L Γ K Γ d activation buffer with O(L Γ K) integer indexing structures, (2) construct those index structures using parallel, atomic-free GPU algorithms rather than multi-pass global sorting, and (3) fuse the expert MLP's dual projections and SwiGLU epilogue into a single kernel that recomputes the inexpensive SiLU activation during backward, trading trivial compute for substantial memory bandwidth savings.
3.2 Big-Picture Architecture (Diagram in Words)
The system has five major components that replace the conventional MoE forward/backward pipeline:
-
Gating and Index Construction β consumes the gating network's Top-K decisions and builds four lightweight data structures (
expert_token_indices,expert_token_offsets,token_expert_indices,token_index_map) using a three-step atomic-free GPU algorithm that avoids global sorting. Produces integer arrays totalingO(L Γ K)elements rather than materialized activation buffers. -
On-the-Fly Expert Computation β performs expert MLP operations by reading input tokens directly from the original
(L, d)tensor using gathers indexed byexpert_token_indices, buffering only the single intermediate result between the two MLP layers for the backward pass. No per-expert activation buffers are allocated. -
Fused SwiGLU Kernel with Activation Checkpoint β combines both first-layer projections (
W1andW2) and the full SwiGLU epilogue (SiLU, element-wise multiply) into a single GPU kernel that loads input tokens once, streams through both GEMMs simultaneously, and writes only the final gated output to global memory β skipping intermediate storage ofa,b,SiLU(a), andΟ(a). During backward, recomputes the computationally inexpensive SiLU rather than reading a stored copy from memory. -
On-the-Fly Output Aggregation β fuses the second MLP's output with the per-token weighted summation using
token_index_mapto perform coalesced gathers from the intermediate buffer and direct reduction into the final(L, d)output tensor, eliminating the conventional "expand to(L Γ K, d)β sum β reduce to(L, d)" materialization step. -
Backward Pass via Reverse Indexing β propagates gradients through the same index structures in reverse: scatters output gradients to routed token positions using the token-to-expert mapping, computes weight gradients using the checkpointed intermediate from forward, and accumulates token gradients using on-the-fly reductions guided by the expert-to-token indices.
Information flows as follows: input tensor (L, d) enters the MoE layer β gating network produces Top-K assignments β index construction builds dispatch metadata (first time a buffer is written) β expert computation reads from the original (L, d) tensor using expert_token_indices (no copy) β fused SwiGLU kernel writes only the final gated output to a single intermediate buffer β second MLP produces per-expert outputs β output aggregation fuses with summation via token_index_map to produce final (L, d) output β backward reverses the flow using stored indices plus the single checkpointed intermediate.
3.3 Roadmap for the Deep Dive
- First, the memory-efficient token routing algorithm (Section 3) β the forward and backward pass mechanics that eliminate the
L Γ K Γ drouting buffer, because this is the foundational restructuring that everything else builds on. - Second, the dispatch data structures and their GPU-efficient construction (Section 4) β the four index arrays, their sizes, their roles in enabling on-the-fly access, and the three-step atomic-free build algorithm that avoids the multi-pass global sorting used in prior systems, because the data structures are what make the routing algorithm implementable at GPU scale.
- Third, the fused SwiGLU kernel with activation checkpoint (Section 5) β how the dual-projection epilogue fusion operates, what intermediates are eliminated versus checkpointed, why recomputing SiLU during backward is a throughput win (not just a memory win) on memory-bandwidth-bound hardware, and how the full end-to-end training Algorithm 1 integrates these pieces.
- Fourth, the concrete memory and compute savings mechanisms β a quantitative walkthrough of why replacing activation buffers with index structures produces such large reductions (the 750Γ ratio between
94 GBrouting buffers and128 MBindex structures from the DeepSeek example), and why the fused kernel's elimination of intermediate writes/reads improves throughput rather than just memory footprint.
3.4 Detailed, Sentence-Based Technical Breakdown
This is a systems paper whose core idea is that MoE training's activation memory bottleneck can be broken by replacing materialized per-expert token buffers with on-the-fly indexed access from the original input tensor, and that the index structures needed for this can be built using parallel, atomic-free GPU algorithms that scale to millions of tokens without the multi-pass global sorting overhead of prior approaches. The complementary kernel fusion and activation checkpoint for SwiGLU exploits the fact that pointwise activation functions are memory-bandwidth-bound on modern GPUs, making recomputation during backward actually faster than the store-and-reload pattern used in conventional implementations β not just more memory-efficient.
Memory-Efficient Token Routing: Forward Pass
The conventional MoE forward pass (illustrated in the left panel of Figure 1) operates in three stages: (1) token dispatch β gating decisions are used to compact tokens into per-expert buffers of shape (L Γ K, d), (2) expert computation β each expert's MLP processes its buffer, producing intermediate activations at the compacted token length, and (3) output aggregation β per-expert results are expanded back to token order and summed with gating weights. The paper's key observation is that stages (1) and the boundary between (2) and (3) create large activation buffers that persist through the forward pass and are needed again during backpropagation, fundamentally limiting the batch size and sequence length that fit in HBM.
MoEBlaze's forward pass eliminates these buffers entirely by substituting on-the-fly token access for materialized copies. The three stages become:
Token Dispatch (without materialization). Rather than creating a (L Γ K, d) buffer of reordered token activations, the system generates only indexing metadata from the gating scores produced by the preceding gating stage. Specifically, it builds four integer arrays (detailed in Section 4.1): expert_token_indices (size L Γ K) records which tokens are assigned to which expert, grouped and concatenated by expert ID; expert_token_offsets (size E + 1) marks the boundaries between experts in the concatenated list; token_expert_indices (size L Γ K) stores the expert IDs chosen for each token in token order; and token_index_map (size L Γ K) records each token's position within the expert_token_indices array for efficient output gathering. No memory is allocated for routed token activations at this stage β the index arrays are the only new allocation, and they store integers (4 bytes each), not floating-point tensors.
Expert Computation (with on-the-fly gathers). Each expert's MLP reads its input tokens directly from the original, unpermuted (L, d) activation tensor using the indices recorded in expert_token_indices. For expert i, the kernel reads tokens at positions expert_token_indices[expert_token_offsets[i] : expert_token_offsets[i+1]] β these are direct memory reads from the input tensor, not copies into a separate buffer. To support the backward pass, only the single intermediate result between the two back-to-back MLPs (the output of the first MLP layer, before the second) is buffered. This is the one activation buffer that MoEBlaze retains β all others are eliminated.
Output Aggregation (fused on-the-fly reduction). After each expert produces its (L_i, d) output from the second MLP, the results must be combined into the final (L, d) tensor using the per-token gating weights. In conventional systems, this requires expanding the compacted results back to (L Γ K, d) token order and then performing a weighted sum β creating another intermediate buffer at the routing granularity. MoEBlaze instead fuses this summation with the second MLP computation and uses token_index_map to perform coalesced gathers from the intermediate buffer directly into the output tensor positions. The token_index_map[i] for token i contains the K positions in the expert output buffer where that token's results reside, allowing a single parallel kernel to gather, weight, and accumulate without any intermediate expansion tensor.
The elimination logic can be summarized: the (L Γ K, d) routing buffer is removed by replacing copies with pointer-following (index arrays), the expansion buffer between expert outputs and final aggregation is removed by fusing the gather-reduce into the output kernel, and the multiple intermediate buffers within complex activations are removed by kernel fusion and recomputation (Section 5).
Memory-Efficient Token Routing: Backward Pass
The backward pass propagates gradients through the inverse of the forward operations, and the key challenge is that conventional implementations rely on the materialized routing buffer to "expand" the (L, d) output gradients to (L Γ K, d) routed gradient tokens before backpropagation through the expert MLPs. MoEBlaze's backward pass must achieve the same gradient routing without these intermediate buffers, using only the index structures built during forward.
The backward pass operates in three stages corresponding to the reverse of the forward operations:
1. Expert Summation Backward (gradient scattering). The output gradient tensor of shape (L, d) must be distributed back to the individual expert outputs so that each expert can compute gradients with respect to its weights. In conventional systems, this is done by "expanding" the gradient: for each token i with K assigned experts, the gradient βy_i is duplicated K times into the (L Γ K, d) routed gradient buffer, then each copy is routed to its corresponding expert. MoEBlaze avoids this materialized expansion by using the token-to-expert mapping derived from the dispatch metadata. The (L, d) gradient tensor is scattered directly to the corresponding positions in the intermediate MLP result buffer β each expert receives the gradient contributions for exactly the tokens it processed, written to the same positions where the expert's output resides. This is a direct indexed scatter: for token i assigned to expert e at position p in the expert's output buffer, the gradient βy_i is written to position p of expert e's gradient buffer.
2. Expert Computation Backward (weight gradients). With the output gradients placed at the correct positions in each expert's output buffer, the backward pass through the MLP proceeds conventionally β computing weight gradients βW1 and βW2 β except that it uses the single checkpointed intermediate result buffered during forward (the output of the first MLP). This is the one activation that MoEBlaze explicitly stores for the backward pass; for complex activations like SwiGLU, the pointwise intermediate (SiLU output) is recomputed on-the-fly rather than read from a stored buffer (Section 5). The index structures are not needed during this stage β the expert computation backward is self-contained once the gradients are scattered to the correct positions.
3. Token Gradient Accumulation (on-the-fly reduction). The final step produces the (L, d) gradient tensor for the input activations by summing the gradient contributions from all K experts each token was routed to. Each expert computes βx_e β the gradient of its output with respect to the input tokens it processed β but these gradients are in per-expert order (shape (L_e, d)). They must be accumulated into the original (L, d) tensor at the correct token positions. In conventional systems, the per-expert input gradients are first expanded to (L Γ K, d) token order (requiring the routing buffer to map expert-order back to token-order), then summed. MoEBlaze instead performs this accumulation using on-the-fly reductions guided by the token-expert index structure. For each token i, the system looks up which K experts processed it (from token_expert_indices[i]) and where in each expert's gradient buffer the result resides (from token_index_map[i]), then gathers and sums these contributions directly into position i of the output gradient tensor. No intermediate (L Γ K, d) expansion buffer is allocated.
The backward pass thus mirrors the forward pass in its elimination strategy: where conventional systems expand-contract through materialized buffers at the routing granularity, MoEBlaze uses the same index structures built once during forward dispatch to perform direct, position-aware scatter and gather operations. The index structures effectively serve as a sparse mapping function that replaces dense buffer copies β each (L, d) gradient element is routed to exactly K expert gradient positions, and each expert gradient element is accumulated to exactly one token gradient position, with the routing decisions encoded in the integer arrays rather than materialized in floating-point buffers.
Dispatch Data Structures: Specification and Roles
The four data structures (illustrated in Figure 2 for a toy example with L=6, E=4, K=2) form the backbone of the memory-efficient routing scheme. Each serves a specific role in enabling on-the-fly access without materialized buffers, and their sizes are deliberately kept to the minimum needed β storing integer indices, not activation values.
expert_token_indices: A 1D tensor of length L Γ K storing the token IDs assigned to each expert, concatenated across all experts in order of expert ID. Formally, this is the concatenation of per-expert token lists: expert_token_indices = [tokens_assigned_to_expert_0, tokens_assigned_to_expert_1, ..., tokens_assigned_to_expert_{E-1}]. Its length is always exactly L Γ K because in token-choice routing with K selected experts per token and dropless routing, every token appears exactly K times across all experts' assignment lists. This array is the fundamental structure for experts to retrieve their designated input tokens β for expert i, its assigned tokens are the slice expert_token_indices[expert_token_offsets[i] : expert_token_offsets[i+1]]. Critically, this array stores only integer token IDs (4 bytes each), not the d-dimensional token vectors, so its total size is L Γ K Γ 4 bytes β approximately 32 MB for the DeepSeek-scale example with L β 2M and K = 4.
expert_token_offsets: An array of length E + 1 storing the exclusive prefix sums of token counts per expert. For expert i, expert_token_offsets[i] is the starting position in expert_token_indices where expert i's assigned tokens begin, and expert_token_offsets[i+1] is the position immediately after expert i's last assigned token. The value expert_token_offsets[i+1] - expert_token_offsets[i] gives the number of tokens routed to expert i. This array is constructed by first computing expert_lengths[i] (the count of tokens assigned to expert i) and then applying a prefix sum. Its size is negligible: (E + 1) Γ 4 bytes, typically a few hundred bytes since E is on the order of tens to hundreds.
token_expert_indices: A 1D tensor of length L Γ K storing the expert IDs assigned to each token, ordered by token ID. Formally, for token i, its K assigned expert IDs are stored contiguously starting at position i Γ K. This is the inverse mapping of expert_token_indices β while expert_token_indices answers "which tokens go to expert e?" (grouped by expert), token_expert_indices answers "which experts is token i routed to?" (grouped by token). This array is needed for coalesced indexing into the intermediate materialized results between the two MLPs during expert computation, where the system needs to efficiently gather the K outputs for each token from the per-expert output buffers. Its size is L Γ K Γ 4 bytes, identical to expert_token_indices.
token_index_map: A 1D tensor of length L Γ K storing each token's position within the expert_token_indices array, logically grouped by the original token ID i β [0, L-1]. For token i assigned to K experts, token_index_map[i Γ K : (i+1) Γ K] contains the K positions in expert_token_indices where token i appears. For example, if token 0 is assigned to experts 2 and 3, and appears at positions 5 and 7 in expert_token_indices, then token_index_map[0:2] = [5, 7]. This array is essential for the final output aggregation step: when gathering the K expert outputs for token i from the intermediate buffer, the system uses token_index_map[i Γ K : (i+1) Γ K] to efficiently locate those outputs without any search or scanning. Its size is L Γ K Γ 4 bytes.
The four structures together require 4 Γ L Γ K Γ 4 bytes = 16 Γ (L Γ K) bytes of storage (plus the negligible E+1 offsets). Comparing this to the 94 GB routing buffer from the DeepSeek example in Section 2.1: the index structures consume approximately 16 Γ 2,000,000 Γ 4 = 128 MB versus 94,000 MB for the activation buffer β a ratio of roughly 735:1. This ratio is what makes the memory savings possible: the system is storing routing decisions (integers) rather than routing data (full d-dimensional activation vectors), and using those decisions to access the data in-place rather than copying it.
Dispatch Data Structure Construction: The Atomic-Free Three-Step Algorithm
Building the four index structures efficiently on a GPU is the implementation challenge that Section 4.2 addresses. The difficulty arises from the many-to-one mapping inherent in expert assignment: multiple tokens can be assigned to the same expert, so naively writing token IDs into per-expert lists would create thread-level write contention β multiple GPU threads attempting to write to the same memory location simultaneously, requiring expensive atomic operations that serialize execution and destroy parallelism.
The paper explicitly critiques the sorting-based alternative used in prior systems before presenting its own approach. The sorting method flattens all L Γ K routing decisions into a 1D array of (expert_id, token_id) tuples, globally sorts by expert ID to group tokens by their assigned expert, then recovers indices and computes per-expert ranges from the sorted order. While conceptually simple, this has severe GPU performance consequences: multi-pass radix sort requires "several global-memory passes proportional to key width," forcing O(L Γ K) data to be read and written multiple times through the memory hierarchy. For L β 2M and K = 4, this means moving 8 million elements through global memory multiple times per MoE layer per training step, and the multi-kernel pipeline (sort, segmented scan, index recovery) incurs high kernel launch latencies between each stage.
MoEBlaze replaces this with a three-step process where each step is designed to be atomic-free β no thread ever contends with another for a write location β and parallelizable β the work is distributed across a GPU grid such that each thread block (CTA) operates independently on a disjoint portion of the data. The three steps are:
Step 1: Build Dense Token-Expert Map. The system allocates a dense 2D bitmap dense_token_map of shape (L, E), where dense_token_map[i, e] = i if token i is assigned to expert e (one of its Top-K choices), and is unset (zero) otherwise. Since each token selects exactly K unique experts, each row i has exactly K non-zero entries.
The construction is highly parallel: the kernel launches with a CTA grid, and each warp is assigned a disjoint tile of token rows i. For each token, the warp loads its K selected expert IDs {e_{i,0}, ..., e_{i,K-1}} from the gating output, and for each expert e_{i,k}, writes token ID i to dense_token_map[i, e_{i,k}]. There is guaranteed no intra-warp collision because expert IDs per token are unique β a single token cannot be assigned to the same expert twice β so no two threads within a warp write to the same (i, e) cell. This eliminates the need for atomic writes within warps. Cross-warp collisions are avoided by the disjoint tile assignment: different warps handle different token rows i, so they never write to the same row.
The dense_token_map is a sparse structure in column-major terms: each column e contains L_e non-zero entries (the tokens assigned to expert e), and the total number of non-zero entries across all columns is exactly L Γ K. The dense allocation L Γ E may seem wasteful, but E (number of experts) is typically modest (tens to low hundreds) compared to L (millions), and the bitmap's sparsity is essential for the GPU-parallel length computation in Step 2.
Step 2: Compute Expert Lengths and Offsets. Using the constructed dense_token_map, the system now computes how many tokens are assigned to each expert. A custom kernel launches with the CTA grid mapped across the columns (experts) of dense_token_map β each CTA is dedicated to a single expert e_i and processes its entire column of length L, counting the non-zero entries (which represent token-to-expert assignments).
The counting uses warp-level reductions within each CTA: threads cooperatively load contiguous chunks of column e_i, identify non-zero entries, and perform an efficient warp-level sum reduction to aggregate the per-warp counts. The final CTA-level reduction produces expert_lengths[e_i] β the number of tokens routed to expert e_i.
Once all expert lengths are computed, the expert_offsets array is derived by applying an exclusive prefix sum over expert_lengths:
expert_offsets[0] = 0
expert_offsets[i] = expert_offsets[i-1] + expert_lengths[i-1] for i = 1, ..., E
This prefix sum is performed outside the counting kernel (likely via a library call like torch.cumsum or a custom scan kernel). The final entry expert_offsets[E] equals L Γ K, the total number of expert-token assignments, providing a consistency check.
Step 3: Route Indices to Gates (with location map). This is the most algorithmically sophisticated step. The goal is to produce the compact, concatenated expert_token_indices array β taking the non-zero entries from dense_token_map (each representing an assignment of token i to expert e) and writing them to their correct positions in the 1D output array, grouped by expert.
The challenge is determining where in expert_token_indices each non-zero entry belongs, without resorting to atomic counters. The solution is a two-phase process centered on a location map β an array of the same shape as dense_token_map that stores, for each non-zero entry, its destination position-ID within expert_token_indices.
The construction of the location map uses a two-step strategy to ensure atomic-free operation:
(i) Tile-level scan. One CTA is launched per expert (matching Step 2's column mapping). Within the CTA, threads process contiguous tokens assigned to that expert in dense_token_map. They first compute tile-level counts β for each tile of tokens within the CTA's assigned range, how many non-zero entries (token assignments) exist β within shared memory. This produces a local count per tile. The CTA then performs an exclusive scan (prefix sum) locally inside the CTA over these tile-level counts, producing the offset of each tile's entries within the expert-local output range.
(ii) Add global expert offsets. The resulting CTA-local exclusive scan counts (which give positions relative to the start of expert e_i's segment) are then added to the expert's pre-computed global offset expert_offsets[e_i]. This produces the correct, final position-ID in the global expert_token_indices array. For example, if expert 2 has global offset 100 (meaning the first 100 positions belong to experts 0 and 1), and a tile within expert 2's column has a local exclusive scan count of 15, then the first token in that tile writes to position 100 + 15 = 115 in expert_token_indices.
Once the location map is fully populated, a final parallel kernel reads each non-zero entry from dense_token_map (the token ID) and writes it directly to its calculated position in expert_token_indices. Since every non-zero entry now has a unique, pre-computed destination position, there are no write conflicts β this final write is entirely atomic-free and fully parallel. The token_expert_indices and token_index_map structures can be derived during or after this process using similar parallel mapping techniques (the paper does not elaborate on their exact construction but implies analogous parallel gather-scatter operations).
The three-step process replaces a O(L log L) multi-pass global sort (with multiple kernel launches and global memory round-trips) with a O(L) single-pass construction pipeline that minimizes global memory accesses and launches only the necessary kernels with clear data dependencies. Each step is designed to map cleanly to the GPU's SIMT execution model: Step 1 uses warp-level parallelism with guaranteed collision-free writes, Step 2 uses CTA-level warp reductions over contiguous memory, and Step 3 uses tile-level prefix scans within shared memory to compute write positions locally before combining with pre-computed global offsets.
Fused SwiGLU Kernel with Activation Checkpoint
Section 5 addresses the second major source of activation memory: the intermediate tensors required by complex activation functions during expert FFN computation. The paper uses SwiGLU as the running example because it is the most memory-intensive activation in common use, requiring two separate projections plus multiple pointwise intermediates.
The SwiGLU memory pathology. The SwiGLU activation (Shazeer, 2020) is defined as:
where and $\sigma$ is the sigmoid function $\sigma(u) = 1 / (1 + e^{-u})$.
In a conventional implementation, the forward pass materializes five intermediate tensors for each expert:
$a = x W_1 \in \mathbb{R}^{L_i \times h}$β the first projection output$b = x W_2 \in \mathbb{R}^{L_i \times h}$β the second projection output$\sigma(a) \in \mathbb{R}^{L_i \times h}$β the sigmoid of the first projection$\text{SiLU}(a) = a \odot \sigma(a) \in \mathbb{R}^{L_i \times h}$β the gated activation- The final product
$\text{SiLU}(a) \odot b \in \mathbb{R}^{L_i \times h}$β the SwiGLU output
Aggregated across all E experts, these intermediates consume O(L Γ h) memory for each tensor β and since h is typically 4 Γ d (e.g., 24,576 for d = 6,144), this is a massive footprint. The paper's example calculates the intermediate activation for SwiGLU-style FFN as approximately 98 GB for a single layer at DeepSeek scale, and this number effectively doubles compared to a simple ReLU MLP because of the dual-projection gating path.
The key observation: memory-bandwidth-bound pointwise operations. The paper's optimization is grounded in a specific characterization of GPU workload behavior (Section 5.2):
"Computation of activation functions is generally memory bandwidth bound on modern GPUs due to two primary reasons: 1) activation function's computation is mostly point-wise operations and modern GPU is highly capable of such operations, 2) in LLM training, we are usually handling the case where the number of tokens is far larger than the embedding dimension
L β« d. Operations on matrices of this tall-and-skinny shape are generally memory bandwidth bound on GPUs."
This analysis is critical for understanding why the proposed approach works. A memory-bandwidth-bound operation is one where the time to read inputs from and write outputs to global memory dominates the time spent on arithmetic. For pointwise operations like SiLU (a multiply and a sigmoid per element), the arithmetic intensity β FLOPs per byte of memory traffic β is extremely low. On an H100 with ~50 TFLOPS of FP16 compute and ~3 TB/s of HBM bandwidth, a pure pointwise kernel can saturate the memory bandwidth with a tiny fraction of the available compute. This means that reading stored SiLU activations from memory during backward (a memory-bound operation) and recomputing SiLU from the checkpointed a tensor (also memory-bound, plus the trivial compute) have similar latency β the recomputation is essentially free in the bandwidth-dominated regime.
Based on this insight, the paper proposes a joint optimization with two components:
1. Epilogue fusion (single-kernel forward). The two first-layer projections $W_1$ and $W_2$ and the entire SwiGLU epilogue are fused into a single GPU kernel. The kernel operates as follows:
- Load the input tokens
xonce from global memory (rather than twice, as would be needed by two separate GEMM kernels forW1andW2). - Stream
xthrough bothW1andW2GEMMs simultaneously, producingaandbin registers or shared memory (not written to global memory). - Compute
SiLU(a) = a Β· Ο(a)in-register or in shared memory β the sigmoid and multiply are pointwise operations. - Immediately perform the element-wise multiplication
SiLU(a) β b, writing only the final gated output to global memory.
This eliminates the global writes of a, b, Ο(a), and the individual SiLU(a) tensor β four (L_i Γ h)-sized write operations per expert are reduced to one. It also halves the input reads of x compared to two separate GEMM kernels (each of which would read x independently). The kernel effectively moves computation from the memory-bound domain (where separate pointwise kernels read from and write to global memory) to the compute-bound domain (where data stays in registers or shared memory within a single kernel invocation).
2. Activation checkpoint for SiLU (recomputation during backward). During the forward pass, the kernel does not save the SiLU intermediate result. Instead, it stores only the raw projection output a (needed for both the weight gradient computation and the SiLU recomputation) and the gating-projection output b (needed for the element-wise product gradient). During the backward pass, when the gradient with respect to a is needed:
the system recomputes SiLU(a) from the stored a tensor. The derivative βSiLU(a) is:
which requires only the sigmoid of a and elementary multiplications β all pointwise, all memory-bandwidth-bound. The recomputation is therefore fast: reading a from memory and applying pointwise operations is comparable in latency to reading a pre-computed SiLU(a) from memory, but saves L Γ h Γ 2 bytes of storage (another ~98 GB in the DeepSeek example).
The fused backward kernel (in-place gradient aggregation). The backward pass for the fused kernel must compute gradients with respect to W1, W2, and the input x. Because both projections shared the same input x during forward, the gradients from both paths must be aggregated:
Rather than allocating two separate activation buffers for βa and βb and stitching them with a separate kernel, the implementation computes the two branches' activation derivatives in a fused fashion and aggregates gradients in-place via tiled reductions β completely eliminating temporary global buffers for the per-branch input gradients.
Putting it together: Algorithm 1 (end-to-end SwiGLU MoE training). The paper's Algorithm 1 specifies the complete forward and backward procedures for a single MoE layer with SwiGLU activation, integrating the fused kernel and activation checkpoint. The forward pass (lines 2-13) loads input tokens once, computes the fused SwiGLU projecting both W1 and W2, produces the gated output Y_swi entirely in-kernel, applies the second MLP projection W3, and stores only A (the first projection output), B (the second projection output), and Y_swi (the gated output) for the backward pass. The backward pass (lines 15-31) computes βW3 conventionally from stored Y_swi, recomputes SiLU(A) from stored A (line 24) to save memory, computes βA and βB using the recomputed SiLU, and fuses the computation of βW1, βW2, and βX such that the shared input gradient is aggregated in-place.
Why These Design Choices: A Synthesis
The paper's technical approach is built on three interdependent design principles, each justified by specific hardware characteristics of modern GPUs (particularly the H100):
1. Index-based routing over buffer-based routing (Sections 3-4). This is the right choice because the memory cost of activation buffers (L Γ K Γ d Γ 2 bytes) vastly exceeds the memory cost of index arrays (L Γ K Γ 4 bytes), with a ratio proportional to d (the model dimension, typically thousands) β hence the ~750Γ reduction. The trade-off is that every token access during expert computation now requires an indirect memory read (load index, compute address, load activation), introducing pointer-chasing overhead. The paper manages this by structuring the index arrays for coalesced access (consecutive tokens for the same expert are stored contiguously in expert_token_indices, enabling contiguous memory reads during expert computation) and by fusing index lookups with computation to overlap memory latency with arithmetic.
2. Atomic-free parallel construction over global sorting (Section 4.2). The three-step bitmap-based construction is the right choice because global sorting requires O(LK log(LK)) element movements through global memory in multiple passes with intervening kernel launches, while the bitmap approach requires O(LK) accesses in a fixed small number of kernel launches. The trade-off is the L Γ E dense bitmap allocation, but since E βͺ L (typical E is 8-256, while L is in millions), this is a modest constant-factor overhead that is dominated by the L Γ d activation tensors. The paper's framing of this as an "atomic-free" design is crucial: GPU atomic operations serialize conflicting writes, and in the token dispatch case where popular experts might receive thousands of tokens, atomic contention would be catastrophic for throughput. By computing all write positions upfront (via the location map's tile-level scan), the algorithm converts potentially contentious writes into guaranteed conflict-free writes.
3. Recomputation of memory-bandwidth-bound pointwise operations over storage (Section 5). This is the right choice because on modern GPUs, the time to read a stored activation from HBM and the time to read its input and recompute it are comparable β both are dominated by the memory bandwidth of reading the input tensor (the arithmetic is negligible). The trade-off is that recomputation consumes compute cycles that could theoretically be used for other operations, but since the pointwise activations are memory-bandwidth-bound, those compute cycles would otherwise be idle waiting for memory β recomputation is effectively using otherwise-idle arithmetic units. If the activation function were compute-bound (high FLOPs per byte), this trade-off would flip and storage would be preferable. The paper's characterization of pointwise operations on tall-and-skinny tensors (L β« d) as memory-bandwidth-bound is correct, and the choice follows directly from that characterization.
Together, these three design principles reduce activation memory (enabling larger batch sizes and sequence lengths), improve throughput (by reducing global memory traffic and eliminating multi-pass sorting overhead), and do so without compromising model quality (no token dropping, no padding, exact mathematical equivalence with conventional implementations).
4. Key Insights and Innovations
Innovation 1: Activation Buffers Are Not Inevitable β Indexing Replaces Copying in MoE Dispatch
The dominant mental model for MoE token routing across all prior systems β from GShard (Lepikhin et al., 2021) through MegaBlocks (Gale et al., 2023) to TurboMoE (Aminabadi et al., 2025) β treats the physical compaction of tokens into per-expert buffers as a necessary prerequisite for expert computation. The reasoning is straightforward: experts need their input tokens arranged contiguously in memory for efficient GEMM execution, so a gather-copy into per-expert buffers precedes computation, and a scatter back to token order follows it. The resulting L Γ K Γ d activation buffer is treated as a fixed cost of the architecture β something to be optimized (e.g., through block-sparse representations in MegaBlocks) or capped (through token dropping in Switch Transformers), but never eliminated.
MoEBlaze's core conceptual move is recognizing that this buffer is not a logical necessity but an implementation artifact of how we've chosen to couple token routing with computation. The paper reframes the problem: the information needed during expert computation is not "a copy of each token at its expert's location" but "which tokens to read from where." The distinction is subtle but fundamental. A materialized buffer pre-resolves both the identity of the tokens (which ones?) and their data (what are their values?) into a single allocation. MoEBlaze separates these: lightweight integer index arrays encode the routing decisions (the sparse mapping from experts to token positions and back), while the token activations remain in-place in the original (L, d) tensor and are accessed on-demand via indexed gathers.
This separation is not an optimization of the existing dispatch paradigm β it is a rejection of the paradigm itself. Prior work asked "how can we make the routing buffer smaller or manage it more efficiently?" (capacity factors, block-sparse representations, fused metadata kernels). MoEBlaze asks "do we need a routing buffer at all?" and answers no.
The significance extends beyond the immediate memory savings. By decoupling routing information (integers) from token data (floating-point tensors), MoEBlaze reveals that the memory cost of dispatch is architecturally disproportionate: the routing buffer scales as L Γ K Γ d while the actual routing information it encodes is only O(L Γ K) β a factor of d bloat (typically thousands). The paper's quantitative illustration makes this concrete: ~94 GB for the routing buffer versus ~128 MB for the index structures in a DeepSeek-scale configuration. This is not an incremental improvement over, say, MegaBlocks' block-sparse compression (which still materializes routed tokens, just without padding); it is a qualitatively different representation β storing what to read rather than what was copied.
The evidence anchoring this claim is the consistent >50% activation memory reduction across all tested configurations (Figures 3 and 5), with the largest gains in configurations with large d and K (e.g., conf4 achieves 3.6Γ reduction, from 22,000 MB to 6,100 MB). The pattern matches the theory: savings proportional to d and K because those are the dimensions that inflate the routing buffer relative to the index arrays.
A subtle consequence of this framing is that it redefines the system bottleneck. Before MoEBlaze, one might have said "MoE dispatch is memory-intensive because we need to reorder millions of token vectors." After MoEBlaze, the accurate statement is "conventional MoE dispatch is memory-intensive because we copy token vectors we could instead index." The bottleneck was in the implementation strategy, not in the problem structure β and recognizing that distinction is the intellectual contribution that the index-based routing mechanism instantiates.
Innovation 2: The Atomic-Free Bitmap Construction Reframes Dispatch as a Fixed-Pattern Scatter Rather Than a Dynamic Sort
Prior GPU implementations of dropless token dispatch (including those in MegaBlocks and TurboMoE) rely on sorting-based approaches to build per-expert token lists. The procedure conceptually flattens all L Γ K routing decisions into tuples, globally sorts by expert ID, and recovers indices from the sorted order. This is the natural algorithmic reflex: grouping tokens by expert is a sorting problem, and GPUs have well-optimized radix sort primitives.
MoEBlaze's distinctive move is recognizing that token-choice MoE routing has a structural property that makes sorting unnecessary: the gating network's Top-K decisions already provide a complete, deterministic assignment of each token to exactly K experts, with no overlaps, no dynamic load balancing within a step, and no collisions (a token's K chosen experts are unique). The paper exploits this to reframe dispatch construction from "sort tokens by expert" to "place each token at its precomputable position in the per-expert output array." This transforms what is traditionally an O(LK log(LK)) multi-pass global sort into an O(LK) process involving a dense bitmap, parallel prefix sums, and a single guaranteed-conflict-free scatter.
The intellectual leap here is not the specific three-step algorithm but the recognition that the write positions can be computed statically β before any token is placed β using nothing more than the expert counts and local prefix scans within each expert's tile. Once every (token, expert) pair has a pre-assigned destination position, the actual token ID placement becomes an embarrassingly parallel write with zero contention. No atomic operations are needed because no two tokens compete for the same destination β the position assignment guarantees uniqueness.
This is fundamentally different from the sorting paradigm. Sorting is a comparative operation: elements are ordered relative to each other based on their keys, and positions emerge from the global ordering. MoEBlaze's bitmap approach is a positional operation: each element's destination is computed from its expert's cumulative count plus its local offset within that expert. The former requires global coordination (all elements must be compared to establish order); the latter requires only local coordination within each expert's tile (the tile-level scan), with global offsets pre-computed from the expert length prefix sums.
Why this matters beyond the specific kernel implementation: it changes how one thinks about GPU dispatch construction. The field could have continued optimizing sorting-based dispatch (better radix sort implementations, hierarchical sorting, sort-fusion with subsequent kernels) and achieved incremental improvements. MoEBlaze's approach suggests that sorting was the wrong primitive for this specific problem all along β the structure of token-choice routing makes it a scatter problem, not a sort problem, and recognizing that unlocks a qualitatively different complexity class (linear vs. linearithmic in LK, single-pass vs. multi-pass memory access).
The evidence for the practical impact appears in the training speedups (Figures 4 and 6), where dispatch overhead is one of the three factors credited for the 1.4Γ to 6.2Γ speedups. However, the paper does not provide an isolated ablation of dispatch construction time versus sorting-based alternatives, so the precise contribution of this innovation to overall speedup cannot be disentangled from the fused kernel and reduced memory traffic benefits. This is a limitation of the experimental presentation: the atomic-free construction is a genuine algorithmic innovation, but its standalone performance advantage over optimized GPU sort is asserted rather than measured.
Innovation 3: The Memory-Bandwidth Characterization of Pointwise Activations Justifies Recomputation as a Throughput Win, Not Just a Memory Win
Activation checkpointing β trading recomputation for memory savings β is a well-established technique in deep learning training (e.g., gradient checkpointing in Chen et al., 2016). The standard framing is that recomputation is a necessary evil: you accept additional compute to stay within a memory budget when activations would otherwise overflow device memory. The implicit assumption is that recomputation reduces throughput by adding FLOPs; the only question is whether the memory savings justify the slowdown.
MoEBlaze's insight regarding SwiGLU activation checkpointing challenges this assumption for a specific, important class of operations. The paper argues β through its characterization of pointwise activation functions on tall-and-skinny tensors as memory-bandwidth-bound β that recomputing SiLU during backward can actually improve throughput compared to the conventional store-and-reload pattern, even before accounting for the memory savings.
The reasoning is a direct application of the roofline model (Williams et al., 2009, cited in the paper's introduction): on modern GPUs like the H100, pointwise operations like SiLU have arithmetic intensity so low (fractional FLOPs per byte) that they lie deep in the memory-bandwidth-bound region of the roofline. The time to execute SiLU is dominated entirely by the time to read its input and write its output to HBM. The arithmetic (one sigmoid, one multiply) is negligible.
Given this characterization, consider the two alternatives for providing the SiLU activation to the backward pass:
(A) Store during forward, load during backward: The forward pass computes SiLU(a), writes the result to HBM (memory bandwidth cost: one write of L Γ h elements). The backward pass reads it from HBM (memory bandwidth cost: one read). Total: two HBM accesses (one write, one read) plus the forward compute.
(B) Recompute during backward: The forward pass writes nothing beyond a (already stored for the weight gradient computation). The backward pass reads a from HBM (memory bandwidth cost: one read) and recomputes SiLU(a) from it. Total: one HBM access (one read) plus the backward compute.
Option (B) has half the HBM traffic of Option (A) β one read versus one write plus one read. Since SiLU's compute is negligible relative to the memory bandwidth cost of either access pattern, Option (B) is faster because it spends less time waiting for memory. The recomputation FLOPs are effectively free β they execute while the memory subsystem would otherwise be idle, or they execute fast enough that the net wall-clock time is dominated by the remaining memory traffic.
This is not standard activation checkpointing. Standard checkpointing accepts a slowdown to save memory. MoEBlaze's SiLU recomputation is claiming a speedup and memory savings simultaneously because the conventional alternative (store-and-reload) is the slower option on the hardware's roofline. The memory bandwidth is the bottleneck, not the compute, so eliminating memory traffic improves throughput even though FLOPs increase slightly.
The innovation here is not the specific kernel implementation (fused epilogue, in-register computation, etc.) but the analytical framework that identifies when recomputation is a win-win rather than a tradeoff. The paper implicitly provides a criterion: if an operation is memory-bandwidth-bound (low arithmetic intensity, tall-and-skinny tensor shapes where L β« d), and if its input is already being stored for other purposes (so recomputation incurs no additional memory reads), then recomputation can be strictly superior to storage. This framework generalizes beyond SiLU to any pointwise activation with these characteristics, and it provides guidance for future system design: profile the arithmetic intensity of intermediate computations, and recompute those in the memory-bandwidth-bound regime rather than trading compute for memory.
The evidence for this claim appears in the SwiGLU speedup results (Figure 6) compared to ReLU (Figure 4). Under ReLU, MoEBlaze's speedups range from 1.4Γ to 3.7Γ. Under SwiGLU, speedups range from 2Γ to 6.2Γ β consistently higher and with a larger maximum. The paper attributes this gap specifically to the fused activation kernel and recomputation: "The increased relative speed is a result of...memory-bandwidth savings from our activation optimization are more critical in the SwiGLU case, where intermediate activation sizes are larger." The higher speedups for the more memory-intensive activation function support the claim that recomputation is throughput-favorable, not just memory-favorable. However, the paper does not provide an ablation comparing SwiGLU training with and without SiLU recomputation under otherwise identical dispatch optimizations, so the precise contribution of recomputation versus epilogue fusion (which eliminates intermediate writes even without checkpointing) cannot be isolated from these aggregate results.
Innovation 4: Memory-Efficient Dispatch and Kernel Fusion Are Complementary, Not Independent β The Index Structures Enable the Fused Kernel
The paper's presentation separates the token dispatch optimization (Sections 3-4) from the kernel fusion and checkpointing (Section 5) as distinct contributions, but the deeper insight is that they are architecturally interdependent: the elimination of per-expert activation buffers via index-based routing is what makes the fused SwiGLU kernel both possible and effective.
Consider the challenge of fusing the two first-layer projections in SwiGLU with the activation epilogue. In a conventional MoE implementation, the input to the expert MLP is the per-expert buffer β a contiguous slice of reordered tokens. Fusing the dual projections with SiLU onto this buffer is straightforward: load the expert's token slice once, stream through W1 and W2, compute the epilogue in-register, write the output. This is a standard kernel fusion optimization that could be applied to any system that has per-expert buffers.
But now consider what happens during the backward pass. The gradient with respect to the input tokens βx must be accumulated from all K experts each token was routed to. In a conventional system with per-expert buffers, this requires the expansion/scatter step that MoEBlaze eliminates β gradients must be routed from expert order back to token order. The fused kernel doesn't help with this step; in fact, it might complicate it by eliminating intermediate tensors that the routing logic conventionally relies on for gradient propagation.
MoEBlaze's index-based dispatch resolves this tension. Because the system already maintains the expert-to-token and token-to-expert mappings as lightweight integer arrays (built once during forward dispatch), the fused kernel's backward pass can use these same structures to scatter gradients to expert output positions and accumulate input gradients without any materialized routing buffers. The index structures serve as the universal routing fabric that both the forward on-the-fly gathers and the backward scatter-accumulate depend on.
The innovation is the recognition that these two optimizations β eliminating dispatch buffers and fusing activation computation β are not independent levers to be pulled separately, but form a coherent system where each enables the other to achieve its full benefit. Eliminating dispatch buffers without kernel fusion would still leave the per-expert intermediate activations consuming memory. Applying kernel fusion without eliminating dispatch buffers would accelerate the expert computation but leave the routing buffer untouched. Together, they eliminate both major sources of activation memory (routing and FFN intermediates) and share a common indexing infrastructure that makes both forward gathers and backward scatters efficient without materialized buffers.
This interdependence is implicit in the paper's architecture (Figure 1, right panel, showing a unified flow from input through index-guided computation to output) and explicit in the end-to-end training algorithm (Algorithm 1, which integrates the fused forward and backward passes using the memory-efficient token dispatch from Section 3). However, the paper's contribution structure (separate sections for dispatch and kernel design) somewhat obscures this architectural synergy. The deeper contribution is the co-design methodology: not optimizing dispatch and computation independently, but designing them together around shared index structures that eliminate the memory wall at both stages simultaneously.
Evidence for the complementarity appears in the differential speedup patterns. The paper reports speedups of 1.4Γ to 3.7Γ for ReLU (Figure 4) and 2Γ to 6.2Γ for SwiGLU (Figure 6). Under ReLU β which lacks the dual-projection gating path and thus benefits primarily from the dispatch optimization and basic kernel fusion β the speedups are substantial but lower. Under SwiGLU β which benefits from both the dispatch optimization and the activation-specific epilogue fusion plus recomputation β the speedups are systematically higher. This differential is consistent with the hypothesis that dispatch and activation optimizations are complementary: SwiGLU's larger intermediate activation footprint means it benefits disproportionately from the full co-designed stack, while ReLU (which has simpler activations and thus less to gain from activation-specific fusion) shows the dispatch optimization's standalone benefit.
Innovation 5: The Reframing of MoE Memory Pressure as an Indexing Problem Rather Than a Capacity Problem
Prior work on MoE memory efficiency has predominantly framed the challenge as a capacity management problem: how to fit variable numbers of tokens into fixed-size buffers without dropping important tokens or wasting memory on padding. This framing is visible in the evolution from Switch Transformers' capacity factors (C β Ξ³ Γ B Γ K / E, where Ξ³ tunes the tradeoff between memory and quality) to MegaBlocks' block-sparse representation (which eliminates padding waste but still allocates capacity in fixed-size blocks) to TurboMoE's metadata-driven approach (which optimizes the buffer management but doesn't eliminate the buffers).
MoEBlaze reframes the problem entirely. It is not about managing how much activation memory to allocate for routing buffers β it is about recognizing that routing is fundamentally an indexing operation, not a storage operation. The question isn't "how much buffer capacity do we need to hold the routed tokens?" but "how do we efficiently map from token space to expert space and back without copying token data?"
This reframing has implications that extend beyond the specific implementation. If routing is an indexing problem, then the system's job is to build and maintain efficient mappings β which cost O(L Γ K) integer storage β rather than to allocate and manage activation buffers β which cost O(L Γ K Γ d) floating-point storage. The factor of d (model dimension) between these two costs is what makes the reframing powerful: as models scale to larger hidden dimensions (a trend visible from GPT-3's d = 12,288 to DeepSeek-V3's d = 6,144 per expert with larger total parameters), the gap between index-based and buffer-based dispatch widens proportionally. An optimization that saves a factor of d in memory is not an incremental improvement β it changes the asymptotic scaling of activation memory with model dimension.
This reframing also reveals why prior capacity-based approaches were attacking the wrong variable. Capacity factors and token dropping limit L_e (tokens per expert), which helps when expert imbalance causes some buffers to be much larger than others. But they don't address the fundamental scaling: even with perfect load balance (L_e = L Γ K / E for all experts), the total routing buffer size is still L Γ K Γ d, and this grows linearly with sequence length, batch size, active experts per token, and model dimension. MoEBlaze's index-based approach eliminates this term's dependence on d entirely β the index structures grow only with L Γ K, independent of model dimension. At d = 6,144 (DeepSeek scale), this is a 1,536Γ reduction in the memory cost of the dispatch metadata relative to buffer-based dispatch.
The evidence comes from the memory scaling patterns across configurations. In Figure 3 (SiLU activation), the absolute memory savings grow with configuration scale: conf1 (smallest: d = 512, K = 1) shows modest savings, while conf4 (largest: d = 2,048, K = 4) shows a 3.6Γ reduction. This scaling pattern is consistent with the indexing reframing: the savings are proportional to d Γ K because those are the terms that multiply the buffer size but not the index size. A capacity-based approach would show savings proportional to load imbalance, not proportional to d β the different scaling signature confirms that MoEBlaze is attacking a different term in the memory equation.
Note that the paper does not explicitly present this reframing as a theoretical contribution; it is implicit in the system design. The paper's stated contribution is the mechanism (index-based routing), but the intellectual contribution that will influence future work is the conceptual shift from "managing activation buffer capacity" to "eliminating activation buffers through indexing" β a shift that suggests a research agenda around sparse routing representations rather than sparse buffer compression.
5. Experimental Analysis
Evaluation Methodology
-
Dataset. The experiments use synthetic MoE layer configurations rather than a fixed benchmark dataset. The authors define seven representative configurations (
conf1throughconf7, detailed in Table 1) that sweep input hidden size (dfrom 512 to 2048), number of experts (Efrom 4 to 16), number of activated experts per token (Kfrom 1 to 4), batch size (Bfrom 16 to 32), and sequence length (Lfrom 512 to 2048). These configurations are chosen to "mimic common settings in large language models" (Section 6.1), though no specific model architecture (e.g., a complete DeepSeek or Mixtral layer with all surrounding components) is evaluated. The evaluation measures performance of a single MoE layer in isolation, not an end-to-end model training loop. -
Base model(s). There is no pretrained model being evaluated. The experiments measure the training throughput and memory consumption of a single synthetic MoE layer with configurable dimensions, expert counts, and activation functions. The layer structure follows standard token-choice MoE with a gating network, per-expert FFNs (two-layer MLPs with either ReLU or SwiGLU activation), and weighted output aggregation. The FFN hidden dimension is set to four times the input dimension (
ffn_hidden_size = 4 Γ d) across all configurations, following common practice in Transformer MLPs. -
Metrics. Two primary metrics are used. (1) Training Speed: measured as the speedup factor of MoEBlaze relative to the Megablocks baseline in an end-to-end single training pass (forward + backward). The training time explicitly excludes optimizer updates ("optimizer is irrelevant to both approach designs," Section 6.2). Higher values indicate better performance. (2) Activation Memory Consumption: "measured as the total memory allocated to save the intermediate activation tensors for given inputs" (Section 6.2). The measurement uses PyTorch's saved tensor hooks "to trace and calculate the exact activation space allocated during model training with the given input configuration." This captures only activation memory, not parameter memory, optimizer state, or other runtime allocations. Both metrics are measured on "a single NVIDIA H100 Tensor Core GPU" with PyTorch 2.0.1 and CUDA 12.1 (Section 6.1).
-
Baselines. The paper uses a single primary baseline: Megablocks (Gale et al., 2023), described as "a system that optimizes MoE training through custom kernels and efficient token dispatch, serving as the industry standard for high-performance sparse training" (Section 6.2). No other MoE training frameworks (e.g., FastMoE, Tutel, DeepSpeed-MoE, TurboMoE) are benchmarked. The paper does not explain why Megablocks was chosen over these alternatives as the sole comparison point, nor does it discuss whether Megablocks' block-sparse formulation is tuned equivalently to MoEBlaze's fused kernels for the H100 architecture. For the SwiGLU experiments, the baseline uses Megablocks' native SwiGLU implementation (with whatever kernel optimizations Megablocks provides); no details are given about whether Megablocks applies any activation checkpointing or fusion of its own.
-
Generation budget / compute accounting. The paper does not use a traditional "generation budget" concept (as would be appropriate for LLM inference benchmarks). Instead, compute is measured implicitly through end-to-end wall-clock time for a complete forward + backward pass of a single MoE layer. This is a practical throughput metric, but it conflates multiple factors: kernel execution time, memory access patterns, kernel launch overhead, and any host-device synchronization. The paper does not report FLOP counts, FLOP utilization, or memory bandwidth utilization β metrics that would help disentangle whether speedups come from reduced operation counts (e.g., fewer memory copies) or from better hardware utilization (e.g., higher SM occupancy, better memory coalescing). The speedup numbers should therefore be understood as end-to-end wall-clock improvements for the specific MoE layer forward+backward pass, not as fundamental algorithmic complexity improvements.
-
Cross-validation / statistical protocol. No cross-validation or statistical significance testing is reported. The experiments measure a single MoE layer's forward and backward pass on a single GPU; there is no training convergence, no multiple random seeds, and no variance reporting. The paper presents single-point measurements for each configuration. This is standard for systems benchmarking (where performance is deterministic given fixed inputs and hardware), but it means there is no characterization of measurement noise, run-to-run variance, or sensitivity to input data patterns. The paper also does not report whether the timing measurements are averaged over multiple runs or are single-shot. The memory measurements using PyTorch hooks are similarly single-point values β there is no analysis of peak vs. average memory or memory fragmentation.
Main Quantitative Results
Memory Efficiency with SiLU Activation
Figure 3 presents the activation memory comparison between MoEBlaze and Megablocks across configurations conf1 through conf7 using the SiLU activation function. The headline result is that MoEBlaze consistently reduces activation memory across all configurations, with the absolute savings growing with configuration scale.
The most dramatic reduction occurs at conf4 (the largest configuration by dimension: d = 2048, E = 16, K = 4, B = 32, L = 1024): MoEBlaze requires only 6,100 MB compared to Megablocks' 22,000 MB β a 3.6Γ reduction (the paper states "nearly 3.6Γ reduction" for this specific configuration). This represents an absolute savings of approximately 15,900 MB for a single MoE layer.
For the smallest configuration (conf1: d = 512, E = 4, K = 1, B = 32, L = 2048), the savings are visibly smaller in absolute terms (the bar chart shows both systems using relatively modest memory, with MoEBlaze lower but the gap is narrow). The paper explains: "the activation memory saving is less pronounced, which is expected since the savings scale proportionally with the sequence length L and the number of activated experts k, both of which are small in conf1 (k = 1)."
The exact memory values for each configuration are only visible from the bar chart, not provided as a table in the text. The paper does not report the numerical values for all seven configurations in prose β it highlights only conf4's 6,100 MB vs. 22,000 MB. For the remaining configurations, the reader must estimate from the Figure 3 bar heights. The memory savings are attributed to "(1) a more memory-efficient token dispatch mechanism that minimizes intermediate buffer allocations, and (2) the adoption of smart recomputation within our custom activation checkpoint scheme" (Section 6.3).
A notable pattern: configurations with larger d and K show proportionally larger savings, consistent with the paper's theory that the routing buffer (L Γ K Γ d) is the dominant memory consumer being eliminated. conf4 combines large d = 2048, large K = 4, and large L = 1024, maximizing all three multipliers of the routing buffer term β hence the largest absolute savings.
Training Speed with SiLU Activation
Figure 4 shows the training speedup of MoEBlaze relative to Megablocks across configurations conf1 through conf6 (note conf7 is not shown in this figure, which includes only six configurations compared to the seven in Table 1 β the paper does not explain this discrepancy). The speedups range from 1.4Γ to 3.7Γ.
The maximum speedup of 3.7Γ is achieved at conf4 (the same configuration that showed the largest memory reduction), which the paper interprets as "demonstrating that MoEBlaze scales particularly well with larger model dimensions." The exact speedup values for each configuration are visible only from the bar chart; the paper does not provide a numerical table.
The paper attributes these speedups to three factors (Section 6.4):
- "Highly optimized token dispatch implementation, which reduces the latency overheads associated with expensive token dispatch and permute operations"
- "Efficient data dispatch construction kernels, which is very light-weight and runs rapidly on GPUs, avoiding the expensive multiple-passes kernel in other sorting-based approaches and greatly eliminating the CPU-side bottlenecks"
- "The fused kernel for the batched-GEMM computations that effectively leverages H100's latest hardware acceleration features such as warp-group matrix multiplication, tensor memory accelerator, etc."
The third point is notable: it claims that MoEBlaze's GEMM kernels specifically exploit H100 hardware features. However, the paper provides no details about what specific H100 features are leveraged (e.g., whether the kernels use the Tensor Memory Accelerator β TMA β for asynchronous data movement, or whether warp-group MMA instructions are used differently than in Megablocks' kernels). This makes the claim difficult to evaluate.
The speedup trend across configurations is not strictly monotonic with model scale. While conf4 achieves the peak, other large configurations (e.g., conf3 with d = 1024, E = 16, K = 4) show lower speedups despite having the same K = 4 and similar expert counts. This suggests that speedup depends on a complex interaction of dimensions, batch size, and sequence length β not simply "bigger models benefit more."
Memory Efficiency with SwiGLU Activation
Figure 5 presents the activation memory comparison for the SwiGLU activation function across configurations conf1 through conf6 (again, conf7 is absent). The paper emphasizes that "SwiGLU activation function inherently requires higher memory usage due to the additional gating and element-wise multiplication operations" (Section 6.5), and the baseline Megablocks numbers confirm this: the absolute memory consumption for Megablocks is substantially higher under SwiGLU than under SiLU for comparable configurations.
MoEBlaze maintains a "substantial memory advantage" across all configurations. The standout result is conf3 ( d = 1024, E = 16, K = 4, B = 32, L = 2048): Megablocks requires over 40,000 MB, while MoEBlaze is "contained to approximately 10,000 MB" β a roughly 4Γ reduction. This is the largest absolute reduction reported in the paper: approximately 30,000 MB saved for a single MoE layer.
The paper attributes this to the fused SwiGLU kernel and SiLU recomputation: "This consistent 4Γ reduction in memory pressure confirms that our memory-efficient dispatch and smart recomputation schemes are highly effective even for more complex activation functions" (Section 6.5). The consistency claim is supported by the bar chart, which shows MoEBlaze's memory consumption being roughly half or less of Megablocks' across all configurations.
However, the paper does not provide a breakdown of how much of the memory reduction comes from the dispatch optimization (index structures vs. routing buffers) versus the activation checkpointing (SiLU recomputation vs. storage). Since both are active simultaneously, the individual contributions are confounded. The fact that SwiGLU memory reductions are proportionally larger than SiLU reductions (4Γ at conf3 vs. 3.6Γ at conf4 for SiLU, though these are different configurations) suggests the activation checkpointing provides substantial additional savings, but this cannot be quantified from the reported data.
Training Speed with SwiGLU Activation
Figure 6 shows the SwiGLU training speedups across configurations conf1 through conf6. The speedups range from 2Γ to 6.2Γ β notably higher and "more consistent" than the SiLU speedups (which ranged from 1.4Γ to 3.7Γ). The paper presents this as evidence that the activation-specific optimizations provide disproportionate benefits for more memory-intensive activation functions.
The peak speedup of 6.2Γ is the headline performance number of the paper. However, the paper does not specify which configuration achieves this maximum β Figure 6 is only described in aggregate ("ranging from 2Γ to 6.2Γ"), and the exact per-configuration values must be read from the bar chart.
The paper attributes the higher SwiGLU speedups to two factors (Section 6.6):
- "The more complex computation in SwiGLU exposes greater opportunities for MoEBlaze's highly fused kernels to outperform the baseline" β meaning the fused dual-projection + epilogue kernel achieves better speedup over Megablocks' presumably separate-kernel implementation for SwiGLU than it does for the simpler ReLU/SiLU case.
- "The memory-bandwidth savings from our activation optimization are more critical in the SwiGLU case, where intermediate activation sizes are larger and more compound, thereby reducing the excessive global memory accesses through smart kernel fusion and recomputation allows MoEBlaze to execute the whole kernel faster."
The second point is the paper's strongest empirical support for the claim that recomputation improves throughput (not just memory) for memory-bandwidth-bound activations. The logic: SwiGLU has larger intermediate activations than SiLU/ReLU β more memory bandwidth spent on reads/writes in the baseline β MoEBlaze's elimination of those accesses through fusion + recomputation yields larger speedup β the speedup increase from SiLU to SwiGLU demonstrates that memory bandwidth savings drive throughput gains.
However, an important caveat: the paper does not provide an ablation that isolates SiLU recomputation from epilogue fusion. The SwiGLU kernel fuses the two projections with the activation epilogue and applies checkpointing to SiLU. A system that fused the projections but stored SiLU (standard activation checkpointing disabled) would help distinguish whether the speedup comes primarily from the fusion (fewer kernel launches, single load of x) or from the recomputation (elimination of SiLU writes/reads). The paper's experimental design cannot disentangle these two mechanisms.
Cross-Configuration Patterns
Several patterns emerge from comparing results across configurations, though the paper does not systematically analyze these:
-
Configurations with
K = 4(conf3, conf4, conf5) consistently show larger memory savings and speedups than configurations withK = 1orK = 2, consistent with the routing buffer scaling linearly withK.conf4(K=4, d=2048) achieves the peak SiLU speedup of 3.7Γ;conf3(K=4, d=1024) achieves the 4Γ SwiGLU memory reduction. -
Configurations with larger
dshow larger absolute memory savings, consistent with the index-vs-buffer ratio being proportional tod. The paper notes this explicitly for SiLU memory (Section 6.3: "savings scale proportionally with the sequence length L and the number of activated experts k") but not for SwiGLU. -
Speedups are strictly higher under SwiGLU than under SiLU for comparable configurations, supporting the claim that activation optimization is particularly impactful for complex activations. However, since the paper does not provide a head-to-head table comparing the same configuration under both activations, this comparison requires cross-referencing Figures 4 and 6.
-
Configuration conf7 (
d = 2048,E = 8,K = 4,B = 16,L = 512) is omitted from all SwiGLU figures and from the SiLU speedup figure (Figure 4). It appears only in the SiLU memory comparison (Figure 3). The paper does not explain this omission. Conf7 is unusual in having a smaller sequence length (512) and batch size (16) compared to conf4 (1024, 32) despite the samed = 2048andK = 4β the omission could mean the smaller token count makes speedup less impressive, but this is speculation.
Ablation Studies and Robustness Checks
Activation function comparison (SiLU vs. SwiGLU): The paper implicitly ablates the activation function by reporting results for both SiLU (Figures 3-4) and SwiGLU (Figures 5-6). The key finding is that MoEBlaze's advantages are larger for the more memory-intensive SwiGLU activation: memory savings reach 4Γ (vs. 3.6Γ peak for SiLU, though on different configurations), and speedups reach 6.2Γ (vs. 3.7Γ peak for SiLU). This supports the claim that the fused activation kernel provides benefits proportional to the activation's memory footprint. However, because the configurations compared are not identical (the SiLU memory peak is at conf4, the SwiGLU memory peak is at conf3), this is not a controlled ablation β it's a pattern observed across different configuration sets.
Configuration scaling ablation (sweeping d, E, K, B, L): The seven configurations in Table 1 serve as an informal ablation over MoE design parameters. The paper does not present this as a formal sensitivity analysis, but the results can be read as showing that:
- Memory savings scale with
K(conf1 withK=1shows smallest savings; conf3-5 withK=4show largest) - Speedups scale with
d(conf4 withd=2048achieves peak SiLU speedup) - SwiGLU benefits are consistent across configurations (speedups range narrowly from 2Γ to 6.2Γ) compared to SiLU (1.4Γ to 3.7Γ, a wider relative range)
The paper does not provide formal ablation where individual parameters are varied in isolation (e.g., fixing all other parameters and sweeping only K). The seven configurations are a sparse, non-orthogonal sampling of the design space, making it difficult to attribute effects to specific parameters.
Hardware-specific optimization ablation (H100 features): No ablation. The paper claims in Section 6.4 that the fused GEMM kernels "effectively leverage H100's latest hardware acceleration features such as warp-group matrix multiplication, tensor memory accelerator, etc." but provides no comparison with those features disabled, no comparison on older hardware (A100, V100), and no profiling data showing TMA utilization or warp-group MMA throughput. The reader cannot determine whether the speedups would transfer to other GPU architectures or are specific to H100's hardware capabilities.
Missing ablation: dispatch construction method comparison. The paper motivates its three-step atomic-free dispatch construction specifically by critiquing sorting-based alternatives (Section 4.2: multi-pass radix sort "requires several global-memory passes," "limits fine-grained parallelism," "forces a multi-kernel dispatch pipeline...with high kernel launch latencies"). However, no experiment compares the throughput of MoEBlaze's dispatch construction against a sorting-based approach under otherwise identical expert computation kernels. The claimed superiority of the atomic-free bitmap method over sorting is asserted based on algorithmic analysis, not measured. This is a significant gap because the dispatch construction overhead is one of the three factors the paper credits for training speedups (Section 6.4, point 2).
Missing ablation: SiLU recomputation on vs. off. The paper claims that recomputing SiLU during backward improves throughput because pointwise operations are memory-bandwidth-bound (Section 5.2). No experiment validates this claim by comparing SwiGLU training with SiLU stored vs. recomputed, holding all other optimizations constant. The observed SwiGLU speedups (Figure 6) include both epilogue fusion (which eliminates intermediate writes even without checkpointing) and SiLU recomputation (which eliminates the SiLU write/read pair). Without isolating these, the contribution of the checkpointing specifically β as opposed to the fusion β is unmeasured.
Missing ablation: separate contributions of dispatch vs. kernel fusion. The paper presents MoEBlaze as a co-designed system with two primary components: memory-efficient dispatch (Sections 3-4) and fused kernel with activation checkpoint (Section 5). However, all experiments measure the complete MoEBlaze system against Megablocks. There is no ablation measuring: (a) MoEBlaze dispatch + conventional (unfused) expert kernels vs. Megablocks, or (b) conventional dispatch (Megablocks-style) + MoEBlaze fused kernels vs. Megablocks. Without these, the individual contributions of each component cannot be quantified β the speedups could be dominated by one component, or the two could interact (as the paper argues), but the experimental design cannot distinguish these cases.
Configurations not benchmarked: conf7 under SwiGLU and SiLU speedup. As noted, conf7 (d = 2048, E = 8, K = 4, B = 16, L = 512) appears only in the SiLU memory comparison (Figure 3) and is absent from Figures 4, 5, and 6. The paper provides no explanation. Conf7 has a smaller total token count (B Γ L = 8,192 vs. conf4's 32,768) despite the same d = 2048 and K = 4 β its omission from speedup figures could indicate that speedup is less favorable for smaller token counts (where dispatch overhead is amortized over fewer tokens, or where the GPU is less saturated), but this is speculative.
No convergence or quality evaluation. The paper measures only single-layer forward+backward pass time and activation memory. There is no experiment training a complete MoE model to convergence with MoEBlaze vs. Megablocks, no validation loss curves, and no downstream task evaluation. This is standard for systems papers focused on kernel performance, but it means the paper cannot demonstrate that the memory savings translate to effective training improvements (e.g., enabling larger batch sizes that improve convergence, or enabling longer sequences that improve model quality). The claim that MoEBlaze enables "efficient model scalings" (Section 1) is supported only by single-layer microbenchmarks, not by end-to-end training results.
Critical Assessment
Claim 1: MoEBlaze achieves over 4Γ speedups
Partially supported, with important scope limitations. The paper reports speedups of "1.4Γ to 3.7Γ" for SiLU and "2Γ to 6.2Γ" for SwiGLU. The headline "over 4Γ speedups" is technically true β the SwiGLU maximum reaches 6.2Γ β but the claim requires careful qualification:
- The 4Γ figure is not a typical or average speedup; it is the upper end of the SiLU range and the lower end of the SwiGLU range. Most SiLU configurations show speedups below 3Γ. The paper's abstract says "can achieve over 4Γ speedups," which is accurate (the system can achieve this under favorable conditions) but risks overstatement if read as a typical result.
- The speedups are measured on a single MoE layer in isolation, excluding optimizer updates, embedding layers, attention mechanisms, communication overhead, and data loading β all components of a real training loop. The throughput improvement for end-to-end model training would be the improvement on the MoE layers only, diluted by all other operations. If MoE layers constitute, say, 50% of total training time (with attention, embeddings, communication taking the rest), a 3.7Γ speedup on MoE layers translates to roughly a 1.5-2Γ end-to-end speedup.
- The speedups are measured against Megablocks only, without comparison to other systems (TurboMoE, DeepSpeed-MoE, FastMoE). It is unknown whether Megablocks is the strongest possible baseline β if Megablocks' SwiGLU implementation is particularly unoptimized on H100, MoEBlaze's advantage would be inflated relative to a more competitive baseline.
- The claimed contribution of H100-specific hardware features (TMA, warp-group MMA) is stated but not validated. If the speedup depends substantially on H100-specific optimizations that Megablocks doesn't exploit, the advantage may not transfer to A100 or future architectures.
Claim 2: MoEBlaze achieves over 50% activation memory savings
Strongly supported. Every configuration in Figures 3 and 5 shows MoEBlaze using substantially less memory than Megablocks. The absolute savings are dramatic: conf4 achieves a 3.6Γ reduction for SiLU (6,100 MB vs. 22,000 MB, which is 72% savings β well over 50%), and conf3 achieves roughly a 4Γ reduction for SwiGLU (approximately 10,000 MB vs. over 40,000 MB, which is 75% savings). The smallest savings are for conf1 with K = 1, which still appears to show MoEBlaze below Megablocks (though the bar chart makes exact numbers difficult to read for small configurations).
The claim is well-supported quantitatively for the specific configurations tested. The scaling pattern (savings proportional to K and d) aligns with the theoretical mechanism (eliminating L Γ K Γ d routing buffers), lending credibility to the extrapolation that savings would persist at larger scales.
However, a caveat: the memory measurement uses PyTorch saved tensor hooks to measure "activation memory" specifically. This excludes parameter memory, optimizer state, gradient buffers, and other runtime allocations. Megablocks may have different memory allocation patterns outside of activation tensors β e.g., larger workspace buffers for its block-sparse kernels β that could narrow the total memory gap. The paper does not report total GPU memory consumption (peak allocated memory across all uses), only activation memory, which is the metric most favorable to MoEBlaze's specific optimizations.
Claim 3: MoEBlaze eliminates intermediate activation buffers and materialization
Supported by the memory savings, but not directly instrumented. The paper's core technical claim is that MoEBlaze replaces the L Γ K Γ d routing buffer with O(L Γ K) integer index structures. The memory savings in Figures 3 and 5 are consistent with this mechanism β the savings scale with K and d as predicted. However, the paper does not provide direct evidence for the mechanism:
- There is no memory breakdown showing how many bytes go to routing buffers vs. index structures vs. FFN intermediates in MoEBlaze vs. Megablocks. Such a breakdown would directly validate the claim that routing buffers specifically are eliminated (as opposed to, say, better memory allocation in general).
- There is no profiling of memory traffic (e.g., using
nsysornsight-compute) showing reduced global memory reads/writes corresponding to eliminated buffer copies. This would provide direct evidence that data movement is reduced, not just peak allocation. - The index structure sizes are never reported in the experiments. The paper calculates 128 MB for the DeepSeek-scale example in the motivation (Section 2.1), but never measures the actual index structure memory for the tested configurations.
The experiments demonstrate that MoEBlaze uses less activation memory β that is unambiguous. But they do not prove that the specific mechanism (index-based dispatch eliminating materialized routing buffers) is responsible, rather than some other aspect of the implementation (e.g., different memory allocator behavior, different kernel workspace sizes, or simply that Megablocks is inefficient in ways MoEBlaze happens to avoid).
Claim 4: The atomic-free dispatch construction outperforms sorting-based dispatch
Not experimentally validated. Section 4.2 provides a detailed critique of sorting-based dispatch (multi-pass radix sort, "severe performance bottlenecks at scale," "forces a multi-kernel dispatch pipeline"), and the paper attributes part of the training speedup to "efficient data dispatch construction kernels, which is very light-weight and runs rapidly on GPUs, avoiding the expensive multiple-passes kernel in other sorting-based approaches" (Section 6.4). However, no experiment compares MoEBlaze's dispatch construction time against a sorting-based approach. The speedup numbers (Figures 4 and 6) are for the entire forward+backward pass, which includes dispatch construction, expert computation, activation functions, and output aggregation. The contribution of dispatch construction specifically to the overall speedup is not isolated.
This is the most significant missing experiment in the paper. The atomic-free bitmap construction is presented as a key algorithmic contribution (Section 4.2 occupies the same level of detail as the memory-efficient routing algorithm), but its performance advantage is asserted rather than measured. An ablation comparing MoEBlaze's complete system using the bitmap-based dispatch vs. using a sorting-based dispatch (with all other components identical) would directly test the sorting critique and quantify the benefit of the proposed alternative. The absence of this experiment means the reader must take on faith that the dispatch construction contributes meaningfully to speedup, rather than being a minor component where any reasonable implementation would suffice.
Claim 5: SiLU recomputation improves throughput (not just memory)
Plausible but not isolated. The paper's theoretical argument (Section 5.2: pointwise activations are memory-bandwidth-bound, so recomputation can be faster than store-and-reload) is sound, and the higher SwiGLU speedups (2-6.2Γ) compared to SiLU (1.4-3.7Γ) are consistent with the activation-specific optimizations providing additional throughput benefits beyond the dispatch savings. However, as discussed above, the SwiGLU kernel fuses the dual projections with the epilogue and applies checkpointing simultaneously. The speedup increase could come entirely from the fusion (eliminating kernel launches and redundant x loads for the two projections) without any contribution from the SiLU recomputation specifically.
To validate the recomputation-as-throughput-win claim, the paper would need to compare SwiGLU training with MoEBlaze's dispatch + fused projections + SiLU storage vs. the same dispatch + fused projections + SiLU recomputation. If recomputation showed additional speedup over storage in that controlled comparison, the claim would be directly supported. The current experiments can only show that the combined fusion+recomputation outperforms Megablocks' SwiGLU implementation β which could be unoptimized in ways unrelated to recomputation specifically.
What Would Strengthen the Paper
Several experiments would substantially improve the empirical foundation:
-
Dispatch construction microbenchmark: Isolate the time to build the four index structures (using the three-step bitmap method) vs. a sorting-based construction (e.g., using
torch.sortor CUB's radix sort), for various values ofL,E, andK. This would directly test the central algorithmic claim in Section 4.2. -
Component-wise ablation: Report MoEBlaze performance with (a) only dispatch optimization, (b) only kernel fusion, and (c) both, all against Megablocks. This would quantify the individual contributions and test the claimed complementarity.
-
SiLU stored vs. recomputed ablation: Under the MoEBlaze dispatch + fused projections, compare SwiGLU training throughput with SiLU stored to global memory vs. recomputed during backward. This would validate the throughput claim in Section 5.2.
-
End-to-end training with a complete model: Train a realistic MoE architecture (e.g., a Mixtral-like or DeepSeek-like configuration) for a non-trivial number of steps, measuring samples per second and peak GPU memory. This would demonstrate that the single-layer benefits translate to practical training throughput improvements, and would surface any integration issues (e.g., interactions with attention layers, optimizer overhead, communication).
-
Memory traffic profiling: Use
nsight-computeor similar tools to measure DRAM read/write bytes for the MoE layer forward+backward pass in both MoEBlaze and Megablocks. This would directly show whether the memory savings come from reduced data movement (as claimed) rather than just reduced peak allocation. -
Multi-baseline comparison: Benchmark against at least one other system beyond Megablocks β preferably TurboMoE (the most recent prior work cited) β to establish that the speedups are not specific to Megablocks' implementation.
-
Multi-GPU evaluation: The paper states distributed training as future work (Section 8), but even a preliminary 2-GPU or 4-GPU result would ground the scalability claims and show whether the dispatch optimization interacts favorably with inter-GPU communication (e.g., whether the index structures simplify expert-parallel gradient aggregation).
Summary
The experiments convincingly demonstrate that MoEBlaze uses substantially less activation memory than Megablocks across a range of MoE configurations, with savings reaching 3.6-4Γ. The training speedups (1.4-6.2Γ) are impressive but their precise attribution is limited by the absence of component-wise ablations and dispatch construction microbenchmarks. The paper's central architectural claims β that index-based dispatch eliminates routing buffers, that atomic-free bitmap construction outperforms sorting, and that SiLU recomputation improves throughput β are all consistent with the aggregate results but are not individually validated by the reported experiments. The system-level measurements establish MoEBlaze as effective in practice; the missing controlled experiments mean the paper's mechanistic explanations remain hypotheses rather than demonstrated facts. For a systems paper where the primary contribution is a specific set of implementation techniques, this gap is significant: the reader can see that MoEBlaze is faster and more memory-efficient, but cannot confidently determine which of the several proposed mechanisms matters most, whether all are necessary, or whether the specific algorithmic choices (bitmap construction, location map, SiLU recomputation) are the actual drivers of performance rather than incidental implementation details.
6. Limitations and Trade-offs
Limitation 1: Single-Device Evaluation Without Distributed Training Validation
The assumption or constraint. All experiments are conducted on "a single NVIDIA H100 Tensor Core GPU" (Section 6.1), measuring a single MoE layer in isolation. The paper explicitly acknowledges this scope boundary in Section 8:
"While this paper primarily focuses on single-device performance, we note that the core mechanisms of MoEBlaze are also applicable to distributed settings. As future work, we plan to extend MoEBlaze to distributed training frameworks and study the optimizations for multi-node, multi-GPU MoE training."
The paper's motivation, however, is framed around large-scale distributed MoE training β the DeepSeek-scale examples in Section 2 involve millions of tokens and hundreds of gigabytes of activation memory that would far exceed a single GPU's capacity regardless of memory efficiency. The single-device experiments demonstrate memory savings within a single GPU's memory budget, but cannot address whether those savings translate to effective benefits in distributed settings where models are partitioned across devices.
The consequence. In distributed MoE training, expert parameters are typically sharded across multiple GPUs (expert parallelism), and tokens must be communicated across device boundaries to reach their assigned experts. This introduces all-to-all communication operations that are bandwidth-intensive and latency-sensitive, and which interact with the dispatch mechanism in ways that single-device evaluation cannot surface. Specifically:
- MoEBlaze's on-the-fly gather approach means experts access tokens from the original
(L, d)input tensor. In a distributed setting, that tensor may reside on a different device β the gather would become a remote memory access over the interconnect (NVLink or InfiniBand), introducing latency that the materialized buffer approach (which communicates once, then computes locally) might amortize more effectively. - The index structures (
expert_token_indices,token_expert_indices, etc.) would need to be communicated or replicated across devices along with the token data they index. The paper provides no analysis of the communication volume for these structures versus conventional approaches. - The fused kernel's backward pass scatters gradients to expert output positions using the same index structures. In a distributed setting with expert-parallel training, those expert outputs (and their gradients) reside on different devices, so the scatter becomes a cross-device operation whose efficiency depends on the communication pattern's compatibility with the interconnect topology.
What evidence exists in the paper. None. The paper provides no distributed training results, no communication analysis, and no discussion of how the index structures would be partitioned or replicated across devices. The claim that core mechanisms "are also applicable to distributed settings" (Section 8) is asserted without evidence. The speedups (1.4-6.2Γ) and memory savings (up to 4Γ) are measured on a single device where no communication occurs.
Mitigation status. Acknowledged but unaddressed. The paper delegates distributed training to future work and does not provide any preliminary analysis or even a sketch of how the mechanisms would extend to multi-GPU settings. For a system targeting "large-scale Mixture-of-Experts architectures" and "efficient model scalings" (Section 1), the absence of distributed evaluation β even a simple 2-GPU or 4-GPU experiment β is a significant gap between the paper's framing and its empirical coverage.
Limitation 2: Memory Savings Are Not Validated Through End-to-End Training Convergence
The assumption or constraint. All experiments measure single-layer forward+backward pass activation memory and wall-clock time. The paper does not train any complete MoE model to convergence using MoEBlaze. There are no validation loss curves, no downstream task evaluations, and no comparison of final model quality between MoEBlaze and Megablocks when used for actual training. The paper implicitly assumes that the single-layer memory and throughput improvements directly translate to effective training improvements β larger batch sizes, longer sequences, faster time-to-convergence β without demonstrating this translation.
The consequence. The practical value proposition of MoEBlaze is enabling larger batch sizes and longer sequence lengths within the same GPU memory budget, which in turn should improve training throughput, convergence behavior, or final model quality. However, several factors could weaken or nullify this benefit in end-to-end training:
- Memory fragmentation and allocator behavior. The single-layer activation memory measurement (via PyTorch saved tensor hooks) captures only the activation tensors allocated during that layer's forward+backward pass. In a full training loop, PyTorch's caching allocator may fragment memory differently depending on allocation patterns, peak memory may be determined by a different layer or by optimizer state rather than activation memory, and the effective batch size achievable may be limited by factors other than peak activation memory.
- Throughput dilution. A complete training step includes embedding lookups, attention computation (with its own activation memory and bandwidth demands), optimizer updates, gradient synchronization (in distributed settings), and data loading. The 1.4-6.2Γ speedup on the MoE layer alone translates to a proportionally smaller end-to-end speedup, with the exact fraction depending on the MoE layers' share of total training time.
- Numerical equivalence. MoEBlaze's fused SwiGLU kernel with SiLU recomputation must produce bitwise-identical outputs to the conventional separated-kernel implementation to guarantee identical training dynamics. The paper does not validate this, and floating-point reassociation within fused kernels (e.g., different summation order in fused GEMM epilogues) could produce small numerical differences that compound over training steps.
What evidence exists in the paper. None beyond the single-layer measurements. The paper does not report even a short training run (e.g., 100 steps) to demonstrate that MoEBlaze's layer implementation integrates correctly into a training loop and that the memory savings permit measurably larger batch sizes or sequence lengths in practice.
Mitigation status. Not addressed. The paper does not discuss this limitation. It is standard practice in systems papers to demonstrate kernel-level improvements and leave end-to-end training validation to future work or to users integrating the system, but the gap is worth noting because the paper's abstract and introduction make claims about "breaking the memory wall for efficient MoE training" and "efficient model scalings" (Section 1) that imply end-to-end training benefits, not just layer-level microbenchmarks.
Limitation 3: No Component-Wise Ablation to Attribute Speedups and Memory Savings
The assumption or constraint. MoEBlaze combines multiple independent optimizations β index-based dispatch (Section 3), atomic-free dispatch construction (Section 4.2), fused dual-projection SwiGLU kernel (Section 5.2), and SiLU activation checkpointing (Section 5.2) β into a single system. All experiments compare the complete MoEBlaze system against the complete Megablocks baseline. There are no experiments that isolate individual components by, for example: (a) measuring MoEBlaze dispatch with conventional (unfused) expert kernels, (b) measuring conventional dispatch with MoEBlaze fused kernels, or (c) measuring SiLU recomputation on versus off within the fused kernel.
The consequence. The reader cannot determine:
- Which optimization drives the majority of the speedup. The 1.4-6.2Γ speedups could be dominated by the dispatch optimization (eliminating routing buffer copies), by the fused kernel (eliminating redundant input loads and kernel launches), or by the SiLU recomputation (eliminating memory bandwidth pressure). Without knowing the relative contributions, a practitioner cannot prioritize which component to implement if adapting MoEBlaze's ideas to a different framework or hardware.
- Whether all components are necessary. Some components might provide negligible marginal benefit individually but were included because their implementation cost was low. An ablation showing, for example, that the SiLU recomputation provides only 2% of the total speedup would shift the practical takeaway significantly: the dispatch optimization is the critical component, and the activation checkpoint is an optional refinement rather than a co-equal contribution.
- Whether the atomic-free dispatch construction matters. Section 4.2 provides extensive algorithmic detail on the bitmap-based dispatch construction and explicitly critiques sorting-based alternatives, yet no experiment confirms that this specific algorithm outperforms a sorting-based approach under otherwise identical conditions. It is possible that GPU radix sort primitives (e.g., CUB's
DeviceRadixSort) are sufficiently optimized on H100 that the sorting overhead is negligible compared to the expert computation time, making the atomic-free bitmap construction an algorithmic elegance rather than a practical necessity.
What evidence exists in the paper. The differential between SiLU and SwiGLU speedups (1.4-3.7Γ vs. 2-6.2Γ) provides weak, indirect evidence that the activation-specific optimizations contribute additional speedup beyond the dispatch savings. But this cannot be attributed to any specific component (fusion vs. recomputation vs. epilogue elimination), and the comparison is across different configuration sets rather than an isolated ablation.
Mitigation status. Not addressed. The paper presents MoEBlaze as a co-designed system where the components are "interdependent" and the dispatch optimization "enables" the fused kernel (Section 5.3, and implicitly throughout). This is a reasonable argument for why the components were designed together, but it does not substitute for empirical validation of which components matter and by how much. The paper's claim that the three components together drive the observed speedups (Section 6.4) is a hypothesis, not a demonstrated fact.
Limitation 4: Single Baseline Against Megablocks β No Comparison to Other MoE Frameworks
The assumption or constraint. The paper benchmarks MoEBlaze exclusively against Megablocks (Gale et al., 2023), described as "the industry standard for high-performance sparse training" (Section 6.2). The paper's related work section (Section 7) discusses several other MoE training systems that could serve as alternative baselines: FastMoE (He et al., 2021), Tutel (Hwang et al., 2023), DeepSpeed-MoE (Rajbhandari et al., 2022), and particularly TurboMoE (Aminabadi et al., 2025), which the paper explicitly positions as its most recent predecessor and which also introduced "fused, metadata-driven kernels and data-layout transformations." None of these are benchmarked.
The consequence. The reported speedups and memory savings may be inflated relative to a more competitive baseline for several reasons:
- TurboMoE was published in 2025 and specifically targets dispatch kernel fusion β the same bottleneck MoEBlaze addresses. If TurboMoE's fused dispatch achieves memory savings and speedups comparable to (though smaller than) MoEBlaze's, then MoEBlaze's improvements over the state of the art would be incremental rather than transformative. The paper does not establish whether Megablocks or TurboMoE is the stronger baseline for the specific configurations tested.
- Megablocks' SwiGLU implementation quality is unknown. The paper notes that SwiGLU speedups (2-6.2Γ) are higher than SiLU speedups (1.4-3.7Γ) and attributes this to MoEBlaze's activation-specific optimizations. But an alternative explanation is that Megablocks' SwiGLU kernel is simply poorly optimized on H100 β perhaps using separate GEMM calls for the two projections without epilogue fusion, or not leveraging H100-specific features like TMA β while Megablocks' ReLU kernel is more competitive. Without a second baseline (e.g., TurboMoE's SwiGLU implementation), the reader cannot distinguish "MoEBlaze's SwiGLU kernel is excellent" from "Megablocks' SwiGLU kernel is weak."
- Megablocks' performance characteristics may not be representative. Megablocks reformulates MoE as block-sparse operations, which is architecturally different from the token-dropping or dropless routing approaches used in other systems. If block-sparse kernels have particular overheads on H100 (e.g., less efficient use of Tensor Cores due to sparsity patterns), Megablocks may underperform relative to other systems on this hardware, making MoEBlaze look better by comparison.
What evidence exists in the paper. Only the comparison to Megablocks. The paper's claim that MoEBlaze achieves "over 4Γ speedups and over 50% compared memory savings to other state-of-the-art MoE training frameworks" (Section 1) uses the plural "frameworks" but provides evidence against only one.
Mitigation status. Not addressed. The paper does not explain why Megablocks was chosen as the sole baseline, nor does it acknowledge the absence of comparisons to TurboMoE or other systems as a limitation. The related work section (Section 7) describes these systems in detail, suggesting the authors were aware of them and considered them relevant, but does not explain the omission from experiments.
Limitation 5: H100-Specific Optimizations Are Claimed but Not Characterized or Portable
The assumption or constraint. Section 6.4 attributes part of MoEBlaze's training speedup to "the fused kernel for the batched-GEMM computations that effectively leverages H100's latest hardware acceleration features such as warp-group matrix multiplication, tensor memory accelerator, etc." The paper provides no details about how these features are leveraged, no profiling data showing their utilization, and no evaluation on any hardware other than a single H100 GPU. The experiments use CUDA 12.1 and PyTorch 2.0.1 (Section 6.1), but there is no analysis of how much of the speedup depends on H100-specific capabilities versus general GPU optimizations that would transfer to A100, V100, or future architectures.
The consequence. The portability and generality of MoEBlaze's speedups are uncertain:
- If the speedup relies substantially on the Tensor Memory Accelerator (TMA). TMA is an H100-specific hardware feature for asynchronous data movement between global and shared memory, bypassing the register file and reducing instruction overhead. If MoEBlaze's fused kernel uses TMA for loading input tokens or weight tiles, the same kernel would not run efficiently (or at all) on A100 or other pre-Hopper architectures. The speedup numbers would be hardware-specific and not representative of what users on older or non-NVIDIA hardware could expect.
- If warp-group MMA instructions are used differently than in Megablocks' kernels. The H100's warp-group MMA (matrix multiply-accumulate) supports new data types and tile sizes compared to the A100. If MoEBlaze exploits these and Megablocks does not, the comparison is confounded by hardware feature utilization rather than algorithmic superiority.
- The paper provides no guidance for practitioners on non-H100 hardware. A practitioner deploying on A100 clusters (still widely used in production) has no basis to estimate whether MoEBlaze's benefits would transfer, partially transfer, or not apply at all.
What evidence exists in the paper. None beyond the single mention of H100 features in Section 6.4. There is no hardware comparison, no feature-ablation study (e.g., with TMA disabled), and no discussion of the H100's architectural features in the technical approach sections (Sections 3-5), which are presented in a hardware-agnostic manner despite the implementation apparently depending on H100-specific capabilities.
Mitigation status. Not addressed. The paper claims hardware-specific optimization as a source of speedup but does not characterize this dependence, define which optimizations are H100-specific versus general, or evaluate on alternative hardware. This is a significant gap for a systems paper whose primary contribution is measured performance improvement.
Limitation 6: The Difficulty Estimation Analogy Breaks β No Dynamic or Adaptive Dispatch Policy Exists
The assumption or constraint. The preceding sections established a detailed pattern for analyzing this paper, including an examination of how the method adapts to varying difficulty or workload characteristics. However, this limitation does not apply to MoEBlaze in the same way, and imposing it would be a category error. MoEBlaze is a static system optimization β it restructures the MoE layer computation identically for all inputs, without any difficulty estimation, adaptive policy selection, or workload-dependent strategy switching. There is no gating network that decides "use dispatch optimization A for this batch, use dispatch optimization B for that batch." The index structures are built identically for all tokens regardless of expert load distribution; the fused kernel is applied uniformly regardless of activation sparsity patterns; the SiLU recomputation is unconditional.
The absence of adaptivity is not itself a limitation β it is simply not what the system is designed to do. However, it creates an implicit assumption that the benefits of MoEBlaze's optimizations are uniform across all inputs and workload patterns, which may not hold in production settings. This is worth examining because prior sections established a pattern of analyzing where and when a method's benefits apply.
The assumption or constraint. MoEBlaze's dispatch construction (the three-step bitmap procedure in Section 4.2) allocates a dense L Γ E bitmap, which for a typical production MoE layer with L β 2 million tokens and E = 256 experts would require approximately 2,000,000 Γ 256 Γ 4 bytes β 2 GB of temporary workspace β not negligible, though still far smaller than the routing buffer it replaces. The atomic-free construction assumes that the bitmaps and prefix scans fit within the GPU's memory and that the tile-level scans (Step 3) distribute work evenly across experts. This assumption may break when expert assignment is highly imbalanced β a common occurrence in MoE training before load-balancing losses take effect. If one expert receives, say, 50% of all tokens (extreme imbalance), the CTA dedicated to that expert in the location map construction (Step 3) processes far more work than other CTAs, creating a load imbalance at the kernel level that the atomic-free guarantee does not address.
The consequence. The wall-clock time for dispatch construction could degrade under severe expert imbalance, potentially reducing the net speedup. The paper's evaluation uses configurations where L Γ E is relatively small (e.g., conf4 has L = 32 Γ 1024 = 32,768, E = 16, giving a 32,768 Γ 16 = 524,288-element bitmap β less than half a million entries, which is trivial). At production scale (L β 2,000,000, E β 256), the bitmap grows to 512 million entries, and imbalance effects are proportionally amplified. The paper does not evaluate or discuss this scaling behavior.
What evidence exists in the paper. None. All configurations in Table 1 have modest E values (4, 8, or 16) and token counts (L = B Γ seq_len) ranging from 8,192 (conf7) to 65,536 (conf3). These are one to two orders of magnitude smaller than the DeepSeek-scale examples used to motivate the memory problem in Section 2. The dispatch construction is never profiled in isolation, and there is no sensitivity analysis varying expert imbalance.
Mitigation status. Not addressed. The paper does not discuss how the dispatch construction scales with E, whether the bitmap memory becomes problematic for large expert counts, or how load imbalance affects kernel-level parallelism. Given that modern MoE architectures are trending toward larger expert counts (DeepSeek-V3 uses 256 experts), this scaling behavior is practically relevant and unvalidated.
7. Implications and Future Directions
How This Work Changes the Landscape
MoEBlaze introduces a conceptual reframing of the MoE training memory bottleneck rather than a paradigm shift or incremental kernel optimization. The paper's central move is redefining token routing from a storage problem (how to manage per-expert activation buffers of size L Γ K Γ d) to an indexing problem (how to build O(L Γ K) integer mappings that enable on-the-fly access to the original input tensor). This reframing carries a precise quantitative implication: the memory cost of dispatch metadata becomes independent of model dimension d, breaking the d-factor bloat that causes routing buffers to consume ~94 GB per layer at DeepSeek scale. Prior work β from Switch Transformers' capacity factors through MegaBlocks' block-sparse compression to TurboMoE's metadata-driven kernels β all operated within the "manage the buffer" paradigm, optimizing within the L Γ K Γ d storage rather than eliminating the d dependence entirely. MoEBlaze demonstrates that the buffer itself is an implementation artifact, not a logical necessity.
This reframing changes how the field should think about MoE system optimization. Before MoEBlaze, the natural research question was: "How can we reduce or compress the routing buffer?" The answers involved capacity factors, token dropping, block-sparse representations, and smarter buffer allocation β all techniques that reduce the constant factor but preserve the O(L Γ K Γ d) scaling. After MoEBlaze, the question becomes: "Can we avoid materializing routed tokens altogether, and if so, what is the minimum information needed to route gradients correctly?" The answer β integer index arrays of size O(L Γ K) β is fundamentally cheaper by a factor of d (typically 1,000-6,000), and the paper's experimental evidence (3.6-4Γ memory reductions on single-layer benchmarks) establishes that this asymptotic advantage translates to substantial practical savings even at moderate scale.
The paper's second conceptual contribution β the recharacterization of pointwise activation operations as memory-bandwidth-bound in the tall-and-skinny regime (L β« d) β shifts the calculus for activation checkpointing decisions. Standard practice treats checkpointing as a memory-for-compute tradeoff where throughput is sacrificed. MoEBlaze's analysis of SwiGLU's SiLU component shows that when an operation's arithmetic intensity is low enough to be memory-bandwidth-bound, recomputation can be faster than storage because eliminating a memory write-read pair saves more time than the trivial recomputation costs. This is not a new mathematical result β it follows directly from the roofline model (Williams et al., 2009) β but its application to activation checkpointing in MoE training is novel and provides a decision criterion for practitioners: if an intermediate activation's compute is memory-bandwidth-bound and its input is already being stored for other purposes (as a is stored for weight gradient computation), then recompute it rather than storing it. This criterion generalizes beyond SiLU to any pointwise activation in the L β« d regime, including GELU, ReLU, and potentially LayerNorm or other normalization operations.
The paper partially reconciles a tension between two optimization philosophies in MoE systems. One camp (Switch Transformers, GShard) prioritizes predictable memory layouts through capacity limits and token dropping, sacrificing model quality. Another camp (MegaBlocks, Tutel, FastMoE) prioritizes quality through dropless routing, but accepts the variable-sized activation buffers that come with dynamic token assignment. MoEBlaze demonstrates that this tradeoff is false: dropless routing can be both memory-efficient and quality-preserving if dispatch is reframed as indexing rather than buffering. The 3.6Γ memory reduction at conf4 for SiLU (Figure 3) and the ~4Γ reduction at conf3 for SwiGLU (Figure 5) are achieved without token dropping or capacity limits, meaning the model quality advantages of dropless routing are retained alongside the memory savings previously associated only with capacity-limited approaches.
Research directions that become more attractive after MoEBlaze include: (1) extending index-based dispatch to other sparse computation patterns (mixture-of-attention, sparse mixture-of-modalities, dynamic architecture search) where the "buffer vs. index" reframing could similarly eliminate d-dependent memory overhead; (2) building verifier or scoring models for dispatch quality that operate purely on the integer index structures rather than requiring materialized token buffers, since the index structures encode the complete routing decision at 1/d the memory cost; (3) exploring whether activation recomputation can be extended to other memory-bandwidth-bound operations in the training pipeline (e.g., dropout masks, certain normalization statistics) using the same "recompute if arithmetically trivial and memory-bandwidth-bound" criterion.
Research directions that become less necessary include: further optimization of per-expert buffer compression (the buffer has been eliminated, not compressed); development of more sophisticated token dropping heuristics (dropless routing is now memory-feasible); and sorting-based dispatch construction micro-optimizations (the paper's atomic-free bitmap approach makes sorting the wrong primitive for this problem, though this claim needs experimental validation as discussed in the limitations).
Follow-Up Research This Work Enables
1. End-to-end training convergence with MoEBlaze on a production-scale MoE model (e.g., Mixtral 8Γ7B or DeepSeek-V3 configuration). The paper's evaluation is limited to single-layer microbenchmarks. A critical follow-up would integrate MoEBlaze into a complete training framework (e.g., Megatron-LM, DeepSpeed, or FSDP) and train a realistic MoE architecture to convergence, measuring: (a) effective samples-per-second throughput when MoE layers constitute ~40-60% of total FLOPs (alongside attention, embeddings, and communication); (b) whether the memory savings permit measurably larger batch sizes or longer sequence lengths compared to Megablocks or TurboMoE under identical GPU count and model configuration; (c) validation loss curves demonstrating that MoEBlaze's fused kernels are numerically equivalent to the baseline (no divergence due to floating-point reassociation in fused epilogues). This would validate the paper's claim to enable "efficient model scalings" (Section 1) beyond single-layer microbenchmarks and would surface integration challenges with distributed communication, gradient synchronization, and optimizer state. A strong result would show that a model trained with MoEBlaze converges identically to Megablocks but with 2-3Γ higher throughput from larger feasible batch sizes, or that MoEBlaze enables a 2Γ longer sequence length at equal GPU count.
2. Component-wise ablation quantifying the individual contributions of index-based dispatch, fused SwiGLU kernel, and SiLU recomputation. The paper presents MoEBlaze as a co-designed system but provides no experiment that isolates the components. A follow-up study should measure MoEBlaze's throughput and memory under four configurations: (a) index-based dispatch only (expert computation uses conventional separated GEMMs and activations), (b) fused SwiGLU kernel only (conventional per-expert buffer dispatch, but with the fused dual-projection + epilogue kernel), (c) SiLU recomputation on vs. off within the fused kernel (holding dispatch and fusion constant), and (d) the complete MoEBlaze system. This would answer: Which component drives the majority of the 1.4-6.2Γ speedup? Does SiLU recomputation provide measurable throughput improvement over storage within the fused kernel, or is the benefit purely memory savings? Does the dispatch optimization alone account for most of the memory reduction, or does the activation checkpointing contribute comparably? This ablation is essential for practitioners deciding which components to implement β if SiLU recomputation provides negligible incremental benefit beyond epilogue fusion, its implementation complexity may not be justified; if dispatch optimization accounts for 80% of the speedup, a simpler integration (index-based dispatch with otherwise standard expert kernels) might capture most of the gain.
3. Microbenchmark comparison of dispatch construction: atomic-free bitmap method vs. optimized GPU radix sort (CUB DeviceRadixSort). Section 4.2 provides an algorithmic critique of sorting-based dispatch but provides no experimental comparison. A focused microbenchmark should: measure wall-clock time for building the expert_token_indices, expert_token_offsets, token_expert_indices, and token_index_map structures using MoEBlaze's three-step bitmap method vs. a sorting-based approach (flatten to (expert_id, token_id) tuples, CUB radix sort by expert ID, segmented scan for offsets, index recovery) across a sweep of L (from 10^4 to 10^7 tokens), E (from 8 to 256 experts), and K (from 1 to 8). This would directly test the central algorithmic claim: that the bitmap approach is faster than sorting by a margin that justifies the implementation complexity. It would also characterize scaling behavior β does the bitmap advantage grow, shrink, or reverse as E increases? As L increases? As expert load imbalance increases? The paper's current evidence cannot distinguish "the bitmap method is 10Γ faster than sorting and is critical to the speedup" from "the bitmap method is 5% faster; the real speedup comes from kernel fusion."
4. Multi-GPU distributed training with analysis of communication volume and pattern under index-based dispatch. The paper explicitly delegates distributed training to future work (Section 8), but the core mechanisms' interaction with inter-device communication is non-trivial. A follow-up should implement MoEBlaze in a distributed setting (at minimum 4-8 GPUs with expert parallelism) and measure: (a) the communication volume for token data when using on-the-fly gathers from the original (L, d) tensor vs. conventional per-expert buffer communication β does the index-based approach change the all-to-all communication pattern or volume? (b) The communication of index structures themselves β since expert_token_indices and token_index_map must be accessible on whichever device owns the expert parameters and the input tokens, respectively, do they need to be replicated or communicated, and at what cost? (c) Overall training throughput with MoEBlaze vs. Megablocks in a distributed setting, where communication bottlenecks (NVLink bandwidth, network latency) may dominate over the on-device memory bandwidth savings that MoEBlaze exploits. A negative result β index-based dispatch increasing communication overhead such that distributed speedup is negligible or negative β would not invalidate the single-device benefits but would circumscribe MoEBlaze's applicability to scenarios where expert parallelism is not the bottleneck.
5. Generalization of the "recompute if memory-bandwidth-bound" criterion to other training intermediates. The paper's SiLU recomputation strategy is justified by a specific characterization: pointwise operations on tall-and-skinny tensors are memory-bandwidth-bound on modern GPUs, so recomputation can be throughput-favorable. A follow-up study should systematically profile other intermediate activations in LLM training β GELU, LayerNorm statistics (mean, variance), dropout masks, attention softmax intermediates, residual-add intermediates β measuring their arithmetic intensity and memory traffic on H100, and identifying which satisfy the "recompute is faster than store" condition. For each candidate, implement recomputation in a training kernel and measure throughput vs. storage to validate the roofline prediction. This would generalize MoEBlaze's contribution from a specific SiLU optimization to a methodology for activation checkpointing decisions β a roofline-guided checklist that practitioners can apply to any new activation function or normalization layer. A strong result would be a table mapping operation types to the recommended strategy (store vs. recompute) across common GPU architectures (A100, H100, H200), since the bandwidth/compute ratio differs across generations and affects the crossover point.
6. Stress-test with extreme expert imbalance and large expert counts (E = 256, comparable to DeepSeek-V3). The paper's experimental configurations use E = 4, 8, 16 β modest expert counts that keep the L Γ E bitmap small and the per-expert work balanced. Modern architectures are trending toward hundreds of experts (DeepSeek-V3: 256 experts; potential future designs: 512+). A stress-test should measure: (a) dispatch construction time as E scales from 16 to 256 to 512, holding other parameters constant β does the bitmap memory footprint (L Γ E) become problematic, and does the tile-level scan in Step 3 remain efficient when many experts receive few or zero tokens? (b) Training throughput under severe expert load imbalance (simulated by skewing the gating distribution so that 20% of experts receive 80% of tokens), testing whether the CTA-per-expert mapping in the location map construction creates kernel-level load imbalance that degrades dispatch construction time. (c) Whether the memory savings (proportional to d Γ K) remain the dominant effect at large E, or whether the growing bitmap workspace erodes the net memory advantage. A negative result β dispatch construction time increasing superlinearly with E or bitmap memory becoming comparable to the eliminated routing buffer for very large E β would define a boundary condition where index-based dispatch loses its advantage and buffer-based approaches may be preferable.
Practical Applications and Downstream Use Cases
1. On-device or single-GPU fine-tuning of MoE models with constrained memory budgets. For practitioners fine-tuning a pre-trained MoE model (e.g., Mixtral 8Γ7B) on a single GPU with limited HBM (e.g., 48 GB A6000 or 24 GB RTX 4090), activation memory is often the binding constraint on batch size, which in turn affects training stability and convergence speed. MoEBlaze's 3.6-4Γ activation memory reduction (Figures 3 and 5) directly translates to the ability to use 3-4Γ larger micro-batch sizes or 3-4Γ longer sequences within the same GPU memory. At conf3 scale under SwiGLU, MoEBlaze frees approximately 30 GB of activation memory (from >40 GB to ~10 GB), enabling fine-tuning that would otherwise require gradient accumulation over many micro-batches or aggressive sequence truncation. The practical workflow would be: replace the MoE layer implementation in the fine-tuning script with MoEBlaze's fused kernels, run with the same total batch size but fewer gradient accumulation steps (reducing wall-clock time), or with longer sequences that better match the pre-training context length. The primary risk is integration complexity with existing fine-tuning frameworks (Hugging Face, Axolotl, etc.) and the need to validate numerical equivalence with the original layer implementation.
2. Large-scale pre-training with extended sequence lengths. The paper's motivation examples (94 GB routing buffer, 98 GB FFN intermediate, for a single MoE layer at DeepSeek scale) illustrate that activation memory, not parameter memory, is the binding constraint for long-sequence MoE training. MoEBlaze's dispatch optimization reduces the routing buffer term from O(L Γ K Γ d) to O(L Γ K), and the SwiGLU fusion with SiLU recomputation eliminates approximately half the FFN intermediate storage. For a training team pushing sequence length from, say, 32K to 128K tokens (a 4Γ increase in L), conventional dispatch would quadruple the routing buffer β from already-problematic levels to impossible ones. MoEBlaze's index-based dispatch means the dispatch metadata grows only 4Γ in the L Γ K term (a few hundred MB to perhaps 1-2 GB) rather than 4Γ in the L Γ K Γ d term (adding hundreds of GB). This could make 128K-sequence MoE training feasible on the same GPU count where conventional dispatch caps at 32K. The practical benefit is measured not in wall-clock speedup per step (which the paper benchmarks) but in maximum feasible sequence length β a capability unlock rather than an efficiency improvement. Validation would require demonstrating that a full training run with MoEBlaze at 128K sequence length converges and achieves the quality benefits expected from long-context training.
3. Cost-efficient batch inference for MoE models in high-throughput serving. While the paper focuses on training, the index-based dispatch mechanism applies equally to inference, where activation memory determines the maximum batch size that fits on a GPU. In high-throughput serving scenarios (e.g., processing thousands of prompts per second with large batch sizes), the activation memory for token routing and FFN intermediates often limits batch size before compute utilization saturates the GPU. MoEBlaze's 3-4Γ activation memory reduction would permit proportionally larger inference batches, improving throughput (tokens per second per GPU) and reducing cost per token. The practical deployment would involve integrating MoEBlaze's dispatch and fused kernels into an inference serving framework (e.g., vLLM, TensorRT-LLM) and measuring throughput at maximum batch size with MoEBlaze vs. the framework's native MoE implementation. A key consideration not addressed in the paper: inference typically uses KV-caching for autoregressive decoding, which adds its own activation memory pressure that may dilute the relative benefit of MoEBlaze's dispatch savings. If KV-cache memory dominates total activation memory during inference, MoEBlaze's savings on the MoE layers specifically would translate to a smaller percentage improvement in maximum batch size.
4. Pre-training data generation and self-improvement pipelines using MoE models. The paper from the prior analysis context (Section 7 implications from the compute-optimal test-time scaling work) identified data generation for self-improvement as a key use case: using LLMs to generate training data for themselves, where generation throughput directly determines pipeline efficiency. MoEBlaze's training throughput improvements (1.4-6.2Γ per MoE layer) apply directly to the training phase of such pipelines β when the student model is being fine-tuned on the generated data. If MoE layers constitute ~50% of training FLOPs in a typical MoE architecture, a 3Γ MoE layer speedup translates to roughly a 1.5-2Γ end-to-end training speedup, enabling faster iteration cycles. More interestingly, if the pipeline involves training with long sequences of generated text, MoEBlaze's memory savings could enable training on longer generation trajectories (more context per example) within the same GPU budget, potentially improving the quality of the distilled model by exposing it to richer multi-turn or long-form examples. The practical measurement would be: training a student MoE model on generated data with MoEBlaze vs. Megablocks, measuring total pipeline wall-clock time (generation + training) and final student model quality, to determine whether the training throughput improvement has a measurable downstream impact on the self-improvement loop's efficiency or output quality.
When to Prefer This Method
The paper positions MoEBlaze primarily against Megablocks (the single benchmarked baseline) and implicitly against the broader class of buffer-based MoE dispatch implementations (Switch Transformers, GShard, FastMoE, Tutel, DeepSpeed-MoE, TurboMoE β all of which, per the paper's characterization, materialize per-expert activation buffers). The decision criterion is not articulated as an explicit tradeoff matrix in the paper, but the experimental results and algorithmic design imply specific conditions where MoEBlaze's approach is advantageous and where it may not be.
Prefer MoEBlaze's index-based dispatch over buffer-based dispatch when:
-
The model dimension
dis large (β₯ 1024) andK(active experts per token) is β₯ 2. The memory savings from eliminating theL Γ K Γ drouting buffer scale proportionally withdandKβ the paper's largest savings (3.6Γ atconf4withd = 2048,K = 4; 4Γ atconf3withd = 1024,K = 4) occur in exactly these regimes. For smalld(e.g., 512) andK = 1(likeconf1), the savings are present but modest because the routing buffer was not the dominant memory consumer to begin with. -
Dropless routing is required for model quality. Unlike capacity-limited approaches (Switch Transformers, GShard) that drop or re-route tokens exceeding capacity, MoEBlaze processes every token through its assigned experts, preserving model quality. The index-based approach eliminates the memory cost that previously motivated token dropping β there is no longer a tension between memory efficiency and quality preservation.
-
Training uses SwiGLU or similarly complex activations with multiple intermediate tensors. The fused kernel with SiLU recomputation provides disproportionate benefits for SwiGLU (speedups 2-6.2Γ, Figure 6) compared to ReLU/SiLU (speedups 1.4-3.7Γ, Figure 4) because the dual-projection gating path creates more intermediate memory traffic to eliminate. If the activation function is simple (ReLU, GELU) and does not require multiple projections, the kernel fusion benefit is smaller, and the dispatch optimization alone provides the primary gains.
-
Single-GPU or single-node training where activation memory (not communication) is the binding constraint. The paper's 3.6-4Γ memory reductions directly increase maximum batch size and sequence length on memory-constrained single devices. The benefit in distributed settings is unvalidated β index-based dispatch may interact with all-to-all communication in ways that preserve, amplify, or reduce the memory advantage.
Consider conventional buffer-based dispatch when:
-
Expert counts are very large (
E β₯ 256) and theL Γ Ebitmap workspace becomes non-trivial. MoEBlaze's three-step dispatch construction allocates a denseL Γ Ebitmap, which atL β 2M,E = 256, and 4 bytes per entry consumes ~2 GB of temporary workspace. While still far smaller than the routing buffer it replaces (~94 GB), this workspace cost grows linearly withEand is not amortized β it's pure overhead. AtE = 1024, the bitmap reaches ~8 GB, which may become a significant fraction of total memory. The paper does not evaluate this regime, and the crossover point where bitmap overhead outweighs dispatch savings is unknown. -
Communication dominates over on-device memory bandwidth in distributed training. MoEBlaze's throughput benefits come primarily from reducing global memory traffic (fewer HBM reads/writes, fused kernels). In a distributed setting where all-to-all communication over NVLink or InfiniBand is the bottleneck, the on-device memory bandwidth savings may not translate to end-to-end throughput improvement, while the index structures add communication complexity (indices must be accessible on remote devices). Until distributed experiments validate the benefit, buffer-based dispatch with its simpler communication pattern (materialize tokens, communicate, compute locally) may be more predictable in multi-node settings.
-
Wall-clock latency is critical and the dispatch construction overhead is not amortized over large expert computations. The three-step bitmap construction adds kernel launches and a dense bitmap allocation that, for small token counts (
Lsmall) or many small experts, may not be worth the dispatch savings. The paper's smallest configuration (conf1,L = 65,536tokens, 4 experts) shows the smallest speedup, suggesting that dispatch construction overhead is more noticeable when per-expert computation is light. For inference with small batch sizes, whereLis tiny, the fixed cost of building the index structures may exceed the time saved by avoiding buffer copies. -
Integration simplicity is prioritized over maximum memory efficiency. MoEBlaze's approach requires custom fused kernels for the forward and backward passes, custom dispatch construction, and architectural changes to how the MoE layer interacts with the rest of the model. Existing frameworks (Megablocks, TurboMoE, DeepSpeed-MoE) provide drop-in MoE layer implementations with established testing, numerical validation, and framework integration. The engineering cost of adopting MoEBlaze β particularly the need to validate numerical equivalence, handle edge cases (empty expert assignments, extreme imbalance), and maintain compatibility with the surrounding training stack β may outweigh the 1.4-3.7Γ speedup for teams that are not memory-constrained or that prioritize development velocity over peak efficiency. The paper provides no integration guide, no discussion of numerical precision guarantees, and no characterization of edge-case behavior, making adoption riskier than the microbenchmark results alone suggest.