<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Moe on Code is cheap, let&#39;s talk</title>
    <link>https://blog.ferstar.org/en/tags/moe/</link>
    <description>Code is cheap, let&#39;s talk</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2026 ferstar · [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en)</copyright>
    <lastBuildDate>Mon, 26 Oct 2026 16:16:00 +0800</lastBuildDate>
    <ttl>60</ttl><atom:link href="https://blog.ferstar.org/en/tags/moe/index.xml" rel="self" type="application/rss+xml" /><image>
      <url>https://blog.ferstar.org/site-logo.png</url>
      <title>Code is cheap, let&#39;s talk</title>
      <link>https://blog.ferstar.org/</link>
    </image>
    
    <item>
      <title>RTX 4090 D Tensor Unlock: What Can Quantized MoE Inference Gain?</title>
      <link>https://blog.ferstar.org/en/posts/tensor-unlock-quantized-moe/</link>
      <pubDate>Mon, 26 Oct 2026 16:16:00 +0800</pubDate>
      
      <guid isPermaLink="true">https://blog.ferstar.org/en/posts/tensor-unlock-quantized-moe/</guid>
      <description>The 4090 D unlock doubles floating-point Tensor throughput, but quantized MoE inference gains almost nothing. PTX assembly and benchmarks explain why removing floating-point limits cannot solve integer and bandwidth bottlenecks.</description><content:encoded><![CDATA[<blockquote><p>I am not a native English speaker; this article was translated by AI.</p>
</blockquote><p>In <a href="/en/posts/rtx4090d-gpu-unlock-strata-benchmark/" >the previous post</a>, I unlocked the RTX 4090 D and measured nearly doubled throughput on certain Tensor GEMM workloads. <a href="https://x.com/ferstar_org/status/2114172808305762327?s=20"  target="_blank" rel="noreferrer">After sharing the results on X</a>, a friend noted: “This probably does little to nothing for quantized MoE inference.”</p>
<p>This card mainly runs Strata with an IQ3_S-quantized Qwen3.8-Flash-Next model. Checking the source and logs against actual compute paths confirms that assessment.</p>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow" style="background-color: #e0f2fe"
  
  >
  <span
    
      class="pe-3 flex items-center" style="color: #0284c7"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/></svg>
</span>
  </span>

  <span
    
      style="color: #0369a1"
    
    ><strong>TL;DR</strong>: <strong>Virtually zero gain (fluctuations stay within measurement noise).</strong>
The 4090 D unlock only restores floating-point Tensor rates (FP16/BF16/TF32). Low-bit quantized MoE inference runs predominantly on <strong>INT8/INT32 integer instructions</strong>, where real-world bottlenecks lie in <strong>memory bandwidth, PCIe transfers, and CPU offloading</strong>, rather than floating-point compute.</span>
</div>


<h2 class="relative group">Why Doubled FP Throughput Does Nothing for Quantized MoE
    <div id="why-doubled-fp-throughput-does-nothing-for-quantized-moe" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-doubled-fp-throughput-does-nothing-for-quantized-moe" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">Floating-Point Rates Grew, but Integer Stayed Flat
    <div id="floating-point-rates-grew-but-integer-stayed-flat" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#floating-point-rates-grew-but-integer-stayed-flat" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>First, the controlled benchmark (multiplying square matrices of side 8192 under the same 425 W power limit):</p>
<table>
  <thead>
      <tr>
          <th>GEMM Mode</th>
          <th style="text-align: right">Stock TFLOPS</th>
          <th style="text-align: right">Unlocked TFLOPS</th>
          <th style="text-align: right">Throughput Gain</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>FP16 → FP32</td>
          <td style="text-align: right">152.83</td>
          <td style="text-align: right">195.96</td>
          <td style="text-align: right"><strong>+28.22%</strong></td>
      </tr>
      <tr>
          <td>BF16 → FP32</td>
          <td style="text-align: right">153.81</td>
          <td style="text-align: right">250.97</td>
          <td style="text-align: right"><strong>+63.16%</strong></td>
      </tr>
      <tr>
          <td>TF32</td>
          <td style="text-align: right">76.49</td>
          <td style="text-align: right">145.55</td>
          <td style="text-align: right"><strong>+90.28%</strong></td>
      </tr>
      <tr>
          <td>Regular FP32 Control</td>
          <td style="text-align: right">54.27</td>
          <td style="text-align: right">54.71</td>
          <td style="text-align: right">+0.80%</td>
      </tr>
  </tbody>
</table>
<p>Compute paths taking FP16/BF16 inputs with FP32 accumulation improved significantly. <strong>However: INT8, INT4, and dp4a instruction throughput remained completely identical.</strong></p>

<h3 class="relative group">Strata Expert Kernels Run Pure Integer Instructions
    <div id="strata-expert-kernels-run-pure-integer-instructions" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#strata-expert-kernels-run-pure-integer-instructions" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Despite the large parameter count of MoE models, what instructions actually run when serving an IQ3_S-quantized model?</p>
<p>Examining Strata 0.1.48’s <a href="https://github.com/Niko1221/Strata/blob/5c8dd322528cc84f68f461ad54a506b9da8fa8d4/src/prefill/moe_fused_iq.cu#L163"  target="_blank" rel="noreferrer">quantized-expert prefill kernel</a> source code reveals the direct PTX instruction:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">mma.sync.aligned.m16n8k32.row.col.s32.s8.s8.s32</span></span></code></pre></div></div>
<p>Here, <code>s8</code> represents signed INT8 inputs, and <code>s32</code> represents INT32 accumulation. This instruction belongs entirely to the <strong>integer execution path that received zero speedup</strong>. While secondary routines (e.g. attention and minor cuBLAS calls) use some BF16 operations, the critical path is dominated by integer arithmetic and dequantization/data unpacking.</p>

<h3 class="relative group">The Bottleneck is Memory Bandwidth and Offloading, Not Compute
    <div id="the-bottleneck-is-memory-bandwidth-and-offloading-not-compute" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-bottleneck-is-memory-bandwidth-and-offloading-not-compute" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The unlock does not grant the 4090 D a single additional byte of memory bandwidth or PCIe bandwidth. Strata keeps a subset of experts in VRAM while offloading the rest to host RAM via CPU computation in an overlapping pipeline. The system is fundamentally bounded by memory bandwidth and data transfers. By Amdahl’s Law, speeding up an operation that occupies a negligible portion of the runtime yields no noticeable overall improvement.</p>

<h2 class="relative group">Benchmark Verification: Does Unlocking Make It Faster?
    <div id="benchmark-verification-does-unlocking-make-it-faster" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#benchmark-verification-does-unlocking-make-it-faster" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">Community Results: Controlled 48GB 4090 Benchmark (0.98x - 0.99x)
    <div id="community-results-controlled-48gb-4090-benchmark-098x---099x" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#community-results-controlled-48gb-4090-benchmark-098x---099x" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>A researcher evaluated this scenario on a hardware-modded 48 GB RTX 4090 running Strata 0.1.47 with IQ3_S under a <a href="https://github.com/JustAResearcher/gpu-unlock-ada/blob/d28c485418c3d9d034cd4bac19200bc33dd3453b/docs/evidence/rtx4090-48g-modded/serving-workload.md"  target="_blank" rel="noreferrer">controlled test</a>:</p>
<table>
  <thead>
      <tr>
          <th>Prefill Scenario</th>
          <th style="text-align: right">Stock tokens/s</th>
          <th style="text-align: right">Unlocked tokens/s</th>
          <th style="text-align: right">Unlocked / Stock Ratio</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>8K Input</td>
          <td style="text-align: right">3518.8</td>
          <td style="text-align: right">3457.8</td>
          <td style="text-align: right"><strong>0.983×</strong></td>
      </tr>
      <tr>
          <td>32K Input</td>
          <td style="text-align: right">3916.6</td>
          <td style="text-align: right">3890.3</td>
          <td style="text-align: right"><strong>0.993×</strong></td>
      </tr>
  </tbody>
</table>
<p>The data is unmistakable: under long-input prefill, performance showed no gain and even fell slightly within noise margins. Generation (decode) throughput similarly fluctuated without measurable advantage.</p>

<h3 class="relative group">Local Serving Window Observation
    <div id="local-serving-window-observation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#local-serving-window-observation" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>In my local Strata 0.1.48 deployment, monitor snapshots across long operating windows showed comparable patterns:</p>
<table>
  <thead>
      <tr>
          <th>Metric</th>
          <th style="text-align: right">Unlocked Window (82 reqs)</th>
          <th style="text-align: right">Stock Window (39 reqs)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Generated Tokens</td>
          <td style="text-align: right">60,707</td>
          <td style="text-align: right">25,163</td>
      </tr>
      <tr>
          <td>Weighted Generation Rate (tokens/s)</td>
          <td style="text-align: right">126.34</td>
          <td style="text-align: right">141.14</td>
      </tr>
      <tr>
          <td>Median Generation Rate (tokens/s)</td>
          <td style="text-align: right">130.6</td>
          <td style="text-align: right">142.2</td>
      </tr>
      <tr>
          <td>Weighted Prefill Rate (tokens/s)</td>
          <td style="text-align: right">1775.79</td>
          <td style="text-align: right">2170.54</td>
      </tr>
      <tr>
          <td>Prefix Reuse Ratio</td>
          <td style="text-align: right">94.02%</td>
          <td style="text-align: right">82.87%</td>
      </tr>
      <tr>
          <td>MTP Draft Acceptance Ratio</td>
          <td style="text-align: right">68.05%</td>
          <td style="text-align: right">72.58%</td>
      </tr>
  </tbody>
</table>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow" style="background-color: #fef3c7"
  
  >
  <span
    
      class="pe-3 flex items-center" style="color: #d97706"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span>
  </span>

  <span
    
      style="color: #b45309"
    
    >Request lengths and cache hit rates vary in natural workloads, so this is not a strictly controlled A/B test. However, it confirms that <strong>the stock-rate setup fully matches or exceeds the unlocked performance level in practice; unlocking delivers no palpable difference.</strong></span>
</div>


<h2 class="relative group">Which Workloads Actually Benefit from Unlocking?
    <div id="which-workloads-actually-benefit-from-unlocking" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#which-workloads-actually-benefit-from-unlocking" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>If quantized MoE inference gains almost nothing, where does the unlocked Tensor power actually pay off?</p>
<ol>
<li><strong>Full / Half-Precision Fine-Tuning and Training (LoRA / SFT)</strong>: Heavy matrix multiplication paths utilizing FP16/BF16 inputs with FP32 accumulation see immediate, significant acceleration.</li>
<li><strong>Diffusion Models for Image/Video Generation (Stable Diffusion / Flux / CogVideoX)</strong>: Denoising backbones rely heavily on dense floating-point GEMM residing entirely within VRAM.</li>
<li><strong>Dense LLM Inference with Native Precision (e.g., BF16) and Large Batches</strong>: Compute-bound rather than memory-bandwidth-bound regimes reap clear rewards.</li>
</ol>

<h2 class="relative group">Stability and Data Archiving
    <div id="stability-and-data-archiving" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#stability-and-data-archiving" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>During prolonged operation, the card encountered an <code>Xid 79: GPU has fallen off the bus</code> event. It also recurred once after reverting to stock rates, indicating the incident was not strictly tied to the unlock state itself, but rather related to power transients, drivers, or custom kernel settings (<code>7.3.0-ros2go-btf</code>). The card is currently running in stable daily service at stock rates.</p>
<p>A dedicated replay script with fixed prompts and aligned cache states has been prepared for future controlled tests. Sanitized raw CSVs and verification scripts are available:</p>
<ul>
<li><a href="/downloads/tensor-unlock-moe/requests.csv" >Sanitized Request-Timing CSV</a></li>
<li><a href="/downloads/tensor-unlock-moe/summary.json" >Summary and Measurement Notes JSON</a></li>
<li><a href="/downloads/tensor-unlock-moe/verify.py" >Offline Verification Script verify.py</a></li>
<li><a href="/downloads/tensor-unlock-moe/README.md" >Download Notes and Checksums</a></li>
</ul>
]]></content:encoded>
      
    </item>
    
  </channel>
</rss>
