<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Software Frontier]]></title><description><![CDATA[Where abstraction ends. Essays on GPU execution, kernel internals, and distributed systems at scale.]]></description><link>https://www.thesoftwarefrontier.com</link><image><url>https://substackcdn.com/image/fetch/$s_!SAY7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54550d86-2756-4131-8818-956604f6749d_608x608.png</url><title>The Software Frontier</title><link>https://www.thesoftwarefrontier.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 06 Jul 2026 19:30:28 GMT</lastBuildDate><atom:link href="https://www.thesoftwarefrontier.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Lorenzo Bradanini]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[softwarefrontier@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[softwarefrontier@substack.com]]></itunes:email><itunes:name><![CDATA[Lorenzo Bradanini]]></itunes:name></itunes:owner><itunes:author><![CDATA[Lorenzo Bradanini]]></itunes:author><googleplay:owner><![CDATA[softwarefrontier@substack.com]]></googleplay:owner><googleplay:email><![CDATA[softwarefrontier@substack.com]]></googleplay:email><googleplay:author><![CDATA[Lorenzo Bradanini]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Wafer & the Wallet]]></title><description><![CDATA[Memory costs are inflecting up as enterprise token budgets slam shut. The wafer math, the pass-through proof, and the engineering playbook that defends the spread.]]></description><link>https://www.thesoftwarefrontier.com/p/the-wafer-and-the-wallet</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/the-wafer-and-the-wallet</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Sun, 05 Jul 2026 07:56:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0y1r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0y1r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0y1r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!0y1r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!0y1r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!0y1r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0y1r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png" width="1122" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2521188,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/203533001?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0y1r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!0y1r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!0y1r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!0y1r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81fedd3-e26c-4b0d-9cc1-718e1c0f97e2_1122x1402.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Intro </h2><p>For three years, the cost of making a token fell every quarter while the budget to buy tokens grew without a meter. In <strong>H1 2026 both curves reversed</strong> at once: memory pass-through is raising the cost floor of every token served, while enterprises institutionalize token budgets at the ceiling. </p><p>This is the anatomy of <strong>inference&#8217;s first margin squeeze</strong>: the wafer math, the proof of pass-through, modeled cost floors marked to real market prices, and the engineering playbook that defends the spread.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Software Frontier is a reader-supported publication. Please, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PC3u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PC3u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 424w, https://substackcdn.com/image/fetch/$s_!PC3u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 848w, https://substackcdn.com/image/fetch/$s_!PC3u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 1272w, https://substackcdn.com/image/fetch/$s_!PC3u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PC3u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png" width="1100" height="353" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:353,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133192,&quot;alt&quot;:&quot;c00-masthead&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c00-masthead" title="c00-masthead" srcset="https://substackcdn.com/image/fetch/$s_!PC3u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 424w, https://substackcdn.com/image/fetch/$s_!PC3u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 848w, https://substackcdn.com/image/fetch/$s_!PC3u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 1272w, https://substackcdn.com/image/fetch/$s_!PC3u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96bbb590-bfcc-40f5-99ac-caf2f1d5b3bb_1100x353.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Two curves reversed in the same half-year</h2><p>Every industry eventually meets the quarter when its two defining curves cross. For LLM inference, that quarter just happened. </p><p>Since late 2022, the economics of this business rested on two assumptions so reliable nobody wrote them down: <strong>the cost of producing a token falls every quarter</strong> (process nodes, kernel engineering, quantization, and a relentless price war), and <strong>the budget for buying tokens grows without a meter</strong>, the era of &#8220;tokenmaxxing,&#8221; when Meta and Salesforce were publicly urging employees to consume as many tokens as possible. In the first half of 2026, both assumptions died within months of each other.</p><p><strong>Jaw one: the cost floor turned upward.</strong> That is the core of this issue: the deepest memory supercycle in the forty-year history of DRAM, transmitted measurably into GPU rental rates with a 4-6 week lag ( Fig. 7). For the first time since the ChatGPT moment, <strong>the marginal cost of serving a token is inflecting up, not down</strong>: driven by the single most supply-constrained commodity in technology.</p><p><strong>Jaw two: the price ceiling got institutionalized.</strong> SemiAnalysis published field data on July 2 from conversations with 50+ enterprises: Uber burned through its annual Claude Code and Codex budget in four months and responded with a<strong> $1,500/month per-employee cap</strong>; an aerospace manufacturer&#8217;s $250/month caps were exhausted by power users in four days; companies are switching off premium model tiers and downgrading defaults; enterprise budgets now range from $250 to tens of thousands per employee per month, but they are <em>budgets</em>, reviewed by finance. </p><p> Read the finding precisely, because it is not a demand-collapse story: SemiAnalysis concludes there is no material risk to 2H26 AI budgets and API spend keeps compounding. <strong>The jaw is not falling demand, it is the arrival of price sensitivity.</strong> </p><p>Unbounded willingness-to-pay is over; every serving provider now negotiates against a CFO&#8217;s cap instead of an enthusiast&#8217;s curiosity.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zbOW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zbOW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 424w, https://substackcdn.com/image/fetch/$s_!zbOW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 848w, https://substackcdn.com/image/fetch/$s_!zbOW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 1272w, https://substackcdn.com/image/fetch/$s_!zbOW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zbOW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png" width="1100" height="690" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:690,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig0&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig0" title="c-fig0" srcset="https://substackcdn.com/image/fetch/$s_!zbOW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 424w, https://substackcdn.com/image/fetch/$s_!zbOW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 848w, https://substackcdn.com/image/fetch/$s_!zbOW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 1272w, https://substackcdn.com/image/fetch/$s_!zbOW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f7041-8239-4c16-a157-e9ccd588f95f_1100x690.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9PWX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9PWX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 424w, https://substackcdn.com/image/fetch/$s_!9PWX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 848w, https://substackcdn.com/image/fetch/$s_!9PWX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 1272w, https://substackcdn.com/image/fetch/$s_!9PWX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9PWX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png" width="1100" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-callout0&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-callout0" title="c-callout0" srcset="https://substackcdn.com/image/fetch/$s_!9PWX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 424w, https://substackcdn.com/image/fetch/$s_!9PWX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 848w, https://substackcdn.com/image/fetch/$s_!9PWX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 1272w, https://substackcdn.com/image/fetch/$s_!9PWX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72d19ef9-e996-462d-bab6-03fab8436ba5_1100x473.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>The quarter the memory market broke</h2><p>Start with the raw numbers, because they have no precedent in the forty-year history of the DRAM industry. TrendForce&#8217;s Q1 2026 contract-price revisions came in at <strong>+90-95% quarter-over-quarter for conventional DRAM</strong>: revised <em>upward</em> from an initial forecast of +55-60% that analysts had already called unprecedented. </p><p>PC DRAM was expected to more than double in a single quarter; server DDR5 rose roughly 90%; <strong>NAND contract prices </strong>climbed 33-38% in the same window. Counterpoint tracked spot DRAM up 80-90% inside the quarter. </p><p>For the full year, TrendForce projects DRAM up more than 70% <em>on top of</em> the Q1 step-change; Bank of America has DRAM industry revenue +51% YoY and NAND +45%.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OkVP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OkVP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 424w, https://substackcdn.com/image/fetch/$s_!OkVP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 848w, https://substackcdn.com/image/fetch/$s_!OkVP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 1272w, https://substackcdn.com/image/fetch/$s_!OkVP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OkVP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png" width="1100" height="571" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:571,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig1" title="c-fig1" srcset="https://substackcdn.com/image/fetch/$s_!OkVP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 424w, https://substackcdn.com/image/fetch/$s_!OkVP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 848w, https://substackcdn.com/image/fetch/$s_!OkVP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 1272w, https://substackcdn.com/image/fetch/$s_!OkVP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fb89a05-21d2-440a-8e5c-7ad016d63e21_1100x571.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The supply side tells you why this is not a blip. <strong>SK Hynix announced in October 2025 that its entire 2026 production capacity was already sold out.</strong> Kioxia has said the same of its 2026 NAND output. </p><p>Micron shut down its Crucial consumer business outright (a two-decade brand, liquidated) to route every wafer toward <strong>hyperscaler and GPU-grade contracts</strong>, and its executives describe being able to cover at most two-thirds of medium-term demand for some customers.</p><p>Micron&#8217;s Boise fabs ramp in 2027-2028; the New York megafab in 2030. <strong>Jensen Huang</strong>, asked at CES 2026 whether gamers should resent AI for GPU prices, answered in effect that the world needs more memory factories. </p><blockquote><p><em>As stated even before, in the previous issues: when the largest memory buyer on Earth says the fix is on the supply side, the message downstream is: you will not negotiate your way to allocation relief.</em></p></blockquote><h3>Three structural breaks from every previous cycle</h3><p><strong>1. The demand driver is durable, not episodic.</strong> Prior shortages came from fab fires, earthquakes, supply discipline, or one-off demand pulses (crypto, pandemic PCs). This one comes from inference workloads compounding in production. IDC&#8217;s assessment calls it a <strong>&#8220;permanent reallocation&#8221; of the world&#8217;s wafer capacity, not a cyclical shortage</strong>, and IDC does not deploy the word &#8220;permanent&#8221; casually.</p><p><strong>2. The margin gradient is a one-way valve, and the wafer math is brutal.</strong> HBM carries gross margins 3-5&#215; commodity DRAM, so every rational fab reallocates cleanroom toward it. </p><p>But because of TSV formation, die thinning, stacking, and compounded assembly yield, <strong>one gigabyte of HBM consumes &#8776;4&#215; the wafer capacity of one gigabyte of standard DRAM; GDDR7 consumes &#8776;1.7&#215;</strong>. AI&#8217;s <em>effective</em> wafer claim reaches ~20% of world DRAM capacity in 2026 against total bit-supply growth of only 10-16% per year. </p><p>The arithmetic cannot close without starving someone, and &#8220;<em>someone</em>&#8221; is every non-AI buyer plus every AI buyer without a long-term agreement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6WWW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6WWW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 424w, https://substackcdn.com/image/fetch/$s_!6WWW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 848w, https://substackcdn.com/image/fetch/$s_!6WWW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 1272w, https://substackcdn.com/image/fetch/$s_!6WWW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6WWW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png" width="1100" height="562" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:562,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig2" title="c-fig2" srcset="https://substackcdn.com/image/fetch/$s_!6WWW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 424w, https://substackcdn.com/image/fetch/$s_!6WWW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 848w, https://substackcdn.com/image/fetch/$s_!6WWW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 1272w, https://substackcdn.com/image/fetch/$s_!6WWW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3a88d9d-78ef-4e79-8bfa-b0f22bbd8935_1100x562.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>3. The price </strong><em><strong>convergence</strong></em><strong> matters more than the price level.</strong> HBM3e historically sold at 4-5&#215; server DDR5 per bit. TrendForce expects that gap to compress to <strong>1-2&#215; by end-2026</strong>, not because HBM got cheaper, but because DDR5 inflated toward it. Sit with that. </p><p><strong>The entire tiered-memory architecture of modern serving (</strong><em>KV offload to host DRAM, paged hierarchies, DDR5-backed prefix caches, NVMe cold tiers</em><strong>) was designed in a world where the tier below HBM was 4-5&#215; cheaper per bit.</strong> </p><p>When the discount for descending a tier collapses from ~80% to ~30-50%, a large fraction of the &#8220;obvious&#8221; tiering optimizations of 2024-2025 stop being obvious. Section 5 does that math properly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J560!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J560!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 424w, https://substackcdn.com/image/fetch/$s_!J560!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 848w, https://substackcdn.com/image/fetch/$s_!J560!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 1272w, https://substackcdn.com/image/fetch/$s_!J560!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J560!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png" width="1100" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig3&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig3" title="c-fig3" srcset="https://substackcdn.com/image/fetch/$s_!J560!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 424w, https://substackcdn.com/image/fetch/$s_!J560!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 848w, https://substackcdn.com/image/fetch/$s_!J560!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 1272w, https://substackcdn.com/image/fetch/$s_!J560!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeefc492-5628-48c1-8f25-09ae71c75c19_1100x560.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One supply-side note that matters for H2: <strong>HBM4 becomes the mainstream HBM in the second half of 2026</strong>, with a doubled 2,048-bit interface, ~2 TB/s per stack, and a manufacturing-complexity premium above 30% over HBM3e. NVIDIA&#8217;s Rubin ships with up to 288 GB of HBM4 per GPU, and every one of those stacks is wafer capacity that used to be laptops.</p><div><hr></div><h2>The KV cache ate the memory supply</h2><p>The lazy narrative is &#8220;AI ate the memory market.&#8221; The precise narrative is that <strong>the KV cache ate the memory market</strong>, and the industry&#8217;s shift from training-dominated to inference-dominated compute is what lit the fuse.</p><p>Training demand is large but <em>concentrated and schedulable</em>: a fixed pool of HBM for weights, activations, and optimizer states, planned quarters ahead. Inference demand is <em>elastic and per-user</em>: every concurrent conversation, agent trajectory, and <strong>200K-token codebase </strong>instantiates its own slab of state that must live somewhere in the hierarchy for the life of the request, and increasingly beyond it, as prefix caches persist context between turns. </p><p>Industry estimates via TrendForce put cloud high-speed memory consumption near <strong>3 exabytes in 2026</strong>, with core inference platforms (<em>Gemini-, Bedrock-, ChatGPT-class serving</em>) accounting for ~750 PB of <em>live</em> memory demand before redundancy roughly doubles it. </p><p>TrendForce separately projects that <strong>by 2029 inference (not training) becomes the primary driver of AI server demand outright</strong>, and North American CSPs are already bulk-buying high-capacity DDR5 RDIMMs specifically for inference fleets, the demand class that used to be the safety valve absorbing DRAM oversupply.</p><h3>The per-token physics, derived from first principles</h3><p>Everything in this issue hangs on one number: bytes of KV state per token. Take the workhorse case, a Llama-3-class 70B dense model with grouped-query attention: 80 layers, 8 KV heads, head dimension 128.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zKAn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zKAn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 424w, https://substackcdn.com/image/fetch/$s_!zKAn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 848w, https://substackcdn.com/image/fetch/$s_!zKAn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 1272w, https://substackcdn.com/image/fetch/$s_!zKAn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zKAn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png" width="1100" height="449" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:449,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-math0&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-math0" title="c-math0" srcset="https://substackcdn.com/image/fetch/$s_!zKAn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 424w, https://substackcdn.com/image/fetch/$s_!zKAn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 848w, https://substackcdn.com/image/fetch/$s_!zKAn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 1272w, https://substackcdn.com/image/fetch/$s_!zKAn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf0f9d6d-1829-4a06-b45c-6306b2c3dd3b_1100x449.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QCjx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QCjx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 424w, https://substackcdn.com/image/fetch/$s_!QCjx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 848w, https://substackcdn.com/image/fetch/$s_!QCjx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 1272w, https://substackcdn.com/image/fetch/$s_!QCjx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QCjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png" width="1100" height="625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:625,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig4&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig4" title="c-fig4" srcset="https://substackcdn.com/image/fetch/$s_!QCjx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 424w, https://substackcdn.com/image/fetch/$s_!QCjx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 848w, https://substackcdn.com/image/fetch/$s_!QCjx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 1272w, https://substackcdn.com/image/fetch/$s_!QCjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca93064a-232c-4fe8-b04b-919a5b7a5ea3_1100x625.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A single 128K sequence on the GQA-8 model pins <strong>~41 GB at FP16: half an H100&#8217;s entire HBM for one user&#8217;s context</strong>, before a single weight is stored. This is why effective batch size at long context is a memory-capacity calculation, not a compute calculation, and why <strong>every marginal concurrent user at long context is, economically, a memory purchase</strong>. </p><p>Multiply by the fleet: 10,000 concurrent long-context sequences at FP8 KV pins <strong>~200 TB of state across HBM</strong>, DDR5, and NVMe, state that produces no tokens itself; it exists purely so decode can stream it past the compute units at terabytes per second. </p><p>The <strong>2026 memory market</strong> is what happens when the industry&#8217;s aggregate KV state, growing super-linearly with agent adoption and context inflation, collides with wafer supply growing 10-16% a year.</p><h3>Two second-order effects complete the picture</h3><p><strong>NAND got dragged in.</strong> NVMe became the cold tier for prefix caches and the staging layer for weights (including GPU-direct storage paths). Kioxia now says nearly half its future NAND demand could come from AI. Meanwhile Samsung and SK Hynix <em>cut</em> NAND wafer output in 2024-2025 while chasing HBM margins. Omdia has Samsung&#8217;s NAND wafers falling 4.9M&#8594;4.68M and SK Hynix&#8217;s 1.9M&#8594;1.7M. <strong>There is no cheap tier left to hide in.</strong></p><p><strong>The host-DRAM tax on every GPU node inflated.</strong> A serious 2026 inference node pairs its GPUs with 1-2 TB of DDR5 for KV offload, CPU-side batching, and cache tiers. At Q1 2026 server-DRAM pricing, the host memory on a single node can cost what a mid-range GPU did two years ago. No 2024-vintage TCO model has this line item at anywhere near its current size.</p><div><hr></div><h2>Roofline: why prefill and decode were never the same workload</h2><p>Before the silicon story makes sense, you need the roofline argument stated with numbers, not vibes. A kernel&#8217;s attainable throughput is bounded by min(peak_FLOPs, intensity &#215; bandwidth), where <strong>arithmetic intensity</strong> is FLOPs performed per byte moved from memory. </p><p>The machine has a <em>ridge point</em>, the intensity at which it stops being bandwidth-bound and becomes compute-bound.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4bPr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4bPr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 424w, https://substackcdn.com/image/fetch/$s_!4bPr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 848w, https://substackcdn.com/image/fetch/$s_!4bPr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 1272w, https://substackcdn.com/image/fetch/$s_!4bPr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4bPr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png" width="1100" height="483" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:483,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-math1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-math1" title="c-math1" srcset="https://substackcdn.com/image/fetch/$s_!4bPr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 424w, https://substackcdn.com/image/fetch/$s_!4bPr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 848w, https://substackcdn.com/image/fetch/$s_!4bPr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 1272w, https://substackcdn.com/image/fetch/$s_!4bPr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93058626-ab79-40c9-b56a-cf5c87b9acb2_1100x483.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6tit!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6tit!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 424w, https://substackcdn.com/image/fetch/$s_!6tit!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 848w, https://substackcdn.com/image/fetch/$s_!6tit!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 1272w, https://substackcdn.com/image/fetch/$s_!6tit!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6tit!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png" width="1100" height="647" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a859114a-4861-45ca-8684-6e2ac283494e_1100x647.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:647,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig5&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig5" title="c-fig5" srcset="https://substackcdn.com/image/fetch/$s_!6tit!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 424w, https://substackcdn.com/image/fetch/$s_!6tit!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 848w, https://substackcdn.com/image/fetch/$s_!6tit!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 1272w, https://substackcdn.com/image/fetch/$s_!6tit!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa859114a-4861-45ca-8684-6e2ac283494e_1100x647.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The corollary that most cost models miss: <strong>decode throughput is not a FLOPs number, it is a bandwidth budget divided by bytes-per-step</strong>. Per decode step the device must stream the weights once plus every live sequence&#8217;s KV:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sjTw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sjTw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 424w, https://substackcdn.com/image/fetch/$s_!sjTw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 848w, https://substackcdn.com/image/fetch/$s_!sjTw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 1272w, https://substackcdn.com/image/fetch/$s_!sjTw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sjTw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png" width="1100" height="381" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:381,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-math2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-math2" title="c-math2" srcset="https://substackcdn.com/image/fetch/$s_!sjTw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 424w, https://substackcdn.com/image/fetch/$s_!sjTw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 848w, https://substackcdn.com/image/fetch/$s_!sjTw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 1272w, https://substackcdn.com/image/fetch/$s_!sjTw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faedb9217-181e-49c1-8ffb-258e768d104d_1100x381.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Read those three lines again. Same GPU, same model, same bandwidth: <strong>16&#215; throughput difference between short-context and long-context traffic</strong>, and <strong>a clean 2&#215; recovered at 128K purely by halving KV bytes</strong>. Context length is not a feature flag; it is a cost multiplier that acts through memory. </p><p>Every<strong> KV byte you remove</strong> converts directly into either more concurrent sequences or faster steps: both of which are revenue.</p><div><hr></div><h2>Rubin CPX is a memory trade wearing a GPU costume</h2><p>Now read <strong>NVIDIA&#8217;s 2026 inference roadmap </strong>through the memory market and it snaps into focus in a way most launch coverage missed. If prefill is compute-bound and decode is bandwidth-bound (&#167;03), then serving both phases on <strong>identical HBM-stuffed GPUs</strong> means that during prefill you are paying for the most supply-constrained, margin-rich commodity on the planet (HBM bandwidth) <em>and not using it</em>. </p><p>In 2024 that was an inefficiency. In 2026, with HBM at 4&#215; wafer-equivalent cost and fully allocated into next year, <strong>it is an unforced error measured in real money</strong>.</p><p><strong>Rubin CPX is the correction.</strong> Announced at the AI Infra Summit in September 2025, detailed through CES and GTC 2026, generally available late this year: a monolithic prefill-specialized die pairing <strong>30 PFLOPS of sparse NVFP4 compute</strong><em> (20 PFLOPS dense, per SemiAnalysis)</em><strong> with 128 GB of GDDR7 at only ~2 TB/s of bandwidth</strong> (32 Gbps GDDR7 on a 512-bit bus. </p><p>That bandwidth would embarrass a decode GPU) it&#8217;s below an H100. On a prefill part it is the entire point: SemiAnalysis&#8217;s launch framing was exactly right, a chip deliberately skinny on bandwidth and fat on compute, because that is what prefill consumes. Its intensity budget sits far to the right of <strong>Fig. 5&#8217;s ridge, where GDDR7 </strong>is not a compromise but a correct sizing.</p><p>Overlay the wafer math and the arbitrage is explicit: GDDR7 costs 1.7&#215; standard DRAM wafer-equivalent; HBM costs 4&#215;, plus CoWoS packaging, interposer, and thermal budget. <strong>By building the prefill tier out of GDDR7, NVIDIA routes the fastest-growing slice of inference demand</strong><em> (long-context prompt processing) </em><strong>around the most constrained commodity in its own supply chain.</strong> </p><p>Every prefill FLOP served from GDDR7 is HBM allocation freed for decode, where it earns its keep.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n-TM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n-TM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 424w, https://substackcdn.com/image/fetch/$s_!n-TM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 848w, https://substackcdn.com/image/fetch/$s_!n-TM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 1272w, https://substackcdn.com/image/fetch/$s_!n-TM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n-TM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png" width="1100" height="460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-table0&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-table0" title="c-table0" srcset="https://substackcdn.com/image/fetch/$s_!n-TM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 424w, https://substackcdn.com/image/fetch/$s_!n-TM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 848w, https://substackcdn.com/image/fetch/$s_!n-TM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 1272w, https://substackcdn.com/image/fetch/$s_!n-TM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f4658-7538-401d-8414-7c00ee5969d1_1100x460.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>NVIDIA is pitching this with a number that deserves both scrutiny and attention : <strong>$5B of token revenue per $100M of infrastructure</strong>, 30-50&#215; platform ROI, and naming Cursor, Runway, and Magic as early partners, which tells you the target token distribution: repository-scale coding context and long-form generative media, i.e., prefill-dominated workloads. Discount the multiplier as marketing; the direction is load-bearing.</p><p>The strategic read for this audience: <strong>hardware disaggregation of prefill and decode is memory-market arbitrage instantiated in silicon, and it will not stay proprietary to NVIDIA</strong>. SRAM-based decode tiers are being positioned into the same disaggregated fabrics, AMD will be forced to answer, and every serious serving stack (<em>Dynamo, vLLM&#8217;s disagg mode, SGLang, Mooncake-style architectures</em>) has converged on <strong>KV-cache-transfer-over-fabric as the central abstraction of 2026 serving</strong>. </p><p>The clearest tell that this is permanent: per Tom&#8217;s Hardware&#8217;s platform teardown, the Vera Rubin rack&#8217;s BlueField-4 DPU ships with an <em>integrated SSD specifically to store KV cache</em>: cached context now has its own dedicated hardware tier in the reference design. </p><p>If your mental model of an &#8220;<em>inference GPU</em>&#8221; is one SKU doing both phases, you are one hardware generation behind the economics, and Q1&#8217;s memory prices just made that lag expensive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NaQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NaQE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 424w, https://substackcdn.com/image/fetch/$s_!NaQE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 848w, https://substackcdn.com/image/fetch/$s_!NaQE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 1272w, https://substackcdn.com/image/fetch/$s_!NaQE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NaQE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png" width="1100" height="555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:555,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-callout1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-callout1" title="c-callout1" srcset="https://substackcdn.com/image/fetch/$s_!NaQE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 424w, https://substackcdn.com/image/fetch/$s_!NaQE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 848w, https://substackcdn.com/image/fetch/$s_!NaQE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 1272w, https://substackcdn.com/image/fetch/$s_!NaQE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a817d3-72a1-4c0a-910b-a5ebef3df62f_1100x555.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!quTc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!quTc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 424w, https://substackcdn.com/image/fetch/$s_!quTc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 848w, https://substackcdn.com/image/fetch/$s_!quTc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 1272w, https://substackcdn.com/image/fetch/$s_!quTc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!quTc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png" width="1100" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-callout2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-callout2" title="c-callout2" srcset="https://substackcdn.com/image/fetch/$s_!quTc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 424w, https://substackcdn.com/image/fetch/$s_!quTc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 848w, https://substackcdn.com/image/fetch/$s_!quTc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 1272w, https://substackcdn.com/image/fetch/$s_!quTc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc975bc73-b912-4dc6-a8c5-9b0f5d200935_1100x433.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>The repriced hierarchy, and what happens to cost per token</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4czk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4czk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 424w, https://substackcdn.com/image/fetch/$s_!4czk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 848w, https://substackcdn.com/image/fetch/$s_!4czk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 1272w, https://substackcdn.com/image/fetch/$s_!4czk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4czk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png" width="1100" height="672" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:672,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-table1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-table1" title="c-table1" srcset="https://substackcdn.com/image/fetch/$s_!4czk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 424w, https://substackcdn.com/image/fetch/$s_!4czk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 848w, https://substackcdn.com/image/fetch/$s_!4czk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 1272w, https://substackcdn.com/image/fetch/$s_!4czk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74d49549-f1d1-428f-b202-669ebefeea81_1100x672.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The uncomfortable synthesis: <strong>the price ratios between tiers compressed at the same moment the absolute levels rose</strong>, and tiering strategies earn their complexity from the <em>ratio</em>, not the level. A prefix cache offloading to DDR5 at 20-25% of HBM&#8217;s per-bit cost is an easy win. </p><p>The same cache at 50-70% of HBM&#8217;s per-bit cost must clear a much higher bar once you charge it for transfer bandwidth, PCIe hops, TTFT-on-miss, and the payroll that maintains it.</p><h3>The offload break-even, derived</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m4Pk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m4Pk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 424w, https://substackcdn.com/image/fetch/$s_!m4Pk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 848w, https://substackcdn.com/image/fetch/$s_!m4Pk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 1272w, https://substackcdn.com/image/fetch/$s_!m4Pk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m4Pk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png" width="1100" height="449" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:449,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-math3&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-math3" title="c-math3" srcset="https://substackcdn.com/image/fetch/$s_!m4Pk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 424w, https://substackcdn.com/image/fetch/$s_!m4Pk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 848w, https://substackcdn.com/image/fetch/$s_!m4Pk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 1272w, https://substackcdn.com/image/fetch/$s_!m4Pk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796ba650-9bfc-40aa-ac94-41d75ad0ed8a_1100x449.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>System prompts, shared codebase contexts, RAG corpus headers: cache. One-shot user uploads and cold agent trajectories: recompute. <strong>Cache residency is now a metered commodity; treat admission like an underwriting decision.</strong> </p><p>One nuance cuts the other way: NAND inflated <em>less</em> than DRAM, so the relative case for demoting warm entries to NVMe actually improved even as both tiers rose.</p><h3>Three channels into cost per token</h3><p><strong>Channel 1: CapEx per node.</strong> HBM is now the <strong>single largest line item in a flagship accelerator&#8217;s package BOM</strong> (SemiAnalysis&#8217;s finding for the GB300, after rising as a share every generation since Hopper) and adding host DDR5 and NVMe puts memory at roughly half the bill of a modern inference node (author&#8217;s estimate on top of that sourced base). </p><p>HBM moves slowly through long-term contracts; host DRAM and SSD are bought near spot: which is where 2026 budgets are bleeding now. A node spec&#8217;d mid-2025 with 1.5 TB DDR5 + 30 TB NVMe carries tens of thousands of dollars of new memory cost at current prices. Amortized over four years at high utilization it&#8217;s single-digit percent per token, but it compounds with Channel 2.</p><p><strong>Channel 2: the capacity ceiling (the big one).</strong> When memory binds, its price doesn&#8217;t just raise cost : <strong>it caps revenue per node</strong>. Max concurrency = free-memory-after-weights &#247; KV-bytes-per-sequence; decode throughput scales with batch until bandwidth saturates. As traffic mix shifts long-context (it is: agents, codebases, multimodal), each node serves fewer users and each token carries more fixed cost. </p><p><strong>Cost per token rises without any component getting more expensive: pure mix shift.</strong> The shortage means you can&#8217;t fix it by bolting on DRAM at 2024 prices; the escape routes are compression and disaggregation. Both are engineering, not procurement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_h4r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_h4r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 424w, https://substackcdn.com/image/fetch/$s_!_h4r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 848w, https://substackcdn.com/image/fetch/$s_!_h4r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 1272w, https://substackcdn.com/image/fetch/$s_!_h4r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_h4r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png" width="1100" height="647" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:647,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig6&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig6" title="c-fig6" srcset="https://substackcdn.com/image/fetch/$s_!_h4r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 424w, https://substackcdn.com/image/fetch/$s_!_h4r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 848w, https://substackcdn.com/image/fetch/$s_!_h4r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 1272w, https://substackcdn.com/image/fetch/$s_!_h4r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16083e0e-6498-46d6-80ae-a32f3316319e_1100x647.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Channel 3: the tier-ratio compression</strong> of Fig. 3, which quietly deprecates a generation of offloading tricks and re-rates model-architecture choices (&#167;02, Fig. 4).</p><h3>Winners, losers, and the direction of the tilt</h3><p><strong>Hyperscalers and frontier labs are insulated.</strong> Multi-year HBM/DDR5 LTAs signed pre-squeeze, first-priority allocation (Micron: &#8220;larger, strategic customers&#8221;), fleets big enough that architecture fixes amortize across <strong>trillions of tokens. </strong></p><p><strong>Databricks&#8217; disclosure</strong> that cost-aware autoscaling and &#8220;model unit&#8221; abstractions cut GPU spend over 80% versus static provisioning (on a platform serving 120 trillion tokens a month) shows where leverage lives at that scale: <em>utilization engineering</em>, because their input prices are contractually smoothed.</p><p><strong>Mid-tier providers and self-hosters absorb the shock.</strong> They buy near spot, hold no allocation priority, and their pitch (undercutting frontier APIs) sits directly on the inflating commodity. Worse, their buyers are the newly capped: under a token budget, an enterprise squeezes more work from the same spend rather than paying up, so the mid-tier faces rising input costs and a customer base structurally optimizing against price <em>at the same time</em>.</p><p> That is the <strong>textbook geometry of a margin squeeze</strong>, and it lands here first. Watch for: per-token price floors firming through H2 2026 in open-weights serving; long-context surcharges turning explicit; and prompt-caching <em>pricing</em> rebalancing: cached-token discounts exist because storage was cheap relative to recompute, and that ratio just moved. Cache-storage line items (already visible in frontier pricing) will spread.</p><p><strong>The self-hosting math shifted in a direction almost nobody has updated for.</strong> The 2025 pitch (&#8221;your $15-25K refurbished H100 workstation replaces $500/month of API spend&#8221;) has two 2026 problems. The workstation&#8217;s own BOM inflated: RAM alone on a new server build can now approach the cost of an entire refurbished platform. And the API side is partially shielded by hyperscaler contract insulation plus superior compression engineering. </p><p>The perverse result: <strong>the memory supercycle is a centralizing force, it taxes small-fleet inference more heavily than hyperscale inference, at precisely the moment open-weights quality made decentralized serving viable.</strong> </p><p>If you&#8217;re modeling a GPU buy this year, redo it with 2026 memory line items, and note that used enterprise hardware with pre-crisis RAM already installed is currently the cleanest arbitrage in the market, which is exactly why the refurb channel is having a moment.</p><div><hr></div><h2>Proof of pass-through: the March repricing, and the token bill in real dollars</h2><p>A thesis this size needs a smoking gun: evidence that memory contract prices actually reach the price <em>you</em> pay per GPU-hour, on a measurable lag. Q1 2026 provided it.</p><p>Silicon Data&#8217;s SDB200RT index (the standardized benchmark for B200 cloud rental pricing) opened 2026 at 4.40, drifted through January and February, then <strong>rose 23.6% inside March alone</strong>, crossing 5.0 on March 15 and 6.0 on March 23 before settling at 5.48: up 24.4% year-to-date.</p><p> Their attribution is the entire argument of this issue in one sentence: <strong>Samsung and SK Hynix raised HBM3e contract prices ~20% for 2026 deliveries, NVIDIA revised hardware MSRPs upward in late February citing memory component costs, and those input costs flowed into cloud hourly rates with a 4-6 week lag</strong>: landing squarely in March. </p><p>Meanwhile the two-year-old H100, whose memory was bought at pre-squeeze prices, traded in a tight, boring band all quarter. Same market, same month: <strong>the GPUs carrying new memory repriced; the GPUs carrying old memory didn&#8217;t.</strong> That divergence <em>is</em> the supercycle reaching your invoice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r2ZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r2ZO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 424w, https://substackcdn.com/image/fetch/$s_!r2ZO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 848w, https://substackcdn.com/image/fetch/$s_!r2ZO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 1272w, https://substackcdn.com/image/fetch/$s_!r2ZO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r2ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png" width="1100" height="637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:637,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig7&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig7" title="c-fig7" srcset="https://substackcdn.com/image/fetch/$s_!r2ZO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 424w, https://substackcdn.com/image/fetch/$s_!r2ZO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 848w, https://substackcdn.com/image/fetch/$s_!r2ZO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 1272w, https://substackcdn.com/image/fetch/$s_!r2ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e1680-0830-4ab0-b17f-1a7755da9205_1100x637.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The token bill, priced in real mid-2026 dollars</h3><p>With real rental rates in hand (H200 working median ~$3.50/GPU-hr on-demand across neocloud trackers (cohort median ~$4.00; floor $2.30; hyperscalers to $13.78)) the bandwidth model from &#167;03 becomes an actual price sheet. </p><p>These are <strong>bandwidth-bound floors</strong>: ideal kernels, full overlap, output tokens only. Real deployments land at 50-70% of these throughputs; the <em>ratios</em> between cells are the robust result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-mk-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-mk-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 424w, https://substackcdn.com/image/fetch/$s_!-mk-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 848w, https://substackcdn.com/image/fetch/$s_!-mk-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 1272w, https://substackcdn.com/image/fetch/$s_!-mk-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-mk-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png" width="1100" height="313" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:313,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-math4&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-math4" title="c-math4" srcset="https://substackcdn.com/image/fetch/$s_!-mk-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 424w, https://substackcdn.com/image/fetch/$s_!-mk-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 848w, https://substackcdn.com/image/fetch/$s_!-mk-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 1272w, https://substackcdn.com/image/fetch/$s_!-mk-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59ba112-c8ab-4aed-b804-076fc419af92_1100x313.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sZWU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sZWU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 424w, https://substackcdn.com/image/fetch/$s_!sZWU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 848w, https://substackcdn.com/image/fetch/$s_!sZWU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 1272w, https://substackcdn.com/image/fetch/$s_!sZWU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sZWU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png" width="1100" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig8&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig8" title="c-fig8" srcset="https://substackcdn.com/image/fetch/$s_!sZWU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 424w, https://substackcdn.com/image/fetch/$s_!sZWU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 848w, https://substackcdn.com/image/fetch/$s_!sZWU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 1272w, https://substackcdn.com/image/fetch/$s_!sZWU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd100fe8c-3a01-47c9-ba87-4111eac15e28_1100x689.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One honest caveat, stated before a reader states it for me: this model charges every decode step for streaming the full weights and KV and ignores prefill cost, which at 128K is substantial and shifts spend toward exactly the CPX-shaped silicon. </p><p>A production number also carries utilization (Databricks&#8217; 80% savings figure is the size of <em>that</em> lever), SLO headroom, and interconnect overhead in multi-GPU serving. <strong>The model&#8217;s job is not to predict your invoice to the cent; it is to rank your decisions, and the ranking is unambiguous: </strong>context policy first, KV dtype second, hardware price third.</p><h3>The spread, marked to market. July 2, 2026</h3><p>Now close the loop the title promises. As of July 2, flat per-token pricing for Llama-3.3-70B-class serving spans <strong>$0.31-$0.90 per million output tokens</strong> across the fifteen providers Artificial Analysis tracks (DeepInfra&#8217;s FP8 &#8220;Turbo&#8221; at $0.40, Groq at $0.79, Together AI and Fireworks at $0.88-0.90) and the rate is <em>flat across the model&#8217;s 131K context window</em>. </p><p>Set those prices against this section&#8217;s floors and the cross-subsidy stops being an inference and becomes a table:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PvSl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PvSl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 424w, https://substackcdn.com/image/fetch/$s_!PvSl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 848w, https://substackcdn.com/image/fetch/$s_!PvSl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 1272w, https://substackcdn.com/image/fetch/$s_!PvSl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PvSl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png" width="1100" height="459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a284d54-9659-4978-82b2-8a7123776172_1100x459.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:459,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-table2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-table2" title="c-table2" srcset="https://substackcdn.com/image/fetch/$s_!PvSl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 424w, https://substackcdn.com/image/fetch/$s_!PvSl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 848w, https://substackcdn.com/image/fetch/$s_!PvSl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 1272w, https://substackcdn.com/image/fetch/$s_!PvSl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a284d54-9659-4978-82b2-8a7123776172_1100x459.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Note the confirming detail hiding in the market data: the price leader doesn&#8217;t serve the reference model at all, it serves an FP8-quantized variant. <strong>The cheapest provider in the market is this issue&#8217;s playbook, priced and shipped.</strong> </p><p>And the honest caveats, before a reader raises them: these floors are single-GPU bandwidth ideals (real serving is less efficient, which raises them), while real fleets also earn input-token revenue and batch mixed contexts (which lowers effective floors), so treat the magnitudes as directional. </p><p>The <em>sign pattern</em> is the robust result: <strong>at July 2026 flat prices, long-context traffic on 70B-class serving is sold below its modeled production floor, and budget-capped buyers remove the option of raising the flat rate to fix it.</strong> Hence the final item of &#167;07&#8217;s playbook.</p><div><hr></div><h2>Eight decisions, ranked by dollar leverage</h2><p>Everything above, compiled into action: ranked by expected cost impact per unit of engineering effort for a team serving open-weights models at scale in 2026. Under the scissors of &#167;00, read &#8220;cost impact&#8221; as what it now is: <strong>spread defense</strong>: every dollar of floor you remove is margin the ceiling can no longer take from you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xTts!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xTts!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 424w, https://substackcdn.com/image/fetch/$s_!xTts!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 848w, https://substackcdn.com/image/fetch/$s_!xTts!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 1272w, https://substackcdn.com/image/fetch/$s_!xTts!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xTts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png" width="1100" height="405" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:405,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play01&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play01" title="c-play01" srcset="https://substackcdn.com/image/fetch/$s_!xTts!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 424w, https://substackcdn.com/image/fetch/$s_!xTts!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 848w, https://substackcdn.com/image/fetch/$s_!xTts!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 1272w, https://substackcdn.com/image/fetch/$s_!xTts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193e4edc-128f-483f-8df8-7f9a299c4472_1100x405.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qafv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qafv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 424w, https://substackcdn.com/image/fetch/$s_!qafv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 848w, https://substackcdn.com/image/fetch/$s_!qafv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 1272w, https://substackcdn.com/image/fetch/$s_!qafv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qafv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png" width="1100" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6542ca3-f586-484f-920e-11ae05da957d_1100x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play02&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play02" title="c-play02" srcset="https://substackcdn.com/image/fetch/$s_!qafv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 424w, https://substackcdn.com/image/fetch/$s_!qafv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 848w, https://substackcdn.com/image/fetch/$s_!qafv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 1272w, https://substackcdn.com/image/fetch/$s_!qafv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6542ca3-f586-484f-920e-11ae05da957d_1100x378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OcjK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OcjK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 424w, https://substackcdn.com/image/fetch/$s_!OcjK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 848w, https://substackcdn.com/image/fetch/$s_!OcjK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 1272w, https://substackcdn.com/image/fetch/$s_!OcjK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OcjK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png" width="1100" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play03&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play03" title="c-play03" srcset="https://substackcdn.com/image/fetch/$s_!OcjK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 424w, https://substackcdn.com/image/fetch/$s_!OcjK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 848w, https://substackcdn.com/image/fetch/$s_!OcjK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 1272w, https://substackcdn.com/image/fetch/$s_!OcjK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb08315fd-80fd-475b-b82f-ecd2565bc281_1100x378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AJii!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AJii!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 424w, https://substackcdn.com/image/fetch/$s_!AJii!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 848w, https://substackcdn.com/image/fetch/$s_!AJii!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 1272w, https://substackcdn.com/image/fetch/$s_!AJii!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AJii!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png" width="1100" height="415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:415,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play04&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play04" title="c-play04" srcset="https://substackcdn.com/image/fetch/$s_!AJii!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 424w, https://substackcdn.com/image/fetch/$s_!AJii!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 848w, https://substackcdn.com/image/fetch/$s_!AJii!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 1272w, https://substackcdn.com/image/fetch/$s_!AJii!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4052a6f5-6c01-4e98-a857-d06cba0e22e5_1100x415.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lrul!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lrul!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 424w, https://substackcdn.com/image/fetch/$s_!lrul!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 848w, https://substackcdn.com/image/fetch/$s_!lrul!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 1272w, https://substackcdn.com/image/fetch/$s_!lrul!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lrul!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png" width="1100" height="306" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:306,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play05&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play05" title="c-play05" srcset="https://substackcdn.com/image/fetch/$s_!lrul!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 424w, https://substackcdn.com/image/fetch/$s_!lrul!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 848w, https://substackcdn.com/image/fetch/$s_!lrul!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 1272w, https://substackcdn.com/image/fetch/$s_!lrul!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2096bc08-9268-4de0-b7f2-3285f250e586_1100x306.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XHBY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XHBY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 424w, https://substackcdn.com/image/fetch/$s_!XHBY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 848w, https://substackcdn.com/image/fetch/$s_!XHBY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 1272w, https://substackcdn.com/image/fetch/$s_!XHBY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XHBY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png" width="1100" height="342" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:342,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play06&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play06" title="c-play06" srcset="https://substackcdn.com/image/fetch/$s_!XHBY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 424w, https://substackcdn.com/image/fetch/$s_!XHBY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 848w, https://substackcdn.com/image/fetch/$s_!XHBY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 1272w, https://substackcdn.com/image/fetch/$s_!XHBY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ca5727f-44af-4947-b152-5d01560fcf6d_1100x342.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3N8x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3N8x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 424w, https://substackcdn.com/image/fetch/$s_!3N8x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 848w, https://substackcdn.com/image/fetch/$s_!3N8x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 1272w, https://substackcdn.com/image/fetch/$s_!3N8x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3N8x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png" width="1100" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play07&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play07" title="c-play07" srcset="https://substackcdn.com/image/fetch/$s_!3N8x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 424w, https://substackcdn.com/image/fetch/$s_!3N8x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 848w, https://substackcdn.com/image/fetch/$s_!3N8x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 1272w, https://substackcdn.com/image/fetch/$s_!3N8x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7585f3d-de3d-479f-a018-ab52d6708861_1100x378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gfIz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gfIz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 424w, https://substackcdn.com/image/fetch/$s_!gfIz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 848w, https://substackcdn.com/image/fetch/$s_!gfIz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 1272w, https://substackcdn.com/image/fetch/$s_!gfIz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gfIz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png" width="1100" height="514" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:514,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-play08&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-play08" title="c-play08" srcset="https://substackcdn.com/image/fetch/$s_!gfIz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 424w, https://substackcdn.com/image/fetch/$s_!gfIz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 848w, https://substackcdn.com/image/fetch/$s_!gfIz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 1272w, https://substackcdn.com/image/fetch/$s_!gfIz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b53e289-c6b1-459b-a166-a7c2ee46298b_1100x514.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Five falsifiable predictions</h2><p>Scored publicly in Q1 2027, alongside the Issue 04 speculative-decoding calls. Confidence is stated so being wrong costs me something.</p><p><strong>P1 &#183; Supplyconfidence: high</strong><br>DRAM relief does not arrive before late 2027. New capacity (Micron Boise) ramps 2027-2028; suppliers themselves guide consumer relief to ~2028. Any 2027 hardware-refresh model priced at 2024 memory levels is fiction.</p><p><strong>P2 &#183; Architectureconfidence: high</strong><br>Open-weights flagships converge on compressed KV. By mid-2027 the majority of new frontier-adjacent open releases ship MLA-like latent attention, &#8804;8-head GQA, or hybrid sliding windows: marketed explicitly as serving-cost features. Model architecture is now downstream of the DRAM spot price.</p><p><strong>P3 &#183; Pricingconfidence: medium-high</strong><br>Per-token API pricing bifurcates by context residency: at least two major providers introduce or restructure explicit cached-context <em>storage</em> pricing (per-token-per-hour or equivalent) by mid-2027, decoupling state from compute. Partial confirmation is already on the books (Google Vertex bills per-hour cache storage and Anthropic bills TTL-tiered cache writes) so the live prediction is that this becomes the <em>norm in open-weights serving</em>, not just frontier practice.</p><p><strong>P4 &#183; Siliconconfidence: medium</strong><br>Prefill-specialized silicon becomes a category, not a SKU: a CPX competitor (AMD or an ASIC player) is announced within 12 months of CPX GA, and &#8220;prefill accelerator&#8221; enters the standard rack taxonomy.</p><p><strong>P5 &#183; Marketconfidence: medium</strong><br>The open-weights serving price war pauses: median $/Mtok for 70B-class serving on third-party clouds goes flat-to-up through H1 2027 (the first sustained non-decline in that series since it has existed. The March B200 repricing (Fig. 7) is the leading edge) and enterprise token budgets are the demand-side mechanism that lets long-context surcharges and cache-storage fees actually stick, because a buyer operating under a cap optimizes usage instead of switching providers.</p><h3>The dashboard: six leading indicators, with trigger levels</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ozsr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ozsr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 424w, https://substackcdn.com/image/fetch/$s_!ozsr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 848w, https://substackcdn.com/image/fetch/$s_!ozsr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 1272w, https://substackcdn.com/image/fetch/$s_!ozsr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ozsr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png" width="1100" height="1033" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1033,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-table3&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-table3" title="c-table3" srcset="https://substackcdn.com/image/fetch/$s_!ozsr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 424w, https://substackcdn.com/image/fetch/$s_!ozsr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 848w, https://substackcdn.com/image/fetch/$s_!ozsr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 1272w, https://substackcdn.com/image/fetch/$s_!ozsr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff24d4938-9512-4e15-9d7e-41f79234be1a_1100x1033.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GcTh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GcTh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 424w, https://substackcdn.com/image/fetch/$s_!GcTh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 848w, https://substackcdn.com/image/fetch/$s_!GcTh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 1272w, https://substackcdn.com/image/fetch/$s_!GcTh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GcTh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png" width="1100" height="593" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:593,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-fig9&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-fig9" title="c-fig9" srcset="https://substackcdn.com/image/fetch/$s_!GcTh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 424w, https://substackcdn.com/image/fetch/$s_!GcTh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 848w, https://substackcdn.com/image/fetch/$s_!GcTh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 1272w, https://substackcdn.com/image/fetch/$s_!GcTh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32114b54-e57d-4baa-bcb8-d576d0a9d59c_1100x593.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>The spread is the product now</h2><p>For two years, inference economics was a story about FLOPs: kernel efficiency, quantized matmuls, speculative decoding, Blackwell&#8217;s FP4 throughput. </p><p>Those battles were real; this publication has spent six issues inside them. But they were fought against a background assumption so universal nobody stated it: <em>bytes are cheap and getting cheaper.</em></p><p>That assumption died in Q1 2026. <strong>The binding constraint of the inference industry is now measured in wafer starts and TSV yields</strong>: in exabytes of KV state colliding with 10-16% annual bit-supply growth, in an IDC report that uses the word &#8220;permanent,&#8221; in a rental index that repriced 24% in one month because a memory contract reset five weeks earlier. </p><p>The consequences run one direction through the entire stack: hardware specializes by phase <strong>because HBM is too precious to waste</strong> on prefill; model architectures compress their KV because fat caches became unserveable; serving stacks reorganize around shipping cached state across fabrics because holding it still got expensive; and the cost advantage tilts toward <strong>whoever holds allocation contracts </strong>and compression engineering: which is to say, toward the largest players, in an industry that spent two years congratulating itself on decentralizing.</p><p>The engineers who internalize this fastest hold a simple advantage: while the market reprices memory, they reprice their <em>need</em> for it. <strong>Every KV byte you decline to allocate is bought at 2026 prices and sold at 2026 prices, at 100% margin, with zero lead time and no allocation meeting.</strong> The wafer sets the cost floor. The wallet sets the price ceiling. </p><p>The engineering in between is the only variable you control, and in a margin regime, that engineering stops being a cost-optimization side quest and <strong>becomes the P&amp;L itself.</strong> Squeezes do not reward the biggest fleet; they reward the widest spread per byte.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ULaf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ULaf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 424w, https://substackcdn.com/image/fetch/$s_!ULaf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 848w, https://substackcdn.com/image/fetch/$s_!ULaf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 1272w, https://substackcdn.com/image/fetch/$s_!ULaf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ULaf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png" width="1100" height="311" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d001de35-a3bc-4195-a51a-e01c27856add_1100x311.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:311,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-callout3&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-callout3" title="c-callout3" srcset="https://substackcdn.com/image/fetch/$s_!ULaf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 424w, https://substackcdn.com/image/fetch/$s_!ULaf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 848w, https://substackcdn.com/image/fetch/$s_!ULaf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 1272w, https://substackcdn.com/image/fetch/$s_!ULaf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd001de35-a3bc-4195-a51a-e01c27856add_1100x311.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>METHOD &amp; VERIFICATION</strong>. Market figures trace to named sources below; all KV, roofline, concurrency, and $/Mtok arithmetic is the author&#8217;s, derived in-text from published model configs and device datasheets so you can check every step. Cost floors are bandwidth-bound ideals: absolute values are lower bounds, ratios are the robust result. </p><p>The Fig. 7 path between published waypoints is interpolated; Fig. 3&#8217;s intermediate points are directional; Fig. 0 is a directional synthesis whose turning points, not slopes, are the sourced claims. Pricing data was spot-checked the week of publication and moves weekly: recheck before committing capital. Corrections run at the top of the next issue, as always.</p><div><hr></div><p><strong>SOURCES:</strong> <em>TrendForce: 1Q26 DRAM/NAND contract revisions; &#8220;Memory Wall&#8221; research (Jan 2026); HBM adoption &amp; 2029 inference-demand outlook; AI wafer-equivalent consumption via Commercial Times (Dec 2025) &#183; IDC (&#8221;Global Memory Shortage Crisis&#8221; (Feb 2026) &#183; IEEE Spectrum) &#8220;AI Is a Memory Hog&#8221; (Apr 2026) &#183; Counterpoint Research (Q1&#8217;26 spot DRAM tracking &#183; CNBC) Micron/SK Hynix/Samsung allocation &amp; CES 2026 reporting (Jan 2026) &#183; Avnet/Omdia/BofA (supercycle &amp; supply-relief estimates &#183; SemiAnalysis) &#8220;Another Giant Leap: The Rubin CPX Specialized Accelerator &amp; Rack&#8221; (Sep 2025) &#183; The Register (CES 2026 Vera Rubin systems coverage (Jan 2026) &#183; Tom&#8217;s Hardware) &#8220;Nvidia&#8217;s Vera Rubin platform in depth&#8221; (Nov 2025, incl. BlueField-4 KV-cache SSD) &#183; Futurum/Ori/NADDOD (Rubin CPX technical analyses &#183; NVIDIA) AI Infra Summit &amp; GTC 2026 announcements &#183; Databricks Engineering (&#8221;Reliable LLM Inference at Scale&#8221; (May 2026) &#183; SemiAnalysis) &#8220;TokenBudgeting: Our Conversations with Enterprises on Token Spend&#8221; (Jul 2, 2026) &#183; Artificial Analysis (Llama 3.3 70B provider benchmarking &amp; cache-pricing mechanics (Jul 2026) &#183; aipricing.guru / Price Per Token) provider price pages (sourced Jul 2, 2026) &#183; Silicon Data. SDB200RT B200 index, March 2026 update &#183; aimultiple GPU Rental Price Index; getdeploying B200/H200 trackers; Jarvislabs H200 pricing (2026) &#183; DeepSeek-V3 technical report (MLA configuration &#183; vLLM) NVFP4 KV-cache PR (in progress at publication).</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Software Frontier is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Router and the Wire]]></title><description><![CDATA[Mixture-of-experts promised cheaper inference by doing less arithmetic. The bill did not disappear. It moved into the network, and the entire shape of a 2026 serving stack is the receipt.]]></description><link>https://www.thesoftwarefrontier.com/p/the-router-and-the-wire</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/the-router-and-the-wire</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Mon, 29 Jun 2026 21:18:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5xDE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5xDE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5xDE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!5xDE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!5xDE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!5xDE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5xDE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2363576,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199726817?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5xDE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!5xDE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!5xDE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!5xDE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9cb9fb9-d6a7-45e1-a371-0d6456ee6809_1024x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The cost did not vanish. It moved.</h2><p>Every few months the inference market tells itself a story about where the money goes, and every few months the story is wrong in the same direction. For two years the story was memory. </p><p>The <strong>key-value cache grew with context</strong>, the weights grew with parameter count, and the binding constraint on a serving deployment was how many bytes of high-bandwidth memory you could buy and how fast you could read them. </p><p>That story was true, and it is the subject of two earlier issues of this publication. It is also no longer the whole story for the models that now define the frontier.</p><p>The frontier moved to sparsity. A <strong>dense model the size of DeepSeek-V3 </strong>would activate all 671 billion of its parameters on every token it processed. The mixture-of-experts version activates roughly 37 billion. </p><p>On paper that is a reduction in arithmetic of roughly eighteen to one, and it is the single reason a model with two-thirds of a trillion parameters can be served at all without a fleet of accelerators per request. </p><p>The promise of the architecture was always framed in floating-point operations: do less math, pay less money. The <strong>vLLM and SGLang communities</strong>, NVIDIA, DeepSeek, and every serving vendor in between repeated some version of it.</p><p>The arithmetic did get cheaper. What the framing left out is that the arithmetic was never the part that was hard to scale. When you spread 256 experts across <strong>dozens or hundreds of accelerators</strong>, a token routed to eight of them has to physically travel to those eight accelerators, be processed, and travel back to be recombined. </p><p>That round trip is an all-to-all communication pattern, and it does not appear in<strong> any FLOP count</strong>. It is the part of the bill that the sparsity story quietly moved off the compute line and onto the network line, where it has been growing ever since.</p><p>DigitalOcean&#8217;s engineering writers put the distinction more bluntly than most vendors will. For a <strong>dense model</strong>, they note, cost scales with memory and is linear and predictable. For a mixture-of-experts model, cost becomes <em>a game of communication</em>. That is the thesis of this issue, stated in five words by someone selling cloud capacity. </p><p>The rest of this report is the long version: what the all-to-all actually costs in bytes and in silicon, why a rack that lists for two to three million dollars is best understood as an answer to a networking problem rather than a compute one, and whether the <strong>wide expert parallelism</strong> that everyone is now deploying actually earns its keep.</p><p>There is a seductive counterexample worth disposing of immediately, because it will come up. The <strong>KTransformers project</strong> can run the complete DeepSeek-V3 model on a single low-cost server with one consumer GPU, a machine that costs in the neighborhood of ten thousand dollars, and still produce nearly twenty tokens per second. I</p><blockquote><p><em>f a mixture-of-experts model can run on a ten-thousand-dollar box, how can the routing be expensive? </em></p></blockquote><p>The answer is that the <strong>KTransformers </strong>configuration never pays the all-to-all toll, because there is no all-to-all. With every expert resident in the memory of a single node, routing a token to an expert is a memory lookup, not a network transfer. </p><p>The economics that follow in this issue are the economics of scale, of serving thousands of concurrent users at frontier latency, and the moment you cross the <strong>boundary from one node</strong> to many, the toll switches on. The single-box demo is real, and it is exactly why the multi-box reality is so often misunderstood.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lsqO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lsqO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!lsqO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!lsqO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!lsqO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lsqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97417,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199726817?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lsqO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!lsqO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!lsqO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!lsqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381212c9-40f7-4d9d-859e-fd3b4659c6bc_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>What sparsity actually buys, and what it borrows</h2><p>Begin with the structure of the model itself, because the geometry of the dispatch is dictated by it. <strong>DeepSeek-V3 carries 256 routed experts</strong> per mixture-of-experts layer plus one shared expert that processes every token. A gating network selects the top eight routed experts for each token.</p><p> The model has <strong>61 transformer layers,</strong> 58 of which are mixture-of-experts layers; the first few are dense. So for the overwhelming majority of the depth of the network, every single token triggers a routing decision, a dispatch to eight destinations, and a combine back.</p><p>The routing itself is not free, though it is cheap relative to the transfer.<strong> A gating network scores all 256 experts </strong>for every token and selects the top eight, and that scoring, the sorting, and the construction of the dispatch order add a small compute and synchronization cost before any data moves. </p><p>It is<strong> minor against the 168 kilobytes</strong> that follow, but it is one more thing the dense model never does, and at the token rates of a frontier deployment even minor per-token costs accumulate. The gating is also where the load imbalance originates, since it is the gate&#8217;s learned preferences that<strong> send too many tokens to too few experts</strong>, which makes it both the cheapest and the most consequential of the operations the router performs.</p><p>The sparsity is genuine and the savings are genuine. Switch Transformer, the architecture that popularized the modern top-k mixture, demonstrated <strong>roughly a sevenfold speedup</strong> over a dense model of equivalent quality, and that ratio has only widened as expert counts have grown. </p><p>When practitioners say mixture-of-experts reduces computation by ninety percent, they are describing the activated-parameter ratio, and they are not wrong about it. A<strong> token that touches 37 billion of 671 billion parameters</strong> is doing far less matrix multiplication than a token that touches all of them.</p><p>But the activation has to move. In a single-accelerator world, the experts a token needs are <strong>sitting in local memory</strong> and the only thing that travels is a memory read. In a serving deployment large enough to matter, the experts are spread across the accelerators by expert parallelism precisely so that each accelerator holds only a few of them and the aggregate weight footprint fits. </p><p>That is the entire point of <strong>expert parallelism</strong>: it is what lets you serve a model whose experts, summed, are far too large for any single device. And it is also what guarantees that the token and its eight chosen experts will, in general, live on different devices.</p><p>So the model does <strong>two collective</strong> operations per mixture-of-experts layer that a dense model never does. The dispatch, sometimes called the scatter, sends<strong> each token&#8217;s hidden activation</strong> to the devices holding its selected experts. The combine, the gather, takes the eight expert outputs and reduces them back into a single vector on the token&#8217;s home device. </p><p>Survey work on efficient inference serving is consistent on the consequence: this<strong> all-to-all exchange of token dispatch</strong> and output gathering is the bottleneck in large-scale mixture-of-experts inference. Not the expert math. The exchange around it.</p><p>This is the borrowing that the sparsity bargain does not advertise. You spend<strong> less on arithmetic and you take on a debt</strong> denominated in bandwidth, and the debt comes due on a part of the machine that has improved far more slowly than the compute has. </p><p>To see why that matters, you have to look at the wire.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>A rack-scale answer to a network problem</h2><p>The defining fact about modern accelerators is that their arithmetic has outrun their interconnect, and it has done so by a margin that is hard to overstate until you put the numbers on a single axis. A Blackwell B200 reads from <strong>its own high-bandwidth memory</strong> at roughly eight terabytes per second. </p><p>The <strong>fifth-generation NVLink fabric</strong> that connects it to its neighbors moves 1.8 terabytes per second per GPU, eighteen links at a hundred gigabytes per second each. That is the fast path between two accelerators, and it is already more than four times slower than the path to local memory. </p><p>Then you fall off the edge. A single four-hundred-gigabit InfiniBand network card, the scale-out path that connects one node to another, moves <strong>about fifty gigabytes per second. </strong>The cliff from on-package memory to the cross-node network is more than two orders of magnitude.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KbLz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KbLz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!KbLz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!KbLz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!KbLz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KbLz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Horizontal bar chart on a log scale comparing effective bandwidth: HBM3e on-package at 8000 GB/s, NVLink 5 fabric at 1800, DeepEP all-to-all over NVLink measured at 730, DeepEP all-to-all over RDMA internode at 90, and a single InfiniBand NIC at 50.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Horizontal bar chart on a log scale comparing effective bandwidth: HBM3e on-package at 8000 GB/s, NVLink 5 fabric at 1800, DeepEP all-to-all over NVLink measured at 730, DeepEP all-to-all over RDMA internode at 90, and a single InfiniBand NIC at 50." title="Horizontal bar chart on a log scale comparing effective bandwidth: HBM3e on-package at 8000 GB/s, NVLink 5 fabric at 1800, DeepEP all-to-all over NVLink measured at 730, DeepEP all-to-all over RDMA internode at 90, and a single InfiniBand NIC at 50." srcset="https://substackcdn.com/image/fetch/$s_!KbLz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!KbLz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!KbLz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!KbLz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a4fe2a3-24a7-436b-a1cd-cd49dbd9626b_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 1</span></strong> The bandwidth available to a token collapses as it travels outward from the chip. The all-to-all of a mixture-of-experts layer lives somewhere on the right half of this chart, and where exactly is the whole question.</figcaption></figure></div><p>This is the chart that explains the rest of the hardware industry&#8217;s behavior. If the <strong>all-to-all of a mixture-of-experts layer</strong> can be kept inside the NVLink domain, it runs at hundreds of gigabytes per second. </p><p>If it has to cross the InfiniBand fabric between racks, it runs at a fraction of that. Introl&#8217;s infrastructure analysis puts the ratio at roughly eighteen to one between scale-up bandwidth <strong>inside the NVLink domain</strong> and scale-out bandwidth between racks. For an architecture whose dominant cost is an all-to-all, that ratio is not a detail. It is the design center.</p><p>Which is what the <strong>GB200 NVL72 is.</strong> NVIDIA&#8217;s rack-scale system connects 72 Blackwell GPUs and 36 Grace CPUs into a single NVLink domain delivering 130 terabytes per second of aggregate, non-blocking, all-to-all bandwidth, with <strong>13.5 terabytes of high-bandwidth memory</strong> addressable as one pool. Before this system, the largest NVLink domain you could buy was eight GPUs on a single baseboard. </p><p>The NVL72 takes the fast interconnect and stretches it across an entire rack so that 72 accelerators can talk to each other as though they were neighbors on the same board. <strong>NVIDIA&#8217;s own materials describe the result as a single massive GPU</strong>, and for the purposes of a mixture-of-experts all-to-all, that marketing is closer to literally true than marketing usually is.</p><p>The price of that rack is two to three million dollars, it draws around a hundred and twenty kilowatts, and it is liquid-cooled because there is no other way to remove the heat. It is easy to read those numbers as a statement about <strong>compute density</strong>, and the 1.44 exaflops of four-bit tensor performance per rack invites that reading. </p><p>But the compute was never the scarce thing. You can buy <strong>720 petaflops of eight-bit compute</strong> in roughly 182 H100 accelerators for less money than an NVL72 costs. </p><p>What you cannot buy that way is a 72-way all-to-all domain. The premium on the rack is, in substantial part, the premium on the wire. It is the cost of <strong>not having to cross InfiniBand</strong> for the operation that a mixture-of-experts model performs 58 times per token.</p><blockquote><p><em><span>The premium on the rack is, in substantial part, the premium on the wire. It is the cost of not crossing InfiniBand for the operation a mixture-of-experts model performs fifty-eight times per token.</span></em></p></blockquote><p>Read this way, a great deal of the 2026 accelerator roadmap resolves into a single sentence: make the all-to-all domain larger than the problem. </p><p>At CES 2026 NVIDIA disclosed that the next-generation <strong>Vera Rubin NVL72 will roughly double per-GPU NVLink bandwidth</strong> to 3.6 terabytes per second and lift aggregate all-to-all bandwidth to 260 terabytes per second, with the explicit justification, in NVIDIA&#8217;s own words, that this is the bandwidth needed for the all-to-all communications of leading mixture-of-experts architectures. </p><p>The company has <strong>stopped being coy about it. </strong>The interconnect generation is being sold, by name, as the answer to the problem that the model generation created.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Twenty streaming multiprocessors, give or take</h2><p>Hardware sets the ceiling. Whether you reach it is a question of kernels, and the reference implementation for the <strong>mixture-of-experts all-to-all is DeepEP</strong>, the communication library DeepSeek open-sourced during its 2025 release week. </p><p>DeepEP is worth studying closely not because it is the only such library but because it is the one whose <strong>measured numbers are public</strong>, and those numbers are the closest thing the field has to a ground truth for what the all-to-all costs at the kernel level.</p><p>DeepEP provides two classes of kernel, and the split maps precisely onto the two phases of inference. The normal kernels are tuned for throughput and serve training and the <strong>prefill phase</strong>, where batches are large and the all-to-all moves a great deal of data at once. </p><p>The <strong>low-latency kernels</strong> are tuned for the decode phase, where each step generates one token per sequence, the batches are tiny, and what matters is not bandwidth but the round-trip time of the dispatch and combine. </p><p>This is the <strong>same prefill-versus-decode division</strong> that disaggregated serving exploits, examined one issue ago, now visible at the level of individual communication kernels.</p><p>The measured bandwidths tell the scale-up story in a single table. On Blackwell-class hardware, DeepEP&#8217;s dispatch kernel moves 726 gigabytes per second and<strong> its combine kernel 740 gigabytes per second</strong> when the experts are inside the NVLink domain. The same kernels, forced across the internode RDMA fabric on the same generation of hardware, move about 90 gigabytes per second each. </p><p>That is the<strong> eighteen-to-one ratio of Figure 1,</strong> reproduced at the kernel level on a real workload: the configuration DeepSeek published, with eight thousand tokens per batch, a <em>hidden dimension of 7168</em>, top-eight routing, eight-bit dispatch, and sixteen-bit combine.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aJDM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aJDM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!aJDM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!aJDM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!aJDM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aJDM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Grouped bar chart comparing DeepEP dispatch and combine kernel bandwidth: NVLink intranode at 726 and 740 GB/s versus RDMA internode at 90 GB/s each, roughly eight times slower off the NVLink domain.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Grouped bar chart comparing DeepEP dispatch and combine kernel bandwidth: NVLink intranode at 726 and 740 GB/s versus RDMA internode at 90 GB/s each, roughly eight times slower off the NVLink domain." title="Grouped bar chart comparing DeepEP dispatch and combine kernel bandwidth: NVLink intranode at 726 and 740 GB/s versus RDMA internode at 90 GB/s each, roughly eight times slower off the NVLink domain." srcset="https://substackcdn.com/image/fetch/$s_!aJDM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!aJDM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!aJDM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!aJDM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa35c0b14-487f-47ac-9079-b9349b576f29_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 2</span></strong> The same kernel, the same hardware, the same workload. The only variable is whether the experts sit inside the NVLink domain or across the network. That one boundary costs roughly a factor of eight.</figcaption></figure></div><p>The second thing DeepEP reveals is subtler and, for the economics, more important. <strong>Moving data costs compute.</strong> The all-to-all kernels do not run on dedicated networking silicon; they run on the same streaming multiprocessors that would otherwise be doing matrix multiplication. </p><p>Every SM assigned to push bytes through the fabric is an SM not computing an expert. <strong>DeepEP&#8217;s first version spent around 24 SMs</strong> on the communication for a training-scale all-to-all. </p><p>Its <strong>second version</strong>, a substantial rewrite that moved from a custom backend to a more lightweight one built on NVIDIA&#8217;s NCCL, cut that to <strong>between four and six SMs</strong> for the same work while matching or exceeding the old bandwidth. </p><p>The library&#8217;s authors describe the V2 rewrite as achieving extreme performance with <strong>several times fewer SM resources,</strong> and the measured table backs the claim: up to 1.3 times the peak bandwidth at up to four times fewer SMs.</p><p>But the decode path is hungrier than the training path, and here the numbers sharpen into a real cost. To hit maximum throughput on the NVLink decode all-to-all, DeepEP&#8217;s table shows the kernel consuming 64 streaming multiprocessors<strong>. A B200 has 148 of them.</strong> That is forty-three percent of the entire accelerator spent moving data rather than computing, in the configuration tuned for speed. </p><p>You can run the same kernel in a low-SM mode that uses 24, but you give up bandwidth to do it. The library also offers genuinely zero-SM paths for pipeline parallelism, <strong>context parallelism</strong>, and certain RDMA transfers, by offloading the movement to copy engines and the network cards directly, and a great deal of the <strong>engineering frontier in 2026 </strong>is about pushing more of the all-to-all onto those zero-SM paths. </p><p>The reason that frontier exists is <strong>Figure 3.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jiut!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jiut!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!jiut!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!jiut!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!jiut!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jiut!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bar chart of streaming multiprocessors consumed by communication kernels: DeepEP V1 training at 24 SMs, V2 training at 5, NVLink decode min-SM mode at 24, NVLink decode max-throughput mode at 64, against a reference line of 148 total SMs on a B200.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bar chart of streaming multiprocessors consumed by communication kernels: DeepEP V1 training at 24 SMs, V2 training at 5, NVLink decode min-SM mode at 24, NVLink decode max-throughput mode at 64, against a reference line of 148 total SMs on a B200." title="Bar chart of streaming multiprocessors consumed by communication kernels: DeepEP V1 training at 24 SMs, V2 training at 5, NVLink decode min-SM mode at 24, NVLink decode max-throughput mode at 64, against a reference line of 148 total SMs on a B200." srcset="https://substackcdn.com/image/fetch/$s_!jiut!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!jiut!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!jiut!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!jiut!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4713276c-ab2d-4df2-8213-757d8836a8bc_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 3</span></strong> The all-to-all is not free even when the wire is fast, because it is paid for in the same currency as the math. At peak decode throughput the communication kernel claims forty-three percent of the GPU.</figcaption></figure></div><p>There is real craft in how DeepEP hides this. The library exposes a hook-based mechanism for overlapping communication with computation: a dispatch is launched,<strong> independent work proceeds on the compute stream </strong>while the data is in flight, and only when the result is needed does the kernel wait. </p><p>Done well, the all-to-all latency disappears behind the expert computation and the SM cost is the only thing left to account for. Done badly, the all-to-all stalls the pipeline and the expensive accelerators sit idle waiting for the network. The <strong>difference between those two outcomes</strong> is most of the difference between a good mixture-of-experts deployment and a wasteful one, and none of it is visible in a<strong> FLOP count.</strong></p><p>The second version pushes the SM problem harder by moving the data movement off the streaming multiprocessors entirely wherever it can. Its experimental branches<strong> expose zero-SM paths</strong> for pipeline and context parallelism, handing the transfers to the GPU&#8217;s copy engines, and a <strong>zero-SM remote-memory primitive</strong> the authors call Engram that lets one device reach into another&#8217;s memory over RDMA without spending a single SM on the transfer. </p><p>The motivation is exactly <strong>Figure 3: </strong>every SM the network gives back is an SM the experts can use. The rewrite also abandoned the custom communication backend for a <strong>lighter one built on NVIDIA&#8217;s NCCL</strong>, which let it reuse existing communicators and scale the expert-parallel domain to as many as two thousand devices, far past anything a production model currently needs. </p><p>A separate branch rebuilds the kernels around the tensor-memory-accelerator instructions on<strong> Hopper and Blackwell</strong>, shrinking SM usage again and adding native four-bit support, which is how the dispatch leg of the toll gets cheaper at the same moment the experts do.</p><p>None of this would matter if the expert computation itself were not reorganized to match. The all-to-all delivers a <strong>variable number of tokens to each expert</strong>, because the gating network does not distribute traffic evenly, and a standard batched matrix multiply assumes a fixed shape. </p><p>The answer, embodied in DeepSeek&#8217;s companion <strong>DeepGEMM library</strong>, is a grouped matrix multiply that processes each expert&#8217;s variable token count as a contiguous segment, so the expert math runs as one efficient kernel rather than a ragged collection of small ones. </p><p>The <strong>communication and the computation are co-designed</strong>: the all-to-all produces exactly the memory layout the grouped GEMM wants to consume. </p><p>Pull either apart from the other and the efficiency collapses, which is part of why a<strong> tuned mixture-of-experts stack</strong> is so much harder to assemble than the FLOP savings would suggest.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What every token pays at the door</h2><p>The bandwidth numbers describe the pipe. The next question is how much the model tries to push through it, and that can be computed directly from the geometry, which makes it <strong>one of the few places in this analysis </strong>where the arithmetic is exact rather than measured.</p><p>Take <strong>DeepSeek-V3&#8217;s mixture-of-experts layer.</strong> Each token&#8217;s hidden activation is a vector of 7168 values. On the dispatch, those values are sent in eight-bit precision, so one byte each, and they are sent to each of the eight selected experts. That is <strong>7168 times 8, roughly 56 kilobytes of dispatch traffic</strong> per token per layer. </p><p>On the combine, each of the eight experts returns an output vector of the same width, but the combine is performed in sixteen-bit precision to preserve the accuracy of the reduction, so two bytes each. That is <strong>7168 times 2 times 8</strong>, roughly <strong>112 kilobytes of combine traffic per token</strong> per layer. </p><p>Add them and a single token, passing through a single mixture-of-experts layer, generates about 168 kilobytes of all-to-all traffic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2NvU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2NvU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!2NvU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!2NvU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!2NvU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2NvU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Stacked bar chart comparing bytes moved per token per layer: a dense layer at 14 KB with no routing, versus a mixture-of-experts layer at 168 KB total, split into 56 KB of eight-bit dispatch and 112 KB of sixteen-bit combine.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Stacked bar chart comparing bytes moved per token per layer: a dense layer at 14 KB with no routing, versus a mixture-of-experts layer at 168 KB total, split into 56 KB of eight-bit dispatch and 112 KB of sixteen-bit combine." title="Stacked bar chart comparing bytes moved per token per layer: a dense layer at 14 KB with no routing, versus a mixture-of-experts layer at 168 KB total, split into 56 KB of eight-bit dispatch and 112 KB of sixteen-bit combine." srcset="https://substackcdn.com/image/fetch/$s_!2NvU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!2NvU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!2NvU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!2NvU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe61e25-78e5-4414-864e-a3860fd9cdc0_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 4</span></strong> A derived figure for DeepSeek-V3 geometry. The routing multiplies per-token data movement by roughly twelve and, unlike a dense layer, all of it has to cross the fabric. The model stacks 58 of these layers.</figcaption></figure></div><p>Set that against what a dense layer moves for the same token, which is essentially nothing across the fabric: the activation stays on the device and the only traffic is the <strong>local memory read of about 14 kilobytes</strong>. The mixture-of-experts layer moves roughly twelve times as much data per token, and the crucial difference is not the multiple but the destination. </p><p>The dense traffic stays on-chip. The mixture-of-experts traffic crosses the network. And<strong> this happens 58 times</strong> as the token descends through the model.</p><p>Two things follow from the structure of those 168 kilobytes. The first is that the combine is twice the dispatch, because the combine runs in higher precision. This is not an arbitrary choice; reducing eight expert outputs in <strong>eight-bit precision degrades quality unacceptably</strong>, so the field has settled on eight-bit dispatch and sixteen-bit combine as the standard, and that asymmetry means the return trip is the more expensive leg. </p><p>Any optimization that can compress the combine, including the four-bit experiments now appearing in DeepEP&#8217;s experimental branches, attacks the larger half of the toll.</p><p>The second is that the toll is paid per token, which means the decode phase, where tokens are generated one at a time, pays it in the worst possible way. In prefill, <strong>thousands of tokens are dispatched together and </strong>the <strong>all-to-all amortizes its latency</strong> across an enormous batch; the kernel runs in its throughput regime and the bandwidth numbers of Figure 2 apply. </p><p>In decode, a single step might dispatch only a handful of tokens per sequence, the batch is tiny, the <strong>bandwidth of the pipe</strong> is irrelevant because the pipe is nearly empty, and what dominates is the fixed round-trip latency of reaching across the fabric and back. </p><p>This is why the low-latency decode kernels exist as a separate class, why they are <strong>willing to burn 64 SMs to shave microseconds</strong>, and why decode is the phase where the mixture-of-experts toll hurts most. </p><p>It is also why the entire industry serves prefill and decode on separately tuned pools of hardware, a point this publication examined at length one issue ago and which the all-to-all only sharpens.</p><p>The decode penalty is worth making concrete, because it is where the toll is most counterintuitive. At a service level of a hundred tokens per second per user, the budget for generating one token is ten milliseconds, and into that budget the model must <strong>fit 58 mixture-of-experts layers</strong>, each with a dispatch and a combine that reach across the fabric. </p><p>Inside the NVLink domain a round trip is measured in microseconds and 58 of them fit with room to spare; across the <strong>InfiniBand fabric</strong> the same round trips, with their higher fixed latency, begin to eat the budget directly. </p><p>That is why the decode all-to-all spends 64 SMs to shave microseconds, and why a decode deployment forced to leave the <strong>NVLink domain for its all-to-all can miss its latency target</strong> even when its aggregate bandwidth looks adequate on paper. In decode, latency is the currency, and the fabric boundary is where it gets spent.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Software Frontier&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Software Frontier</span></a></p><div><hr></div><h2>The hottest expert sets the clock</h2><p>There is a failure mode hiding inside the all-to-all that the bandwidth numbers do not capture at all, and it is the one that most often separates a deployment hitting its theoretical throughput from one falling well short of it. An <strong>all-to-all is a synchronization barrier. </strong></p><p>The combine cannot complete until every expert has returned its outputs, which means the slowest expert on the most overloaded device sets the pace for the entire operation. If the gating network sends a disproportionate share of tokens to a <strong>handful of popular experts</strong>, the devices holding those experts become stragglers, and every other device in the domain waits on them.</p><p>Expert load is not uniform in practice, and it is not even stable. Certain experts specialize in patterns that appear frequently in real traffic, and the imbalance shifts with the workload. Survey work documents the consequence plainly: <strong>imbalanced token distribution</strong> causes device underutilization, and the whole expensive all-to-all runs at the speed of its hottest path. </p><p>A mixture-of-experts deployment can have perfectly adequate aggregate bandwidth and still bleed throughput because the load is lumpy.</p><p>DeepSeek&#8217;s answer in production is an expert-parallel load balancer that the community has <strong>reproduced under the name EPLB</strong>. The mechanism is to identify the high-load experts from live deployment statistics and replicate them: a hot expert is duplicated onto multiple devices so that the tokens destined for it can be spread, flattening the straggler. This is a direct trade of memory for balance. </p><p>You spend extra capacity holding redundant copies of the popular experts in order to keep the all-to-all from stalling on them. It works, and it is now standard, but it is<strong> another line on the bill that the sparsity story did not mention</strong>, and it interacts with the deployment topology in a way that is worth seeing concretely.</p><p>DeepSeek runs the same model checkpoint as two physically different machines, one for each phase, and the contrast is the clearest illustration in the field of how the all-to-all reshapes a deployment. According to DeepSeek&#8217;s own published inference overview and the <strong>CloudMatrix serving analysis</strong> that reconstructs it, the prefill machine groups four nodes, 32 GPUs, into a single unit running 32-way expert parallelism alongside 32-way data parallelism. </p><p>Across those 32 GPUs the routed experts are distributed nine to a device once the redundant copies of the popular experts are counted, with the shared expert and the <strong>attention mechanism replicated on every one.</strong> The raw figure would be eight; the ninth is the load balancer at work. </p><p>The decode machine expands the same model to 18 nodes, 144 GPUs, running 144-way expert parallelism and <strong>144-way data parallelism</strong>, where each device holds only about two routed experts.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5OdG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5OdG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!5OdG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!5OdG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!5OdG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5OdG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two-panel chart. Left panel: GPUs in one expert-parallel domain, 32 for prefill versus 144 for decode. Right panel: routed experts per GPU, 8 for prefill versus 1.78 for decode, each plus one shared expert.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two-panel chart. Left panel: GPUs in one expert-parallel domain, 32 for prefill versus 144 for decode. Right panel: routed experts per GPU, 8 for prefill versus 1.78 for decode, each plus one shared expert." title="Two-panel chart. Left panel: GPUs in one expert-parallel domain, 32 for prefill versus 144 for decode. Right panel: routed experts per GPU, 8 for prefill versus 1.78 for decode, each plus one shared expert." srcset="https://substackcdn.com/image/fetch/$s_!5OdG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!5OdG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!5OdG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!5OdG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba346f04-17d0-4e74-8005-8d1018faff52_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 5</span></strong> One checkpoint, two machines. The decode deployment spreads the experts across more than four times as many GPUs, which is partly about latency and partly about leaving room to replicate the hot experts.</figcaption></figure></div><blockquote><p><em>Why spread the same 256 experts across 144 devices for decode when 32 sufficed for prefill?</em> </p><p><strong>Two reasons</strong>, and both come back to the all-to-all. </p></blockquote><ul><li><p>The first is latency: with<strong> fewer experts resident per device,</strong> each device does less work per step and the decode latency target is easier to hit. </p></li><li><p>The second is precisely the <strong>straggler problem</strong>. Spreading thin leaves headroom to replicate the popular experts without overflowing any device&#8217;s memory, so the load balancer has somewhere to put the redundant copies. </p></li></ul><p>The decode machine is wider not because the math demands it but because the communication and the balance do. <strong>The shape of the deployment is dictated by the toll,</strong> not the FLOPs.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The toolchain the toll demanded</h2><p>The all-to-all did not only reshape the hardware and the kernels. It pulled an entire toolchain into being around itself, and the size of that toolchain is the clearest measure of how far the cost migrated from the math. </p><p>A <strong>2026 mixture-of-experts</strong> serving stack at frontier scale is not a model and a runtime. It is a model, a communication library, a grouped-GEMM library, an expert load balancer, a disaggregation layer, and an overlap scheduler, each of which exists to manage some facet of the routing tax. The FLOP count described <strong>one of those six boxes</strong>.</p><p>Consider the overlap problem at the level of an entire forward pass rather than a single layer. <strong>Hiding the all-to-all behind computation</strong> works within a layer, but the decode phase is so latency-sensitive that the field has gone further and split each batch in two, running the communication of one half against the computation of the other in a continuous pipeline. </p><p><strong>SGLang&#8217;s two-batch overlap </strong>and the analogous schemes in other runtimes exist for one reason: to keep the expensive accelerators busy with expert math while the all-to-all of a different microbatch is in flight. It is the same instinct as the <strong>kernel-level hooks</strong>, lifted to the level of the request scheduler, and it is now a standard part of large-scale deployments rather than an exotic optimization.</p><p>Disaggregation adds a second communication problem on top of the all-to-all. Once prefill and decode run on separate pools of hardware, the <strong>key-value cache </strong>computed during prefill<strong> has to be shipped</strong> to the decode pool before generation can begin, and at frontier scale that transfer is large enough and frequent enough to need its own engine. </p><p>The <strong>Mooncake transfer engine</strong> and the equivalent layers inside vLLM and SGLang exist to move key-value caches across the network efficiently, overlapping the transfer with computation so the handoff does not stall the pipeline. This is a network tax distinct from the all-to-all, and it is the price of the <strong>prefill-decode split</strong> that the all-to-all economics make worthwhile in the first place. </p><p>The <strong>two taxes are siblings</strong>: both are consequences of spreading one model&#8217;s inference across many devices, and both are paid down by the same instinct of overlapping transfer with compute.</p><p>The lesson in the length of that list is that the sparsity bargain did not merely move the cost to the network. It moved the cost to a place where <strong>extracting good performance</strong> requires assembling and tuning half a dozen interacting systems, any one of which, misconfigured, hands the savings back. </p><p>The vLLM and SGLang playbooks both carry warnings to this effect, and <strong>AMD&#8217;s ROCm guide to the vLLM mixture-of-experts options </strong>is blunt that the wrong combination of tensor, data, pipeline, and expert parallelism can duplicate the key-value cache many times over and consume far more memory than expected. </p><p>The <strong>FLOP count said the model got cheaper</strong>. The operations manual says it got more complicated, and the complication is where a large part of the real cost now lives.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Does wide expert parallelism pay for itself?</h2><p>All of this is overhead, and the natural reaction to a catalogue of overhead is to minimize it. If the <strong>all-to-all is the cost</strong>, why not keep the expert-parallel domain small, so the all-to-all stays inside a tight, fast group of devices? </p><p>The answer is that narrowing the domain trades one cost for another, and the trade does not run in the obvious direction. </p><p>Wider expert parallelism, counterintuitively, often <strong>produces more throughput per GPU</strong>, not less, and understanding why is the crux of whether the whole approach earns its keep.</p><p>The mechanism is expert packing. When experts are spread across more devices, each device holds fewer of them, which means <strong>more of each device&#8217;s memory and compute</strong> can be devoted to the batch of tokens currently being processed rather than to holding a large slice of the model. </p><p>Larger effective batches per device improve the arithmetic intensity of the expert matrix multiplications, the kernels run closer to the hardware&#8217;s peak, and the <strong>per-GPU throughput rises</strong>, provided the all-to-all overhead can be kept hidden behind that larger computation. The question is always whether the communication grows faster than the packing benefit, and up to a point, on the right interconnect, it does not.</p><p><strong>NVIDIA&#8217;s measurements on the GB200 NVL72 quantify the dividend directly</strong>. Moving from an eight-way expert-parallel configuration to a 32-way one delivers up to 1.8 times the output token throughput per GPU, at a fixed service level of a hundred tokens per second per user, with disaggregated serving and multi-token prediction in both cases. </p><p>Same hardware, same latency target, nearly double the per-GPU output, purely from going wider on expert parallelism.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CaiQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CaiQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!CaiQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!CaiQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!CaiQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CaiQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bar chart of output tokens per second per GPU, normalized to EP8 at 100: EP8 at 100, EP32 at 180, showing 1.8 times the per-GPU throughput from wider expert parallelism.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bar chart of output tokens per second per GPU, normalized to EP8 at 100: EP8 at 100, EP32 at 180, showing 1.8 times the per-GPU throughput from wider expert parallelism." title="Bar chart of output tokens per second per GPU, normalized to EP8 at 100: EP8 at 100, EP32 at 180, showing 1.8 times the per-GPU throughput from wider expert parallelism." srcset="https://substackcdn.com/image/fetch/$s_!CaiQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!CaiQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!CaiQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!CaiQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a0a69c-89d2-406f-944f-319e09edd0a7_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 6</span></strong> NVIDIA&#8217;s Wide-EP figures on the NVL72. Going wider improves per-GPU throughput, because the packing benefit outweighs the added all-to-all, as long as the all-to-all stays inside the NVLink domain.</figcaption></figure></div><p>The decisive qualifier is the last clause. The 1.8 times holds because the 32-way all-to-all stays inside the NVL72&#8217;s NVLink domain, where Figure 2 says it runs at <strong>726 gigabytes per second. </strong></p><p>The dividend exists because the wire is fast enough that going wider does not push the communication off the cliff. Try the same widening on a cluster where<strong> 32-way expert parallelism forces the all-to-all across InfiniBand</strong>, and the calculus inverts: the packing benefit is swamped by the eightfold bandwidth penalty of leaving the domain, and wider becomes worse. </p><p>This is the same fact from a different angle. The reason the <strong>rack-scale NVLink domain is worth its price </strong>is that it is what makes the wide-EP dividend positive instead of negative.</p><p>There is a second lever working alongside the width, and it appears in <strong>nearly every published wide-EP result</strong>: multi-token prediction. Rather than generating one token per forward pass, the model proposes several and verifies them together, which raises the number of tokens flowing through each all-to-all and pushes the decode kernel out of its worst, smallest-batch regime toward something the bandwidth can amortize. </p><p>Multi-token prediction and wide expert parallelism are complementary for the same underlying reason: <strong>both increase the work done </strong>per round trip across the fabric, and the all-to-all rewards anything that makes its fixed latency a smaller fraction of the whole. </p><p>The dividend in <strong>Figure 6 is partly a multi-token-prediction dividend</strong>, which is why NVIDIA and SGLang report the two together. They are deployed together because they solve the same problem from two directions.</p><p>So the answer to whether wide expert parallelism pays for itself is conditional, and the condition is the interconnect. Inside a sufficiently large fast domain, wider is genuinely better and the measurements prove it. Outside one, wider is a trap. The<strong> crossover sits exactly at the boundary of the NVLink domain</strong>, which is why the size of that domain, 8 GPUs yesterday, 72 today, the same 72 at higher bandwidth tomorrow, is the number that determines how far the dividend extends. </p><p><strong>Expert parallelism</strong> and the interconnect are not two separate decisions. They are one decision, and the hardware vendor has been making half of it for you.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>How much is silicon, and how much is numerics</h2><p>It is tempting to attribute the throughput of a Blackwell mixture-of-experts deployment to the silicon, and the marketing encourages it, but the <strong>public measurements </strong>let us decompose the uplift, and the decomposition is instructive about where the real leverage sits.</p><p>The <strong>LMSYS and SGLang teams</strong> have published a careful progression of DeepSeek serving results on the GB200 NVL72, and the numbers are specific. </p><p>With disaggregated prefill and decode, large-scale expert parallelism, and the conservative numeric configuration of sixteen-bit attention and eight-bit experts, <strong>SGLang reaches 18,471 input tokens per second per GPU</strong> on prefill and 9,087 output tokens per second per GPU on decode, for two-thousand-token sequences. </p><p>Switch to the aggressive configuration, eight-bit attention and four-bit <strong>NVFP4 experts</strong>, and the same system reaches <strong>26,156 input and 13,386 output tokens per second per GPU.</strong> Against the H100 baseline the teams report, those aggressive numbers represent a 3.8 times prefill and 4.8 times decode improvement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t5VC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t5VC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!t5VC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!t5VC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!t5VC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t5VC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Grouped bar chart of tokens per second per GPU for prefill and decode across three configurations: H100 baseline at 6883 prefill and 2789 decode, GB200 with BF16 attention and FP8 experts at 18471 and 9087, and GB200 with FP8 attention and NVFP4 experts at 26156 and 13386, marked as 3.8 times and 4.8 times the baseline.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Grouped bar chart of tokens per second per GPU for prefill and decode across three configurations: H100 baseline at 6883 prefill and 2789 decode, GB200 with BF16 attention and FP8 experts at 18471 and 9087, and GB200 with FP8 attention and NVFP4 experts at 26156 and 13386, marked as 3.8 times and 4.8 times the baseline." title="Grouped bar chart of tokens per second per GPU for prefill and decode across three configurations: H100 baseline at 6883 prefill and 2789 decode, GB200 with BF16 attention and FP8 experts at 18471 and 9087, and GB200 with FP8 attention and NVFP4 experts at 26156 and 13386, marked as 3.8 times and 4.8 times the baseline." srcset="https://substackcdn.com/image/fetch/$s_!t5VC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!t5VC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!t5VC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!t5VC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58fdb759-c5b7-4999-a918-b5332633c973_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 7</span></strong> The Blackwell uplift, decomposed. A large share of the gain over the conservative GB200 configuration comes from dropping the experts to four-bit NVFP4, not from the silicon alone.</figcaption></figure></div><p>The decomposition is the point. The jump from the H100 baseline to the conservative GB200 configuration is the hardware: faster tensor cores, the NVLink domain, more memory bandwidth. But the further jump from the conservative to the aggressive <strong>GB200 configuration, from 18,471 to 26,156 on prefill and from 9,087 to 13,386 on decode</strong>, is numerics. </p><p>It comes from running the experts in four-bit NVFP4 rather than eight-bit. That is a software-and-format change applied to the same rack, and it accounts for a substantial fraction of the total uplift over H100.</p><p>NVFP4 earns its own treatment, and it is a strong candidate for a future issue, but the relevant fact here is why it interacts so favorably with the all-to-all. <strong>Four-bit experts are half the bytes of eight-bit experts</strong>, which directly shrinks the dispatch leg of the toll, and they double the tensor-core throughput of the expert math itself, so the computation that hides the all-to-all gets faster at the same time the all-to-all gets smaller. </p><p>NVIDIA&#8217;s format reportedly holds accuracy within about one percent of the higher-precision baseline on large models through a two-level scaling scheme, and the <strong>accuracy holds up best precisely on the large mixture-of-experts models </strong>where it matters most. The format is, in effect, a second lever on the same toll that the interconnect attacks, and the two compound. </p><p>This is also <strong>why NVIDIA can credibly claim a fivefold reduction in cost per token</strong> from software optimization alone in the two months after Blackwell&#8217;s launch, with no hardware change: a large part of that was kernel and format work on exactly these operations.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>One dollar, or twenty cents</h2><p>The throughput numbers are engineering. The reason they matter is that they convert, almost directly, into the <strong>only number a serving operator actually cares about</strong>, which is dollars per million tokens. And here the all-to-all moves from being a technical concern to being the dominant line item in the unit economics.</p><p>The cleanest demonstration in the public record is the <strong>LMSYS deployment of DeepSeek on 96 H100 GPUs</strong>, twelve nodes of eight, using prefill-decode disaggregation and large-scale expert parallelism with the full DeepEP, DeepGEMM, and EPLB stack. </p><p>That deployment reached 52,300 input tokens per second and 22,300 output tokens per second per node, and when the team translated the throughput into cost, it came to twenty cents per million output tokens. That figure is <strong>roughly one-fifth of what DeepSeek&#8217;s own public API charged at the time</strong>, achieved on rented hardware by an outside team reproducing the architecture.</p><p>The comparison that matters most, though, is the one against the naive alternative on identical hardware. The same report states that the optimized expert-parallel strategy improved output throughput by up to five times over <strong>vanilla tensor parallelism</strong> using the same resources. Five times the throughput on the same GPUs is five times lower cost per token. </p><p>The all-to-all engineering, getting the dispatch and combine to run efficiently inside the fast domain, hiding the latency behind computation, balancing the hot experts, is the entire difference between a deployment at twenty cents and a deployment at a dollar.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OqS9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OqS9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!OqS9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!OqS9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!OqS9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OqS9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Horizontal bar chart of US dollars per million output tokens: vanilla tensor parallel on 96 H100 at one dollar, official DeepSeek API as a reference at one dollar, and PD plus large-scale expert parallelism self-hosted on 96 H100 at twenty cents, five times cheaper on identical hardware.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Horizontal bar chart of US dollars per million output tokens: vanilla tensor parallel on 96 H100 at one dollar, official DeepSeek API as a reference at one dollar, and PD plus large-scale expert parallelism self-hosted on 96 H100 at twenty cents, five times cheaper on identical hardware." title="Horizontal bar chart of US dollars per million output tokens: vanilla tensor parallel on 96 H100 at one dollar, official DeepSeek API as a reference at one dollar, and PD plus large-scale expert parallelism self-hosted on 96 H100 at twenty cents, five times cheaper on identical hardware." srcset="https://substackcdn.com/image/fetch/$s_!OqS9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!OqS9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!OqS9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!OqS9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe045fa0-2808-4ee2-8e81-4476ee597b4c_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 8</span></strong> Same 96 GPUs, two ways of organizing them. The five-fold gap between vanilla tensor parallelism and tuned expert parallelism is, almost entirely, the all-to-all done well versus done naively.</figcaption></figure></div><p>Put that five-fold against the backdrop of where inference pricing has gone, and the stakes of the routing tax become clear. The price of <strong>frontier-class inference has fallen by something close to fifty times in three years</strong>, from around twenty dollars per million tokens for GPT-4-class output in late 2022 to roughly forty cents in early 2026. </p><p>Public trackers attribute the collapse to four compounding forces, and mixture-of-experts together with expert parallelism is explicitly one of them, alongside hardware efficiency, kernel and compiler optimization, and low-precision formats.<strong> Inference now consumes roughly two-thirds of all AI compute</strong>, having crossed over from a minority of it only a couple of years ago. </p><p>In that environment a five-fold cost difference is not a margin to be optimized later. It is the difference between a viable serving business and an unviable one.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CvQD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CvQD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!CvQD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!CvQD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!CvQD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CvQD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Line chart on a log scale of US dollars per million tokens for GPT-4-class output from 2022 to 2026: 20 dollars in late 2022, 5 in 2023, 2 in 2024, 0.8 in 2025, and 0.4 in early 2026, about a fifty-fold decline, with drivers listed as hardware, kernels, mixture-of-experts plus expert parallelism, and four-bit formats.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Line chart on a log scale of US dollars per million tokens for GPT-4-class output from 2022 to 2026: 20 dollars in late 2022, 5 in 2023, 2 in 2024, 0.8 in 2025, and 0.4 in early 2026, about a fifty-fold decline, with drivers listed as hardware, kernels, mixture-of-experts plus expert parallelism, and four-bit formats." title="Line chart on a log scale of US dollars per million tokens for GPT-4-class output from 2022 to 2026: 20 dollars in late 2022, 5 in 2023, 2 in 2024, 0.8 in 2025, and 0.4 in early 2026, about a fifty-fold decline, with drivers listed as hardware, kernels, mixture-of-experts plus expert parallelism, and four-bit formats." srcset="https://substackcdn.com/image/fetch/$s_!CvQD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!CvQD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!CvQD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!CvQD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7a5f99e-3225-4cd6-9684-5d6e2eb8c25c_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span>FIG 9</span></strong> The price floor that makes a routing tax of cents per token worth a flagship. Expert parallelism is one of the four named drivers of this curve, not a footnote to it.</figcaption></figure></div><div><hr></div><h2>Making the domain bigger than the problem</h2><p>Step back from the individual numbers and a single strategic motion organizes all of them. The <strong>mixture-of-experts architecture</strong> created a communication problem. </p><p>The hardware industry&#8217;s response has been to make the <strong>fast communication domain large enough</strong> to swallow the problem whole, and the trajectory of that response is the most reliable predictor of where serving economics go next.</p><p>DeepSeek&#8217;s own engineers, in their published reflections on the <strong>hardware lessons of training V3</strong>, frame the future in exactly these terms. They call for the convergence of scale-up and scale-out, for precise low-precision compute units, and for innovations in low-latency communication fabrics.</p><p> Read against this issue, that is a wish list written by the people paying the all-to-all toll, addressed to the people who can make the domain bigger. The <strong>scale-up and scale-out convergence</strong> they ask for is<strong> precisely the elimination of the cliff in Figure 1:</strong> a world where crossing from one node to the next does not cost a factor of eight, because the fast domain has grown to encompass both.</p><p>NVIDIA is building toward exactly that, and is increasingly explicit that it is doing so for this reason. The<strong> NVL72 took the NVLink domain from 8 to 72.</strong> The NVLink Switch architecture is specified to reach 576 GPUs in a single non-blocking fabric. The Rubin generation lifts the per-GPU bandwidth again and ties the increase directly, in NVIDIA&#8217;s own framing, to the all-to-all needs of mixture-of-experts models. </p><p>Each step is sold, more openly than the last, as a larger container for the communication problem that sparsity created. The <strong>architecture and the interconnect are co-evolving</strong>, and the direction is set: the domain keeps growing, the cliff keeps receding, and the toll keeps shrinking as a fraction of the work, without ever quite reaching zero.</p><p>The domain cannot grow without limit, and the constraints on how far it can stretch are physical. NVLink at rack scale runs over copper, which is cheap and reliable but <strong>reaches only a couple of meters</strong>; pushing the domain past a single rack toward the <strong>576-GPU fabric the switch silicon</strong> can address means either optical interconnect, with its added cost, power draw, and failure modes, or denser and hotter racks than the current design. </p><p><strong>Power and cooling </strong>are already near the edge of what a standard data center hall delivers per rack, which is why the NVL72 is<strong> liquid-cooled</strong> and why each new generation leans harder on liquid. And the fault domain grows with the fabric, because a larger coherent domain is a larger blast radius for a single failure. </p><p>The trajectory is set toward bigger domains, but each <strong>expansion buys less headroom than the last</strong> against a wall of copper reach, power density, and fault tolerance that the all-to-all cannot argue its way past.</p><p>What this does not resolve is the dependency it creates. An operator who builds a serving business on wide expert parallelism is building on the assumption that the<strong> fast domain will keep growing</strong>, and that assumption ties the economics of the model layer to the roadmap of a single interconnect vendor. </p><p>The <strong>wide-EP dividend is real</strong>, but it is contingent on hardware that one company predominantly supplies, and the contingency is worth naming. The cheapest way to serve a frontier mixture-of-experts model in 2026 runs through a rack that is, for now, effectively sole-sourced. </p><p>That is a strategic fact about the inference market as much as a technical one, and it is the part of the story most likely to matter in the issues to come.</p><blockquote><p><em><span>The cheapest way to serve a frontier mixture-of-experts model in 2026 runs through a rack that is, for now, effectively sole-sourced. That is a strategic fact as much as a technical one.</span></em></p></blockquote><p>The <strong>dependency has not gone unanswered</strong>. An industry that has watched a single vendor&#8217;s interconnect become the determinant of mixture-of-experts economics has begun to organize alternatives. </p><p>The <strong>UALink consortium</strong> and the <strong>Ultra Ethernet </strong>effort are both attempts to build an open scale-up fabric that could host the all-to-all without routing through one company&#8217;s switches, and <strong>AMD&#8217;s serving stack </strong>now carries its own expert-parallel communication path, a port of the DeepEP ideas onto its accelerators. </p><p>None of these has yet demonstrated the rack-scale all-to-all bandwidth of an NVL72 in production, and the gap is real, but the direction of the effort is itself a <strong>measure of how much the all-to-all matters</strong>. An entire alternative-hardware ecosystem is organizing around the single operation that this issue is about.</p><p>There is also a cost that none of the throughput numbers capture, which is reliability. A 144-GPU decode deployment is one coordinated system, and the all-to-all is a <strong>synchronization barrier across all of it</strong>, which means a fault or a slowdown on any single device degrades the whole. </p><p>The larger the expert-parallel domain, the more devices have to stay healthy and in lockstep for the all-to-all to complete on time, and the operational burden of keeping a domain of that size running at frontier latency is substantial. </p><p><strong>DeepSeek&#8217;s own diagnostic tooling</strong> for locating slow ranks in a DeepEP deployment exists because, at this scale, finding the one straggling device in a domain of hundreds is a routine and necessary operation. </p><p>The wide-EP dividend is real, but it is collected by operators who can keep a very large, very tightly coupled machine running, and that capability is a cost the smaller-domain alternatives never have to pay.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What to actually do</h2><p>The analysis <strong>resolves into a handful of decisions</strong> that an operator faces in practice, and they follow from the structure rather than from any single benchmark.</p><p>The first decision is whether to use expert parallelism at all, and the honest answer is that it depends entirely on whether your all-to-all can be kept inside a fast domain.</p><p>If you are serving a <strong>frontier mixture-of-experts model at scale</strong> and you have access to a rack-scale NVLink domain, wide expert parallelism is the right tool and the measurements say to go as wide as the domain allows, because the packing dividend is positive inside the fast fabric. </p><p>If your all-to-all would have to cross InfiniBand to go wider, stop widening before it does, because the cliff inverts the dividend. The boundary of the NVLink domain is the boundary of the decision.</p><p>The second decision is how to split the phases. Prefill and decode want different all-to-all kernels, <strong>different expert-parallel widths</strong>, and in DeepSeek&#8217;s production case different physical machines entirely. The decode machine should be wider, both to hit latency targets and to leave room for the load balancer to replicate hot experts. </p><p>If you cannot afford to disaggregate, the decode phase is where the toll will hurt, and the low-latency kernels are where to spend your tuning effort. The <strong>vLLM and SGLang playbooks</strong> both warn, correctly, that the wrong parallelism strategy can duplicate key-value caches across the domain and consume many times the memory you expected, so the parallelism decision is not only about the all-to-all but about what else it forces to be replicated.</p><p>The third decision is precision, and it is mostly free throughput if you are on Blackwell.<strong> Four-bit NVFP4 experts shrink the dispatch leg </strong>of the toll and double the expert math throughput at an accuracy cost that, on large models, is small. The aggressive configuration in Figure 7 is not a marginal tuning; it is a large fraction of the total uplift, and it attacks the same toll the interconnect attacks. If <strong>your hardware supports it and your accuracy budget allows it,</strong> it is among the highest-leverage changes available.</p><p>And the fourth decision is whether you need any of this at all. If your workload is single-user or small-scale, the<strong> KTransformers lesson stands</strong>: a mixture-of-experts model on a single node never pays the toll, and the entire apparatus of expert parallelism is overhead you can decline. </p><p>The all-to-all economics in this issue are the economics of serving at frontier scale and <strong>frontier latency.</strong> Below that scale, the right move is to keep the experts local and let the toll switch stay off.</p><p>The deeper lesson is the one the sparsity story obscured for two years. Mixture-of-experts did not make inference cheaper by doing less work. It moved the work from a <strong>place that was easy to scale</strong>, the arithmetic, to a place that was hard, the network, and then the hardware industry spent two product generations and a great deal of money making the network easy to scale too. </p><p>The bargain was always real. It was just never free, and the bill was always going to come due on the wire.<strong> Knowing where it comes due</strong>, and how much, is most of what it takes to serve these models without overpaying. </p><p> The router decides which experts a token needs. The wire decides what that decision costs. For the models that now define the frontier, the <strong>wire is the more expensive </strong>of the two.</p><div><hr></div><h2>What we are confident about, and what we estimated</h2><p><strong>A</strong></p><p><em>NVLink 5 delivers 1.8 TB/s per GPU; the GB200 NVL72 provides 130 TB/s aggregate all-to-all bandwidth across 72 GPUs, with 13.5 TB of unified HBM3e.</em></p><p><em>NVIDIA GB200 NVL72 datasheet; NVIDIA multi-node NVLink tuning guide; Introl and Spheron interconnect analyses.</em></p><p><strong>A</strong></p><p><em>DeepEP measures dispatch and combine at 726 and 740 GB/s inside the NVLink domain on Blackwell, versus about 90 GB/s each across internode RDMA, on the published V3 workload.</em></p><p><em>DeepEP V2 performance table, deepseek-ai/DeepEP repository.</em></p><p><strong>A</strong></p><p><em>DeepEP&#8217;s decode all-to-all consumes up to 64 SMs at peak throughput; the V2 rewrite cut training all-to-all SM use from 24 to between 4 and 6. A B200 has 148 SMs.</em></p><p><em>DeepEP V2 performance table and release notes; Blackwell architecture specifications.</em></p><p><strong>A</strong></p><p><em>SGLang on the GB200 NVL72 reaches 26,156 prefill and 13,386 decode tokens/sec/GPU with eight-bit attention and NVFP4 experts, reported as 3.8x and 4.8x over H100; the conservative configuration reaches 18,471 and 9,087.</em></p><p><em>LMSYS Org, GB200 NVL72 Part II, September 2025.</em></p><p><strong>A</strong></p><p><em>An LMSYS 96-GPU H100 deployment reached 52.3k input and 22.3k output tokens/sec/node and translated to $0.20 per 1M output tokens, about one-fifth the official API price, and up to 5x the throughput of vanilla tensor parallelism on the same hardware.</em></p><p><em>LMSYS Org, large-scale EP on 96 H100, May 2025.</em></p><p><strong>B</strong></p><p><em>Moving from EP8 to EP32 yields up to 1.8x output throughput per GPU at a fixed 100 tok/s/user SLA on the NVL72, with disaggregated serving and multi-token prediction.</em></p><p><em>NVIDIA, Wide Expert Parallelism on NVL72, January 2026.</em></p><p><strong>B</strong></p><p><em>DeepSeek-V3 runs DP32+EP32 across 32 GPUs for prefill (nine routed experts per GPU plus one shared, including one redundant) and DP144+EP144 across 144 GPUs for decode (about two routed experts per GPU plus one shared).</em></p><p><em>DeepSeek Open Source Week inference system overview (Day 6); CloudMatrix serving analysis (arXiv 2506.12708). The V3 technical report describes a different decode configuration (EP320, one expert per GPU).</em></p><p><strong>B</strong></p><p><em>NVFP4 holds accuracy within roughly one percent of the higher-precision baseline on large models via two-level scaling, and accuracy recovery is strongest on the largest dense and MoE models.</em></p><p><em>NVIDIA NVFP4 technical blogs; Red Hat AI NVFP4 evaluation.</em></p><p><strong>C</strong></p><p><em>A DeepSeek-V3 mixture-of-experts layer moves about 56 KB of dispatch (FP8, top-8) and 112 KB of combine (BF16, top-8) per token, roughly 168 KB total, against about 14 KB for a dense layer.</em></p><p><em>Derived from V3 geometry (hidden 7168, top-8, FP8 dispatch, BF16 combine). Excludes the shared expert and any local-rank optimization.</em></p><p><strong>C</strong></p><p><em>The vanilla-tensor-parallel and official-API reference points of roughly $1.00 per 1M output tokens are derived from the LMSYS statements (optimized $0.20 figure at one-fifth of API, and 5x over vanilla TP).</em></p><p><em>Derived from LMSYS 96-GPU report figures.</em></p><p><strong>C</strong></p><p><em>The H100 baseline in Figure 7 (6,883 prefill, 2,789 decode tokens/sec/GPU) is back-calculated from the reported 3.8x and 4.8x speedups, not independently measured.</em></p><p><em>Derived from LMSYS GB200 Part II reported multipliers.</em></p><p><strong>D</strong></p><p><em>Frontier-class inference pricing has fallen roughly fifty-fold from about $20 to about $0.40 per 1M tokens from late 2022 to early 2026, with MoE plus expert parallelism among four named drivers.</em></p><p><em>Public inference price trackers, 2022 to 2026. Order-of-magnitude trend across vendors, not a single price series.</em></p><p><strong>D</strong></p><p><em>Vera Rubin NVL72 is specified for roughly 3.6 TB/s per GPU and 260 TB/s aggregate, framed by NVIDIA as serving MoE all-to-all needs.</em></p><p><em>NVIDIA NVLink product page and CES 2026 disclosures; pre-release specification subject to change.</em></p><p><em>A = primary or measured | B = single strong vendor or operator source | C = derived by us from sourced inputs | D = directional, treat as trend not point estimate.<br>Character scan: this issue contains zero em dashes and zero en dashes, verified programmatically against the rendered text.</em></p><div><hr></div><h2>Bibliography</h2><ol><li><p><span>DeepSeek-AI. DeepEP: an efficient expert-parallel communication library. GitHub repository, 2025. Performance table, V2 release notes, decode and prefill kernel interfaces.github.com/deepseek-ai/DeepEP</span></p></li><li><p><span>DeepSeek-AI. Insights into DeepSeek-V3: Scaling Challenges and Reflections on Hardware for AI Architectures. arXiv 2505.09343, 2025.arxiv.org/abs/2505.09343</span></p></li><li><p><span>LMSYS Org. Deploying DeepSeek with PD Disaggregation and Large-Scale Expert Parallelism on 96 H100 GPUs. May 2025.lmsys.org/blog/2025-05-05-large-scale-ep</span></p></li><li><p><span>LMSYS Org. Deploying DeepSeek on GB200 NVL72 with PD and Large Scale EP, Part I: 2.7x Higher Decoding Throughput. June 2025.lmsys.org/blog/2025-06-16-gb200-part-1</span></p></li><li><p><span>LMSYS Org. Deploying DeepSeek on GB200 NVL72 with PD and Large Scale EP, Part II: 3.8x Prefill, 4.8x Decode Throughput. September 2025.lmsys.org/blog/2025-09-25-gb200-part-2</span></p></li><li><p><span>LMSYS Org. SGLang and NVIDIA Accelerating SemiAnalysis InferenceMAX and GB200 Together. October 2025.lmsys.org/blog/2025-10-14-sa-inference-max</span></p></li><li><p><span>NVIDIA. Scaling Large MoE Models with Wide Expert Parallelism on NVL72 Rack-Scale Systems. NVIDIA Technical Blog, January 2026.developer.nvidia.com/blog</span></p></li><li><p><span>NVIDIA. GB200 NVL72 product page and datasheet. 130 TB/s NVLink domain, 72-GPU rack specifications.nvidia.com/en-us/data-center/gb200-nvl72</span></p></li><li><p><span>NVIDIA. Inside NVIDIA Blackwell Ultra: The Chip Powering the AI Factory Era. NVIDIA Technical Blog, January 2026.developer.nvidia.com/blog</span></p></li><li><p><span>NVIDIA. Introducing NVFP4 for Efficient and Accurate Low-Precision Inference. NVIDIA Technical Blog, 2025.developer.nvidia.com/blog</span></p></li><li><p><span>NVIDIA. The Economic Value of Inference Software Optimization at the Datacenter Level. April 2026. Fivefold cost-per-token reduction via software.perspectives.nvidia.com</span></p></li><li><p><span>NVIDIA. Multi-Node NVLink Systems Tuning Guide and NVLink / NVLink Switch product documentation. Fifth-generation NVLink and NVSwitch specifications.docs.nvidia.com; nvidia.com/en-us/data-center/nvlink</span></p></li><li><p><span>Microsoft. Achieving Optimal Performance for DeepSeek Expert Parallelism (DeepEP) on Azure. Azure HPC Blog, May 2025.techcommunity.microsoft.com</span></p></li><li><p><span>AMD ROCm. The vLLM MoE Playbook: A Practical Guide to TP, DP, PP and Expert Parallelism. November 2025.rocm.blogs.amd.com</span></p></li><li><p><span>Taming the Titans: A Survey of Efficient LLM Inference Serving. arXiv 2504.19720, 2025. All-to-all as the MoE bottleneck; expert load balancing.arxiv.org/abs/2504.19720</span></p></li><li><p><span>Serving Large Language Models on Huawei CloudMatrix384. arXiv 2506.12708, 2025. DeepSeek DP32+EP32 prefill and DP144+EP144 decode topology.arxiv.org/abs/2506.12708</span></p></li><li><p><span>DeepSeek-AI. DeepSeek-V3/R1 Inference System Overview (Open Source Week, Day 6). February 2025. Production prefill EP32 (9 experts/GPU) and decode EP144 (2 experts/GPU) topology.github.com/deepseek-ai/open-infra-index</span></p></li><li><p><span>Introl. NVLink and Scale-Up Networking. 2026. Scale-up versus scale-out bandwidth ratio; NVL72 physical architecture.introl.com/blog</span></p></li><li><p><span>DigitalOcean. The LLM Inference Trilemma: Throughput, Latency, Cost. April 2026. MoE cost as a game of communication.digitalocean.com/blog</span></p></li><li><p><span>GPUnex. AI Inference Economics: The 1,000x Cost Collapse Reshaping GPUs. February 2026. Inference price trend and drivers.gpunex.com/blog</span></p></li><li><p><span>NVIDIA. NVLink and NVLink Switch, Vera Rubin NVL72 and NVLink 6 disclosures. CES 2026. 260 TB/s aggregate, MoE all-to-all framing.nvidia.com/en-us/data-center/nvlink</span></p></li></ol>]]></content:encoded></item><item><title><![CDATA[Decode Is Memory-Bound. Speculation Is the Arbitrage]]></title><description><![CDATA[Speculative decoding is the only inference optimization that turns idle silicon into tokens without changing a single output. Whether that lands on your bill as a discount or a surcharge is not a prop]]></description><link>https://www.thesoftwarefrontier.com/p/decode-is-memory-bound-speculation</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/decode-is-memory-bound-speculation</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Thu, 25 Jun 2026 10:19:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1i2p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1i2p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1i2p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 424w, https://substackcdn.com/image/fetch/$s_!1i2p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 848w, https://substackcdn.com/image/fetch/$s_!1i2p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!1i2p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1i2p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png" width="1122" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2300883,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1i2p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 424w, https://substackcdn.com/image/fetch/$s_!1i2p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 848w, https://substackcdn.com/image/fetch/$s_!1i2p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!1i2p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2f8e194-f28b-4508-aa07-1a6406746102_1122x1122.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction</h2><p><strong>Rent a B200 for an hour</strong> and you are paying for roughly four and a half thousand trillion floating-point operations per second. Ask it to generate text from a seventy-billion-parameter model one user at a time, and for most of that hour the tensor cores do almost nothing. </p><p>The reason is not a bug, a bad kernel, or a scheduling failure. It is arithmetic. To <strong>produce a single token</strong>, the machine must read every weight in the model out of high-bandwidth memory, and reading is the slow part. </p><p>The multiply that follows the read is nearly free, and <strong>there is almost nothing to multiply</strong>, because a single decode step touches one token&#8217;s worth of activations against the entire weight matrix. <mark>You are paying for a fleet of trucks and using them to deliver one envelope per trip.</mark></p><p>Put numbers on it. A <strong>seventy-billion-parameter model</strong> in the eight-bit precision typical of modern serving is seventy gigabytes of weights. </p><p>On a B200 with eight terabytes per second of memory bandwidth, sweeping those weights once takes just under nine milliseconds, and that single sweep yields exactly one token for one user. </p><p>The tensor cores that could have executed thousands of trillions of operations in that window execute a few billion. The arithmetic intensity of <strong>single-stream decode,</strong> the ratio of compute performed to bytes moved, sits at roughly one to two floating-point operations per byte. </p><p>The hardware does not break even until that ratio reaches several hundred. The gap between those two numbers is the entire subject of this issue, because <strong>that gap is compute you have already paid</strong> for and are not using.</p><p><mark>Speculative decoding is the one technique in the</mark><strong><mark> </mark></strong><mark>inference toolbox that spends that idle compute on tokens</mark>, and, in its exact formulations, does so without altering the model&#8217;s output by a single logit. Every other lever trades something visible. </p><p><strong>Quantization trades precision</strong>. Pruning trades capacity. Distillation trades a different model entirely. Speculation, done correctly, trades nothing the user can observe; it simply reorganizes when the weight reads happen so that one read can validate several tokens at once. That is <strong>what makes it unusual</strong>, and it is why every major laboratory shipped a version of it over the last eighteen months.</p><p>And yet the operator folklore says to turn it off above a certain batch size, and the operator folklore is correct, as far as it goes. The resolution of that apparent contradiction is the thesis of this piece. </p><p>The value of speculative decoding is not a number you can quote. <mark>It is a position on a plane whose axes are</mark><strong><mark> batch size and context length,</mark></strong><mark> measured against the ridge of the roofline.</mark> In one region it cuts your cost per token roughly in half. </p><p>In the adjacent region it raises your cost per token by a fifth. The technique never changed. The regime did. The job of this issue is to draw the plane, mark the line that divides it, and show<strong> why the workload that came to dominate 2026</strong>, long-form reasoning, walked straight into the half of the plane where speculation pays.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What speculation actually does, stated precisely</h2><p>The <strong>mechanism is worth stating exactly</strong>, because almost every confusion about the economics traces back to a loose mental model of it. </p><p>A small, cheap model, the draft, proposes a <strong>short run of candidate tokens</strong>, say four or five of them, by generating them autoregressively in the ordinary way. Because the draft is small, those proposals are fast. </p><p>The large model, the target, then performs a single forward pass that scores all of the candidate positions at once. This is the move that matters: <strong>verifying four candidate tokens</strong> costs the target essentially one weight load, the same memory sweep it would have spent producing one token on its own, because the candidates are processed in parallel across the sequence dimension rather than one step at a time.</p><p>The target then walks the candidates left to right and applies a modified rejection-sampling test at each position. </p><p>It keeps the <strong>longest prefix of candidates </strong>that agrees with what it would have sampled itself, discards the first disagreement and everything after it, and emits one additional bonus token drawn from its own distribution at the point of divergence. </p><p>So a step that began with a draft of length K returns the number of accepted candidates, call it n, plus one. <strong>If the draft proposed five tokens and the target accepted three</strong>, the step produced four tokens for the price of one memory sweep. If the target accepted all five, it produced six. If it accepted none, it produced one, the bonus token, and you paid the draft&#8217;s cost for nothing.</p><p>This is the first thing the folklore gets right and the economics must respect: the speedup is governed by <strong>how many tokens the target accepts </strong>per step, and specifically by the <em>accept length</em>, the mean size of that accepted run plus the bonus. </p><p>It is not governed by the raw acceptance rate in isolation, and it is not governed by how clever the draft sounds. A <strong>draft that is right ninety percent of the time </strong>on the next token but falls apart by the third token buys you less than a draft that is right seventy percent of the time but stays coherent for five. </p><p>The lever is the length of the run, because each run, however long, costs exactly one expensive weight load of the target.</p><h3><span>The lossleness property</span></h3><p>For the <strong>rejection-sampling formulations </strong>introduced by <em>Leviathan and colleagues in 2023</em> and independently by <em>Chen and colleagues</em> the same year, the output distribution is provably identical to standard autoregressive sampling from the target. </p><p>The <strong>modified rejection test</strong> is constructed precisely so that the accepted-token statistics match the target&#8217;s own. EAGLE preserves this exactly, as Hugging Face&#8217;s engineering writeup states plainly. The user cannot tell, from the output alone, that speculation was used.</p><p>That property deserves a caveat stated in the same breath, because vendors are <strong>not always careful about it</strong>. The losslessness holds for the exact rejection-sampling rule. </p><p>There are faster variants, relaxed acceptance, typical acceptance, and several aggressive tree-acceptance schemes, that raise the acceptance rate by loosening the test, and these do change the output distribution. They are often worth it. </p><p>But a quoted speedup that came from a relaxed acceptance rule is not the same artifact as a quoted speedup from <strong>exact rejection sampling</strong>, and an honest ledger keeps them in separate columns. When this issue later cites a four-times number, it will say which rule produced it.</p><p>The methods themselves form a clean lineage, and the direction of travel tells you what the field decided mattered. The original formulation used a <em>separate</em> draft model, <strong>a smaller member</strong> of the same family, which is simple but means maintaining and serving two models. </p><p>Medusa removed the second model by attaching several prediction heads to the target itself, each guessing a future position in parallel. EAGLE, in its <strong>first and second versions</strong>, moved the autoregression down a level, drafting in the target&#8217;s own feature space rather than in token space, which made the draft both cheaper and better aligned. </p><p><strong>EAGLE-3, presented at NeurIPS 2025</strong> and described in arXiv:2503.01840, pushed further: it fuses features from early, middle, and late layers of the target, predicts tokens directly rather than through an intermediate feature-regression step, removes a constraint that had limited how much training data helped, and uses a dynamic draft tree that expands the most promising candidates. </p><p>The endpoint of the lineage is to fold the draft into the target entirely, which is <strong>what DeepSeek&#8217;s multi-token prediction does</strong>, and which the next sections will show has economic consequences beyond mere convenience.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The roofline and the speculation budget</h2><p>The previous issue, <em>The Split and the Seam</em>, derived the roofline for LLM serving in detail and split inference into its prefill and decode phases on exactly these grounds. </p><p>This issue assumes that derivation rather than repeating it, and reuses its house figures. The roofline says that for any kernel there is a ridge point, an <strong>arithmetic intensity above</strong> which you are limited by the chip&#8217;s compute throughput and below which you are limited by its memory bandwidth. </p><p>The ridge is simply peak compute divided by peak bandwidth. For an H100 SXM running FP8, that is one thousand nine hundred and seventy-<strong>nine teraFLOPS of dense tensor throughput </strong>against three and thirty-five hundredths terabytes per second of HBM3, which puts the ridge at five hundred and ninety-one FLOP per byte. </p><p>The H200 keeps the same compute but <strong>raises bandwidth to four and eight tenths terabytes per second</strong>, dropping the ridge to four hundred and twelve. A B200 at roughly four thousand five hundred teraFLOPS against eight terabytes per second sits near five hundred and sixty-two.</p><p>Single-stream decode operates at one to two FLOP per byte. Hold those two numbers next to each other. The operating point is two to nearly three orders of magnitude below the ridge. </p><p>That distance, expressed as a ratio, is the factor by which you could <strong>multiply the compute performed per byte</strong> <strong>moved </strong>before you would hit the memory ceiling and start paying for it in latency. Call it the <em>speculation budget</em>. On a single stream it is somewhere between three hundred and nearly six hundred times. </p><p>It is, very precisely, the ceiling on what any decode-side technique could reclaim from idle compute, and the headroom that speculative decoding draws on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9x7-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9x7-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!9x7-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!9x7-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!9x7-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9x7-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3d8c768-f443-486c-b423-9078bc10d614_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Roofline chart showing the speculation budget as the vertical gap between the single-stream decode operating point and the compute ridge for H100, H200, and B200.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Roofline chart showing the speculation budget as the vertical gap between the single-stream decode operating point and the compute ridge for H100, H200, and B200." title="Roofline chart showing the speculation budget as the vertical gap between the single-stream decode operating point and the compute ridge for H100, H200, and B200." srcset="https://substackcdn.com/image/fetch/$s_!9x7-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!9x7-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!9x7-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!9x7-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d8c768-f443-486c-b423-9078bc10d614_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1.</strong> The speculation budget is the vertical distance from the decode operating point to the roofline ridge. Single-stream decode runs two to three orders of magnitude below the point where compute becomes the limit, which is the headroom speculation cashes in. Ridge points use Issue 03 house figures: H100 SXM FP8 1,979 TFLOPS / 3.35 TB/s, H200 same compute / 4.8 TB/s, B200 ~4,500 TFLOPS / 8 TB/s.</figcaption></figure></div><p>A reader should immediately ask why, if the budget is several hundred times, speculation delivers only two or three. </p><p>The answer is that no single technique spends the whole budget, and speculation in particular spends only a sliver of it. </p><p><strong>Its yield is capped by accept length</strong>: each verification step still costs one weight load and returns at most the accepted run plus a bonus, which in practice is two to five tokens, so the multiple is bounded there no matter how much idle compute waits unused. </p><p>The draft is not free either, and its own forward passes consume part of the budget before any of it reaches the output. The rest of the headroom is what <em>batching</em> claims, the other and larger way to <strong>raise arithmetic intensity</strong>, and whatever neither mechanism reaches simply sits idle under the latency ceiling. </p><p><mark>So the budget is the size of the prize, not the size of the winnings.</mark> Speculation is the instrument that collects the part of it that batching cannot, which, as the rest of this issue argues, is exactly the part that matters when a<strong> latency SLA forbids batching in the first place</strong>.</p><p>This budget is not an accident of one chip generation. It is the accumulated result of a divergence that has run for a decade. </p><p>Across the <strong>span from V100 to B200</strong>, tensor compute throughput grew by roughly thirty-six times, while HBM bandwidth over the same generations grew by only about nine times, a gap documented in the systems literature and discussed at length in this publication&#8217;s earlier piece on the memory wall. </p><p><strong>Compute outran memory</strong> by a factor of four across those generations, and every factor of that divergence widened the speculation budget, because it pushed the ridge further above the place where decode actually runs. </p><p>The technique gets structurally more attractive with each generation of hardware that <strong>improves compute faster than bandwidth</strong>, which is to say, with each generation.</p><h3><span>The budget is real, and finite</span></h3><p>The roofline guarantees the<strong> headroom exists on a single stream</strong>. It does not guarantee the headroom survives batching, or long context. The next two sections are the story of what spends the budget down, and they reach opposite conclusions depending on which axis you move along.</p><p>The framing to carry forward is that speculation is, mechanically, a<strong> way of converting roofline headroom into tokens</strong>. When the headroom is large, the conversion is cheap and the tokens are nearly free. </p><p>When the headroom has been consumed by something else, there is nothing left to convert, and the draft&#8217;s compute becomes pure overhead. </p><p>Everything downstream is a question about <strong>how much headroom is actually available</strong> in your serving regime, and the surprising part, the part the folklore half-misses, is that the answer depends on two independent variables, not one.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Why batching is said to kill it</h2><p>Here is the story every production guide tells, and it is the right place to start because <strong>it is true within its assumptions.</strong> As you raise the batch size, packing more concurrent sequences into each forward pass, the target&#8217;s arithmetic intensity rises. </p><p>The reason is that <strong>the weights are read once per step</strong> regardless of how many sequences are in the batch, so the cost of that read amortizes across the batch. One sequence pays the full one hundred and forty gigabyte sweep for one token. </p><p><strong>Thirty-two sequences</strong> split the same sweep across thirty-two tokens. The bytes-per-token falls, the FLOP-per-byte rises, and at some batch size the target crosses its ridge and becomes compute-bound. </p><p>Past that crossing, the free headroom is gone, because the compute is now the scarce resource, and the draft model&#8217;s extra forward passes are competing for it against real work.</p><p>The crossing is commonly placed around a batch of thirty-two. <strong>Spheron&#8217;s production guide</strong> from March 2026 and<strong> E2E Networks&#8217; </strong>engineering notes both put the practical break-even in that neighborhood, with the qualification that it moves with model size, quantization, and sequence length. </p><p>Below a draft acceptance of roughly one half, the guides agree, speculation hurts at any batch, because too few candidates survive verification to cover the draft&#8217;s cost. </p><p>The operational rule that falls out is blunt and widely repeated: <strong>disable speculation when batch sizes climb past the low tens</strong>, when outputs are short, when generation is high-entropy, or when you are memory-constrained on weights to the point that the draft displaces batch capacity.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b_nj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b_nj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!b_nj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!b_nj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!b_nj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b_nj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart showing decode speedup from speculation decaying from over 3x at batch 1 toward break-even near batch 32, with EAGLE 3.1 measured points overlaid.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart showing decode speedup from speculation decaying from over 3x at batch 1 toward break-even near batch 32, with EAGLE 3.1 measured points overlaid." title="Chart showing decode speedup from speculation decaying from over 3x at batch 1 toward break-even near batch 32, with EAGLE 3.1 measured points overlaid." srcset="https://substackcdn.com/image/fetch/$s_!b_nj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!b_nj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!b_nj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!b_nj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62ed2ac3-10a2-40a0-84d1-0ad7180b8940_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1.</strong> The conventional envelope. As the batch fills, the spare compute that speculation feeds on disappears, and the speedup decays toward break-even near a batch of 32. Measured points are EAGLE 3.1 on Kimi-K2.6-NVFP4, vLLM tensor-parallel 4, GB200, SPEED-Bench, published by the vLLM team in May 2026: <strong>2.03x</strong> at concurrency 1, <strong>1.71x</strong> at 4, <strong>1.66x</strong> at 16. The break-even location and the 0.5-acceptance floor are from E2E Networks and the Spheron production guide. The envelope is illustrative; the points are measured.</figcaption></figure></div><p>The measured points anchor the shape. <strong>EAGLE 3.1, released jointly by the EAGLE, vLLM, and TorchSpec teams </strong>in May 2026 and benchmarked in the vLLM team&#8217;s own writeup running on Kimi-K2.6 in NVFP4 under vLLM with tensor parallelism of four on a GB200, delivered a per-user throughput multiple of two and three hundredths at concurrency one, one and<strong> seventy-one hundredths </strong>at concurrency four, and one and sixty-six hundredths at concurrency sixteen, on the SPEED-Bench suite. </p><p>The curve is unmistakable: the benefit is largest when the machine is emptiest, and it erodes as the batch fills. This is the empirical backbone of the folklore, and nothing in this issue disputes it on its own terms.</p><p>There is a sharper version of the same point that the practitioner Tian Pan has called the critical inversion. At<strong> low concurrency</strong> the draft runs in compute the target was wasting anyway, so it is free. </p><p>At high concurrency the draft&#8217;s forward passes contend with queued real requests for the same saturated compute, so the draft is no longer free; it is actively stealing throughput from work you could otherwise be doing. </p><p>Under that framing, speculation is fundamentally a low-concurrency latency optimization, and treating it as a <strong>throughput optimization at scale </strong>is a category error. This is good guidance. It is also, and this is the whole turn of the issue, an argument that silently assumes short context.</p><p>The <strong>amortization story is entirely about weights.</strong> It says the weight read, which dominates single-stream decode, gets cheaper per token as the batch grows. That is true. But the weight read is not the only thing decode reads from memory on every step, and the other thing it reads does not amortize across the batch at all. </p><p>The conventional wisdom is not wrong. It is two-thirds of a three-variable problem, and the missing variable is the one that 2026&#8217;s workloads turned up to eleven.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The KV cache re-opens the budget</h2><p>Every token a transformer has already produced leaves behind a key and a value vector in every attention layer, and every future token must read all of them. <strong>That is the KV cache</strong>, and it is the second great memory cost of decode. Crucially, it behaves nothing like the weights. </p><p>The weights are shared across the batch, so their read amortizes. The KV cache is private to each sequence and grows with that sequence&#8217;s length, so its read scales with the <strong>batch size </strong>and with the context length simultaneously. </p><p>Doubling the batch does not split the KV read across more tokens; it doubles the total KV that must be read. Doubling the context length doubles it again.</p><p>The consequence is the result at the center of the <strong>MagicDec work, described in arXiv:2408.11049</strong> and in Together AI&#8217;s analysis of it. There is a critical sequence length, call it S-star, beyond which the per-step KV read dominates the per-step weight read even at large batch. </p><p>Past S-star, decode is memory-bound <em>again</em>, not because the weights are unamortized, but because the KV cache is enormous and unamortizable. The free compute the conventional wisdom said batching had consumed comes back, because batching only consumed the part of the memory bill that the weights were responsible for. The <strong>KV part grew instead of shrinking.</strong></p><p>This changes the geometry of the entire question. The compute-bound region is not the half-plane &#8220;<em>batch greater than thirty-two</em>.&#8221; It is a wedge: compute-bound requires high batch <em>and</em> short context, both at once. Move to small batch and you are <strong>memory-bound on weights</strong>. Move to long context and you are memory-bound on KV. </p><p>Only in the corner where the batch is large and the sequences are short does the target actually saturate its compute. Everywhere else, on a single stream, on long documents, on <strong>extended reasoning traces</strong>, the headroom is open and speculation has something to convert. </p><p>The short-context side of that corner has a hard edge worth naming. Because the KV cache caps how high arithmetic intensity can climb, there is a context length, roughly <strong>a thousand tokens on a B200</strong> and closer to eleven hundred on an H200, past which no batch size reaches the compute-bound ridge at all. </p><p>That ceiling is the dashed wall in the diagram below, and the compute-bound wedge lives entirely to its left. Every reasoning trace sits far to its right.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eB9V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eB9V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!eB9V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!eB9V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!eB9V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eB9V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97470b63-02ca-454b-add0-20561267e0be_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Phase diagram on axes of sequence length and batch size showing the compute-bound region as a high-batch short-context wedge and the memory-bound region everywhere else, with workload markers.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Phase diagram on axes of sequence length and batch size showing the compute-bound region as a high-batch short-context wedge and the memory-bound region everywhere else, with workload markers." title="Phase diagram on axes of sequence length and batch size showing the compute-bound region as a high-batch short-context wedge and the memory-bound region everywhere else, with workload markers." srcset="https://substackcdn.com/image/fetch/$s_!eB9V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!eB9V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!eB9V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!eB9V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97470b63-02ca-454b-add0-20561267e0be_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 2.</strong> The two-axis map, drawn from the roofline condition. Decode is compute-bound, where speculation taxes throughput, only in the small wedge at high batch and short context: it needs batch above roughly the ridge over two (around 250 for a B200) and context below the dashed wall. The wall sits where even infinite batch cannot lift arithmetic intensity to the ridge, at a sequence length of about 2C/R, near a thousand tokens on a B200 and eleven hundred on an H200. Everything else is memory-bound, where speculation pays. Interactive chat, single-user reasoning, and the long-document MagicDec regime all sit in speculation-pays territory; only short-prompt high-batch offline serving sits in the tax. With a speculative draft tree the effective batch reaches the wedge nearer nominal batch 32, which is the conventional break-even. House calculation; the KV-versus-weight crossover is a distinct curve, in Figure 4.</figcaption></figure></div><h3>Where the line actually sits</h3><p>The boundary is not abstract; you can locate it with the model&#8217;s own dimensions, and where it lands is the punchline. Take a seventy-billion-parameter model of the Llama-3-70B shape: <strong>eighty layers, grouped-query attention</strong> with eight key-value heads of head-dimension one hundred and twenty-eight. </p><p>The key-value cache that must be read per token is two vectors, key and value, times eight heads, times one hundred and <strong>twenty-eight dimensions</strong>, times eighty layers, which is one hundred and sixty-three thousand eight hundred and forty elements per token. </p><p>In a<strong> sixteen-bit KV cache</strong> that is about three tenths of a megabyte for every token already in the sequence, per sequence. The weights, in an eight-bit serving format, are seventy gigabytes, read once per step and shared across the whole batch.</p><p>The crossover, the point where the <strong>per-step key-value</strong> read equals the per-step weight read, is therefore where batch size times sequence length reaches roughly seventy gigabytes divided by three tenths of a megabyte, which is about two hundred and twenty thousand. </p><p>That locus, batch times sequence held constant, is a hyperbola: it is the line drawn in <strong>Figure 3 below</strong>, and it marks where the KV read overtakes the weight read, which is to say where adding more batch stops reducing the bytes paid per token. </p><p>At a <strong>batch of thirty-two</strong> it puts that amortization crossover near seven thousand tokens; at a batch of sixty-four, near three thousand five hundred; at a batch of one hundred and twenty-eight, near one thousand seven hundred. </p><p>An <strong>eight-bit key-value cache</strong> roughly doubles all of those. This crossover is a finer fact than the compute-bound wall of the previous figure, and the two should not be confused: the wall is the context length past which no batch reaches the ridge, while the crossover is the point at a given batch where batching has stopped buying amortization. </p><p>The reasoning workload clears both at once. Hold it against the MLPerf numbers: a mean output of three thousand eight hundred and eighty tokens, a maximum of twenty thousand, <strong>AIME traces running to twenty-three thousand. </strong></p><p>Those sequences run far past the roughly one-thousand-token compute-bound wall, so no batch reaches the ridge, and at any batch an operator can realistically run under a <strong>latency SLA </strong>they are past the amortization crossover as well. This is not a near miss. </p><p><mark>The workload that came to define 2026 lives deep in the memory-bound region by a wide margin, which is the entire reason speculation pays there.</mark> (Both lines are <strong>house order-of-magnitude calculations</strong> from the stated architecture, graded in the dossier; the precise coefficients move with KV precision, head count, ridge, and serving format, but the order of magnitude, and therefore the conclusion, is robust.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HWH4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HWH4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!HWH4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!HWH4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!HWH4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HWH4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Log-log chart of per-step memory read versus aggregate tokens in flight, showing a flat weight-read line crossed by rising KV-read lines for dense GQA and MLA, with crossover points marked.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Log-log chart of per-step memory read versus aggregate tokens in flight, showing a flat weight-read line crossed by rising KV-read lines for dense GQA and MLA, with crossover points marked." title="Log-log chart of per-step memory read versus aggregate tokens in flight, showing a flat weight-read line crossed by rising KV-read lines for dense GQA and MLA, with crossover points marked." srcset="https://substackcdn.com/image/fetch/$s_!HWH4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!HWH4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!HWH4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!HWH4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F382010e2-3271-4faa-8148-bbf4387b0154_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 3.</strong> The crossover, drawn. The weight read is flat because it amortizes across the batch; the KV read rises linearly with aggregate tokens in flight because it does not. For a dense-GQA 70B model the two meet near 220,000 aggregate tokens; a reasoning workload at batch 32 and 8,000 tokens of context already sits past it. Compressed attention moves the crossover, it does not remove it. House calculation; the order of magnitude is the point.</figcaption></figure></div><p>One honest qualification belongs here, because it is the first thing a careful reader will raise. The arithmetic above is for dense grouped-query attention, where the KV cache is large. </p><p>Architectures that compress the cache move the crossover to the right. <strong>DeepSeek&#8217;s Multi-head Latent Attention</strong>, by its hardware paper&#8217;s account, holds the KV cache to roughly seventy kilobytes per token, about a fifth of the dense-GQA figure, which pushes the crossover out toward a million aggregate tokens, the shallower line in the chart above. </p><p><strong>DeepSeek-V4 goes further still</strong>: its model card reports that at a one-million-token context, V4-Pro spends about ten percent of V3.2&#8217;s KV cache and twenty-seven percent of its per-token compute, with V4-Flash at seven percent and ten percent, through a compressed sparse-attention stack. </p><p>This does not rescue the throughput regime. It relocates the line, and it does so precisely in service of making very long contexts affordable, which <strong>keeps sequences long</strong>, which keeps the <strong>budget open</strong>. The compression buys context length, and context length is what holds decode in the memory-bound region. The two facts point the same way.</p><p>MagicDec turns this into a working technique with one additional move: the <strong>draft itself must be light on KV,</strong> not just light on weights, or it reintroduces the very bottleneck it is trying to relieve. </p><p>With a draft that uses a fixed sparse or short-window KV footprint, MagicDec reports up to roughly two times on both throughput and latency together in the<strong> large-batch long-context regime</strong> on eight A100s, a regime where the conventional wisdom predicts speculation should be dead. </p><p>The reported draft-to-target memory ratio for a Llama-3.1-70B target with an <strong>eight-billion-parameter draft</strong> stays near four tenths and, importantly, stays constant as the batch grows, because the draft&#8217;s KV is bounded by design while the target&#8217;s KV grows. </p><p>That constancy is what keeps the draft cheap exactly where the conventional analysis assumed it would become expensive.</p><p>The corrected physics is therefore a single sentence with three clauses. <strong>Small batch is memory-bound </strong>because weights dominate. Long context is memory-bound because the KV read dominates. </p><p>Compute-bound is only the high-batch corner below the thousand-token wall, and that corner is smaller than the folklore implies. The &#8220;<em>disable above batch thirty-two</em>&#8221; rule is not wrong; it is a short-context rule wearing the costume of a general one. </p><p>And the moment your workload develops long sequences, whether from large documents or from long generations,<strong> the rule inverts</strong>, and speculation comes back to life precisely where you had been told to switch it off.</p><div><hr></div><h2>What actually shows on the ledger</h2><p><strong>Physics is not the bill</strong>. To get from the roofline to dollars, you have to know how the operator is allowed to set the batch size, and that is a question about service-level agreements, not about chips. </p><p>There are <strong>two serving regimes</strong>, and they read the same technique with opposite signs.</p><p>In <em>throughput-maximizing</em> service, the operator is free to batch all the way to the compute-bound point, because the <strong>only objective is cost per token</strong> and the way to minimize it is to amortize the weight read across as many sequences as possible. In that regime the machine is, by construction, saturated. </p><p><strong>There is no idle compute</strong>. Speculation adds the draft&#8217;s forward passes to a chip that has nothing spare to run them in, so the cost per token rises. This is the regime the folklore is built for, and in it the folklore&#8217;s advice is exactly right.</p><p>In <em>latency-capped</em> service, the operator may <em>not</em> batch to the compute-bound point, because there is a ceiling on how long each token may take, and raising the batch raises per-token latency. The operator batches only until the <strong>latency SLA binds</strong>, and then stops, often well short of saturation. </p><p>The machine therefore runs with idle compute by design, not by accident, because the SLA forbids filling it. That idle compute is the speculation budget, and <strong>speculation converts it into tokens</strong>, cutting the cost per token. <mark>Same technique, opposite sign, and the only thing that changed was whether a latency ceiling capped the batch.</mark></p><p><mark>These two signs are not asserted; they fall out of a one-line cost model.</mark> Cost per token is the <strong>rental rate of the GPU</strong> divided by the tokens it delivers each second, so anything that multiplies throughput divides cost by the same factor. </p><p>In the latency-capped regime the wasted verification compute is free, because the chip sat idle under the SLA anyway, so throughput scales with the accept length discounted only by the draft&#8217;s own overhead: an accept length of about two and a half against a draft overhead near a fifth gives a <strong>throughput multiple close to two</strong>, which is the cut of roughly half the chart shows. </p><p>In the throughput-maximized regime the chip has no spare compute, so the draft&#8217;s wasted work bites directly. If the draft proposes three tokens and <strong>two and a half clear verification on average</strong>, the target spends three positions of compute to yield two and a half tokens, a throughput multiple near five sixths, which is the cost rise of about a fifth the chart shows. </p><p>The same two numbers, an accept length near two and a half and a draft length near three, generate both bars, and they are the same numbers behind the one-and-a-half to two-and-a-half times production speedups.</p><p>Push the draft length above the accept length and the throughput-regime penalty grows, which is precisely why <strong>over-drafting is the classic way to lose money</strong> on speculation in a saturated cluster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T4i-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T4i-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!T4i-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!T4i-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!T4i-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T4i-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bar chart comparing cost per million tokens for autoregressive versus speculative decoding under latency-capped serving and throughput-maximizing serving.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bar chart comparing cost per million tokens for autoregressive versus speculative decoding under latency-capped serving and throughput-maximizing serving." title="Bar chart comparing cost per million tokens for autoregressive versus speculative decoding under latency-capped serving and throughput-maximizing serving." srcset="https://substackcdn.com/image/fetch/$s_!T4i-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!T4i-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!T4i-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!T4i-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F832809e8-ea41-4db9-be51-1a2a5a28cc53_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 4.</strong> The sign of the ledger is set by the regime. Under a latency SLA that caps the batch below saturation, speculation converts idle compute into tokens and cuts cost per million output tokens (here roughly <strong>-48%</strong>). In throughput-maximizing service batched to the compute-bound point, there is no idle compute for the draft to use, and the draft&#8217;s overhead raises cost (here roughly <strong>+19%</strong>). Both magnitudes follow from the cost model in the text (accept length near 2.5, draft length near 3) and are consistent with the production speedups in Figure 8; the absolute dollar levels still move with rate, model, and quantization, anchored here to 2026 neocloud figures (Spheron, getdeploying).</figcaption></figure></div><p>The reason latency-capped service is the common case in 2026, rather than a corner case, is written directly into the benchmark SLAs. </p><p>MLPerf Inference v5.1, published by MLCommons in September 2025, sets for its DeepSeek-R1 reasoning workload a time-to-first-token ninety-ninth-percentile threshold of two seconds and a<strong> time-per-output-token ninety-ninth-percentile threshold of eighty milliseconds</strong>, against a mean input of around eight hundred tokens and a mean output of three thousand eight hundred and eighty, with a maximum output of twenty thousand, the highest the benchmark has ever specified. </p><p>An eighty-millisecond ceiling on per-token latency, applied to sequences thousands of tokens long, caps the batch far below the compute-bound point, because<strong> long sequences mean large KV reads</strong> and large KV reads mean each added unit of batch costs latency you do not have. </p><p>The SLA traps the GPU in the <strong>memory-bound regime</strong>. <mark>The trap is the opportunity: a memory-bound GPU has idle compute, and idle compute is what speculation eats.</mark></p><h3><span>The benchmark concedes the point</span></h3><p>The argument stops being a thesis and becomes a rule when the benchmark authority writes it into the rules. In March 2026, <strong>MLPerf Inference v6.0 added an interactive reasoning scenario</strong> for DeepSeek-R1 with the ceiling pulled tighter still, a 1.5-second TTFT and a 15-millisecond TPOT at the ninety-ninth percentile. </p><p>To make that scenario achievable at all, MLCommons mandates speculative decoding for it: implementations must run the official <strong>DeepSeek-R1 MTP head with EAGLE-style decoding. </strong></p><p>The independent body that defines how inference is measured decided that, past a certain latency target on reasoning traffic, speculation is not an optional optimization but a requirement of entry.</p><p>The dollar figures that frame the chart are anchored to 2026 market rates and published per-token costs, kept deliberately conservative. Neocloud H100 capacity runs around two dollars an hour, with <strong>Spheron listing two dollars and one cent</strong>; B200 on-demand sits in the five-to-six-dollar range across getdeploying and aimultiple&#8217;s trackers. </p><p>Published serving costs land near forty-two cents per million tokens on a B200 and<strong> forty-seven cents on an H100 PCIe.</strong> The point of the chart is not to nail a single deployment&#8217;s economics to the cent, which would be dishonest given how much rate, model, and quantization move the number. </p><p>The point is the asymmetry: the same forty-something cents per million can become a discount or a surcharge depending solely on which side of the saturation line your SLA puts you.</p><p>The most honest evidence for this whole framing comes, unexpectedly, from the vendor with the most incentive to claim an unqualified win. <strong>DeepSeek&#8217;s hardware paper, arXiv:2505.09343</strong>, states that its multi-token prediction module can slightly hurt raw throughput while significantly improving end-to-end generation latency. </p><p>Read that again in the context of the two regimes. DeepSeek is reporting, in print, that in a <strong>throughput accounting MTP </strong>can cost a little, and in a latency accounting it helps a lot, and that they ship it because latency is the product. </p><p>They add a second-order point that sharpens it further: MTP raises the effective batch size, which in their <strong>mixture-of-experts architecture </strong>increases expert-parallel arithmetic intensity, partially offsetting the throughput cost. </p><p>A company could have quoted the latency win alone and called it a free lunch. Instead they <strong>documented the tradeoff in both directions</strong>, which is precisely the shape of the real ledger this issue is arguing for.</p><p>When the vendor with the strongest incentive to claim a pure throughput win instead publishes that the technique &#8220;<em>slightly hurts throughput while significantly improving latency</em>,&#8221; that is not a weakness in the technique. </p><p>It is the ledger showing its true two-sided shape, in the vendor&#8217;s own numbers.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/decode-is-memory-bound-speculation?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/decode-is-memory-bound-speculation?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h2>Why reasoning moved the bill into decode</h2><p>Cost per token has a denominator, and the denominator is dominated by decode steps, because <strong>prefill is a single parallel pass</strong> over the prompt while decode is a long sequence of memory-bound steps, one per output token. </p><p>Anything that multiplies the number of output tokens multiplies the share of the bill that lives in decode, which is exactly the share speculation can attack. This is <strong>why 2026 is a different economic environment</strong> for speculative decoding than 2023 was, even though the technique is largely the same. The traffic changed.</p><p>Reasoning models emit output on a different scale entirely. A conventional chat reply is a few hundred tokens. A reasoning trace runs to thousands, and the trend within the model generation has been sharply upward: <strong>BentoML&#8217;s deployment guide </strong>notes that DeepSeek-R1-0528 nearly doubled its reasoning length over the prior R1, from around twelve thousand to around twenty-three thousand tokens on a single hard math question. </p><p>MLPerf&#8217;s DeepSeek-R1 workload puts the mean output at three thousand eight hundred and eighty and the <strong>maximum at twenty thousand</strong>. Agentic systems then chain many such traces into a single user-visible task, so the effective output length per task can be larger still. </p><p>The bill, which used to be split between a substantial prefill and a modest decode, has tilted hard toward decode.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hi0v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hi0v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!hi0v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!hi0v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!hi0v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hi0v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Horizontal bar chart of output tokens per request growing from a few hundred for chat to tens of thousands for reasoning workloads.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Horizontal bar chart of output tokens per request growing from a few hundred for chat to tens of thousands for reasoning workloads." title="Horizontal bar chart of output tokens per request growing from a few hundred for chat to tens of thousands for reasoning workloads." srcset="https://substackcdn.com/image/fetch/$s_!hi0v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!hi0v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!hi0v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!hi0v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F340c3881-d019-43c5-acf6-e5a668d8f89a_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 5.</strong> Reasoning moved the bill into decode. A reasoning request emits one to two orders of magnitude more output tokens than a chat reply, and every one of them is a memory-bound decode step that must clear the latency SLA. MLPerf Inference v5.1 DeepSeek-R1 (MLCommons, September 2025) reports a mean output of 3,880 tokens and a maximum of 20,000; R1 and R1-0528 AIME usage runs from roughly 12,000 to 23,000 tokens per question (BentoML guide). The chat baseline is a round-number reference.</figcaption></figure></div><p><strong>Two facts</strong> about reasoning traffic place it squarely in the regime where speculation pays. The first is the one just shown: it is <strong>decode-heavy</strong>, so the part of the bill speculation can lower is the dominant part. The second is subtler and follows from the previous sections. </p><p>Long traces mean long sequences in flight, which means<strong> large KV reads</strong>, which means decode is memory-bound even when the operator manages to batch, both because the <strong>latency SLA</strong> caps the batch and because the KV cost re-opens the budget past S-star. </p><p>The two mechanisms reinforce each other. The workload is in the memory-bound regime by virtue of its output length, and it is held there by <strong>virtue of its latency SLA</strong>. There is idle compute on the machine for both reasons at once, and speculation is the technique that turns idle compute into tokens.</p><p>The architectural direction of travel keeps the budget open rather than closing it. <strong>DeepSeek-V4&#8217;s sparse-attention work,</strong> with V4-Pro reportedly using about twenty-seven percent of the FLOPs and ten percent of the KV of V3.2 at a one-million-token context through DeepSeek Sparse Attention, is explicitly aimed at making very long contexts affordable.</p><p>Cheaper long context means more long context, which means more memory-bound decode, which means a wider speculation budget, not a narrower one. The <strong>hardware trend</strong> widens the budget by improving compute faster than bandwidth; the model trend widens it by pushing context length up. Both vectors point the same way.</p><p>And this is where accept length, the lever from the first section, cashes in <strong>directly against the denominator</strong>. The decode discount is, to first order, the accept length: a method that lands two and a half accepted tokens per step is doing roughly two and a half times the decode work per expensive weight load. </p><p>The measured accept lengths of the shipped 2026 methods, two and fifty-five hundredths for <strong>DeepSeek-V3.2&#8217;s MTP,</strong> two and seventy-six hundredths for GLM-5&#8217;s shared-MTP design, and four and seven tenths for EAGLE-3 on coding and reasoning workloads, are therefore not abstract quality scores. </p><p>They are multipliers on the largest line item in the reasoning-era bill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U_FB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U_FB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!U_FB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!U_FB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!U_FB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U_FB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bar chart of mean accepted tokens per verification step across vanilla drafting, DeepSeek-V3.2 MTP, GLM-5 shared-MTP, and EAGLE-3.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bar chart of mean accepted tokens per verification step across vanilla drafting, DeepSeek-V3.2 MTP, GLM-5 shared-MTP, and EAGLE-3." title="Bar chart of mean accepted tokens per verification step across vanilla drafting, DeepSeek-V3.2 MTP, GLM-5 shared-MTP, and EAGLE-3." srcset="https://substackcdn.com/image/fetch/$s_!U_FB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!U_FB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!U_FB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!U_FB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F410e3d7e-698b-4812-8847-93486f5c88d5_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 6.</strong> The lever is accept length, not raw acceptance. Tokens produced per step equal the accepted run plus one bonus token, and each step costs exactly one target weight load, so accept length is the decode discount. Reported figures: DeepSeek-V3.2 MTP <strong>2.55</strong> and GLM-5 shared-MTP <strong>2.76</strong> from the GLM-5 technical report (arXiv:2602.15763); EAGLE-3 <strong>4.5 to 5.0</strong> on coding and reasoning from E2E Networks. The vanilla-draft figure is a representative reference.</figcaption></figure></div><div><hr></div><h2>Where speculation loses</h2><p>A technique that only ever helps does not need an issue written about when to use it. Speculation has real failure modes, and an analysis that buries them is worth less than one that lists them, so here is the full debit column, without hedging.</p><p><strong>The throughput regime.</strong> In saturated high-batch short-context serving, the offline-batch corner of the phase diagram, <mark>speculation is a tax and should be disabled.</mark> The compute is fully employed, the draft has nothing free to run in, and its forward passes displace real work. The Spheron and Tian Pan guidance is correct here without qualification. If your job is to push the maximum number of short completions through a fleet of GPUs at minimum cost per token, speculation is the wrong lever.</p><p><strong>Acceptance collapse.</strong> <mark>Below roughly one-half acceptance, speculation hurts at any batch</mark>, because too few candidates survive to cover the draft&#8217;s cost. Acceptance is not a constant; it falls with high sampling temperature, with out-of-distribution inputs the draft was never trained on, and with the kind of high-entropy generation where the next token is genuinely uncertain. A draft trained against one target distribution and then serving a drifted or fine-tuned target degrades silently, the acceptance rate sliding without any error being raised. Monitoring accept length in production is not optional; it is the only way to notice that your discount has quietly become a surcharge.</p><p><strong>VRAM pressure.</strong> The draft model and its KV cache occupy memory you could otherwise spend on a larger batch or a longer context. A Llama-3.3-70B target in FP8 alongside a one-billion-parameter draft consumes roughly seventy-five to seventy-eight gigabytes on an eighty-gigabyte H100, per Spheron&#8217;s figures, leaving very little headroom. On a memory-constrained deployment, the draft can cost you more in lost batch capacity than it returns in accept length, and that tradeoff has to be measured, not assumed.</p><p><strong>No help for time-to-first-token.</strong> Speculation accelerates decode, and only decode. It does nothing for prefill, which means it does nothing for time-to-first-token. Under the MLPerf two-second TTFT ceiling, that is a separate problem requiring separate techniques, which is precisely the prefill-decode disaggregation argument of Issue 03. Speculation and prefill optimization are complementary, not substitutes, and a serving stack that needs both will not get the first from the second.</p><p><strong>Draft maintenance.</strong> A separate draft model is a second training, evaluation, and deployment surface that must be kept aligned as the target evolves. Every target update risks degrading a draft that was tuned against the previous version. EAGLE-style heads and built-in MTP layers reduce this by coupling the draft to the target&#8217;s own features or parameters, but they do not eliminate the obligation to retrain and revalidate. GLM-5&#8217;s choice to share parameters across three MTP layers, described in arXiv:2602.15763, is partly an answer to exactly this maintenance cost: fewer independent parameters to train and keep aligned.</p><p><strong>The losslessness caveat, restated.</strong> The provable equivalence to standard sampling holds for the exact rejection-sampling rule. Relaxed acceptance, typical acceptance, and aggressive tree-acceptance schemes raise throughput by changing the output distribution. They are frequently worth it, but a four-times figure obtained under a relaxed rule is not interchangeable with a four-times figure under exact sampling, and a serving team quoting a speedup owes itself, and its users, clarity about which rule produced it.</p><p><strong>Draft-length tuning.</strong> The number of tokens the draft proposes per step, often written gamma, is a workload-dependent knob with a real optimum. Set it too long and the draft burns compute generating candidates that will be rejected; set it too short and you leave accept length on the table. The optimum moves with acceptance rate and with batch size, so a value tuned on one workload can be wrong on another, and dynamic schemes that adjust it per request exist precisely because no single value is right everywhere.</p><p><strong>The lab-versus-production gap.</strong> The EAGLE-3 paper reports speedups of up to six and a half times, but those are temperature-zero academic measurements on Vicuna-13B, Llama-3.1-8B, and Llama-3.3-70B. Production reports cluster instead around two to three times: LMSYS and Vertex describe two-to-three-times figures for EAGLE-3 on SGLang, E2E Networks reports two and three tenths on Llama-3.1-8B at a batch of four, and a Gemma-4 EAGLE3 draft head is documented at one and seventy-two hundredths at batch one on conversational traffic. The gap between the lab number and the production number is itself one of the most important facts in this space, because <mark>quoting the former as if it were the latter is the single most common honesty failure in vendor material on speculative decoding.</mark></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IE6Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IE6Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!IE6Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!IE6Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!IE6Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IE6Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Horizontal bar chart contrasting a 6.5x lab speedup against a cluster of production speedups between 1.66x and 2.3x.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Horizontal bar chart contrasting a 6.5x lab speedup against a cluster of production speedups between 1.66x and 2.3x." title="Horizontal bar chart contrasting a 6.5x lab speedup against a cluster of production speedups between 1.66x and 2.3x." srcset="https://substackcdn.com/image/fetch/$s_!IE6Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!IE6Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!IE6Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!IE6Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1992dc1-fdc3-410b-af49-2787e536fe46_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 7.</strong> The headline academic figure (6.5x, EAGLE-3 paper, temperature 0) sits far above the production cluster, which lands between roughly 1.66x and 2.3x across the EAGLE 3.1 vLLM benchmark, DeepSeek&#8217;s vendor-reported MTP TPS, a Gemma-4 EAGLE3 draft head, and E2E Networks. The bars use different targets and conditions and are not strictly comparable; they are shown to convey the range, and the distance between the gold bar and the teal cluster is the point.</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>A decision on the plane</h2><p>The verdict is not a yes or a no. It is a lookup. Given a workload&#8217;s batch size, its context length, its <strong>latency SLA</strong>, and its measured acceptance, the phase diagram tells you which regime you are in, and the regime tells you the sign of the ledger. The table below collapses the analysis into that lookup.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wYrw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wYrw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 424w, https://substackcdn.com/image/fetch/$s_!wYrw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 848w, https://substackcdn.com/image/fetch/$s_!wYrw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 1272w, https://substackcdn.com/image/fetch/$s_!wYrw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wYrw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png" width="1456" height="995" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:995,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:248170,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710199?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wYrw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 424w, https://substackcdn.com/image/fetch/$s_!wYrw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 848w, https://substackcdn.com/image/fetch/$s_!wYrw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 1272w, https://substackcdn.com/image/fetch/$s_!wYrw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37830286-9e44-4ed2-a815-f14199ca909b_1710x1168.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>State the thesis cleanly now that the machinery is in place. <strong>Speculative decoding is the only inference technique</strong> that converts decode&#8217;s idle compute into tokens losslessly, and the sign of its effect on your bill is set entirely by whether that compute was actually idle. </p><p>Whether it was idle is a question about the roofline, and <strong>where you sit on the roofline</strong> is a question about batch size and context length, the two axes of the phase diagram. </p><p>There is no universal answer because the inputs are not universal. <mark>There is a correct answer for every point on the plane, and the table is how you read it.</mark></p><p>The reason this matters more now than it did three years ago is that the median workload moved. In <strong>2023 the prototypical request</strong> was a short chat completion at modest context, which lives near the compute-bound corner once you batch it, where speculation is at best neutral. </p><p>In 2026 the prototypical high-value request is a long reasoning trace under a <strong>tight per-token latency SLA</strong>, which lives deep in the memory-bound region for two independent reasons, its output length and its SLA, and which is therefore exactly where speculation pays. <mark>The technique did not move toward the workload. The workload moved toward the technique.</mark></p><p>That migration is why the shipping decisions of the major laboratories converged. <strong>DeepSeek built multi-token prediction into V3</strong> and carried it through V3.2, documenting the latency win and the throughput cost honestly. </p><p>GLM-5 shipped a shared-parameter three-layer MTP design with a measured accept length near two and three-quarters. <strong>NVIDIA&#8217;s NeMo RL work applied EAGLE-3 to reinforcement-learning rollouts</strong> and reported a one-and-eight-tenths-times generation speedup at the eight-billion scale, with validation accuracy on AIME-2024 evolving identically under autoregressive and speculative decoding, a clean confirmation that the lossless guarantee holds across training. </p><p><strong>EAGLE-3 landed across vLLM, SGLang, and TensorRT-LLM</strong>, the three serving stacks that matter. These are not independent fashions. They are the same bet, placed by everyone who looked at the same plane and saw that reasoning traffic had walked into the half where the ledger reads in your favor.</p><p><em>The technique never changed. The regime did. Speculation lowers your cost per token exactly where batching cannot help you, and reasoning is the workload that made that region the center of the map.</em></p><div><hr></div><h2>Confidence tiers and external-audit read</h2><p>Every load-bearing claim in this issue is scored below against a four-tier confidence scale, with its source named inline. </p><p>The <strong>scale is applied as an external auditor would apply it</strong>, crediting primary and measured sources, discounting derived and illustrative ones, and flagging the weakest links explicitly rather than hiding them in the prose.</p><p><strong>Tier A</strong> <em>primary or measured: peer-reviewed papers, vendor hardware disclosures, MLPerf-published SLAs and benchmark statistics.</em><br><strong>Tier B</strong> <em>secondary, with method: vendor or practitioner reports that state their configuration and measurement conditions.</em><br><strong>Tier C</strong> <em>derived or stylized: house figures and curves built from the cited physics, presented as illustrative renderings, not measurements.</em><br><strong>Tier D</strong> <em>illustrative or round-number: reference values chosen for scale, not claimed as measured.</em></p><p><strong>A</strong></p><p><strong>Exact rejection-sampling speculative decoding is output-distribution lossless.</strong></p><p>Leviathan et al. 2023; Chen et al. 2023; EAGLE losslessness per Hugging Face engineering writeup. Provable equivalence to standard sampling under the exact rule.</p><p><strong>A</strong></p><p><strong>EAGLE-3 mechanism: training-time test, multi-layer feature fusion, direct token prediction, dynamic draft tree.</strong></p><p>EAGLE-3 paper, NeurIPS 2025, arXiv:2503.01840. Headline lab speedups up to 6.5x at temperature 0 on Vicuna-13B, Llama-3.1-8B, Llama-3.3-70B (explicitly a best-case lab figure; production lands far lower, see Figure 8).</p><p><strong>A</strong></p><p><strong>DeepSeek MTP slightly hurts throughput while significantly improving end-to-end latency; raises effective batch and expert-parallel intensity.</strong></p><p>DeepSeek hardware paper, arXiv:2505.09343. The two-sided tradeoff is stated in the vendor&#8217;s own text, which is the strongest single piece of evidence in this issue.</p><p><strong>A</strong></p><p><strong>MLPerf DeepSeek-R1 SLAs: TTFT 99p 2s, TPOT 99p 80ms; mean input 800, mean output 3,880, max output 20,000.</strong></p><p>MLPerf Inference v5.1, MLCommons, September 2025. These SLAs are the anchor for why latency-capped serving traps the GPU in the memory-bound regime.</p><p><strong>A</strong></p><p><strong>MLPerf Inference v6.0 added a DeepSeek-R1 interactive scenario (TTFT 1.5s, TPOT 15ms) and mandates speculative decoding (official MTP head, EAGLE-style) to meet it.</strong></p><p>MLCommons, March 2026. The benchmark authority requiring speculation for tight-latency reasoning is the strongest external corroboration of the thesis.</p><p><strong>A</strong></p><p><strong>NVIDIA NeMo RL: EAGLE-3 gives ~1.8x rollout generation speedup at 8B; AIME-2024 accuracy identical under autoregressive and speculative decoding throughout training.</strong></p><p>NVIDIA NeMo RL research, May 2026. Independent empirical confirmation that the lossless guarantee holds in practice across training.</p><p><strong>A</strong></p><p><strong>Critical-sequence-length result: past S*, decode is memory-bound even at large batch via KV read; KV-light draft delivers up to ~2x throughput and latency.</strong></p><p>MagicDec, arXiv:2408.11049; Together AI long-context analysis. Draft-to-target memory ratio ~0.4, constant at large batch, for Llama-3.1-70B with 8B draft.</p><p><strong>A</strong></p><p><strong>Roofline ridge points: H100 SXM FP8 591, H200 412, B200 ~562 FLOP/byte; compute outgrew bandwidth ~36x vs ~9x V100 to B200.</strong></p><p>Carried from Issue 03, The Split and the Seam, and Issue on the memory wall, The Wall and the Stack. Hardware specifications and systems-literature divergence figures.</p><p><strong>A</strong></p><p><strong>DeepSeek-V4 sparse attention: V4-Pro 27% FLOPs and 10% KV of V3.2 at 1M context; V4-Flash 10% and 7%.</strong></p><p>Official DeepSeek-V4-Pro / V4-Flash model cards (Compressed Sparse Attention + Heavily Compressed Attention). Verified figures. Direction-of-travel evidence that long context is getting cheaper, widening the budget.</p><p><strong>A</strong></p><p><strong>EAGLE 3.1 per-user throughput: 2.03x at concurrency 1, 1.71x at 4, 1.66x at 16.</strong></p><p>Primary: vLLM team blog, May 2026 (EAGLE / vLLM / TorchSpec joint release). Kimi-K2.6-NVFP4, tensor-parallel 4, GB200, non-disagg, SPEED-Bench coding. Verified against the primary engineering writeup.</p><div><hr></div><p><strong>B</strong></p><p><strong>Practical break-even near batch 32; below ~0.5 acceptance speculation hurts at any batch.</strong></p><p>Spheron production guide, March 2026; E2E Networks. Practitioner guidance with stated qualifications on model, quantization, and sequence length.</p><p><strong>B</strong></p><p><strong>The lab-versus-production speedup comparison in Figure 8 (6.5x lab vs a 1.66 to 2.3x production cluster).</strong></p><p>Compiled from verified primary and vendor sources (EAGLE-3 paper, EAGLE 3.1 vLLM blog, DeepSeek hardware paper, Gemma-4 EAGLE3 card, E2E Networks). Bars use different targets and conditions and are not strictly comparable; shown to convey range, not to rank.</p><p><strong>B</strong></p><p><strong>Production speedups cluster at 2 to 3x; E2E reports 2.3x on Llama-3.1-8B at batch 4, accept length 4.5 to 5.0.</strong></p><p>LMSYS and Vertex on SGLang; E2E Networks. Multiple independent practitioner reports converging on the same range.</p><p><strong>B</strong></p><p><strong>Accept lengths: DeepSeek-V3.2 MTP 2.55, GLM-5 shared-MTP 2.76; GLM-5 shares parameters across 3 MTP layers.</strong></p><p>GLM-5 technical report, arXiv:2602.15763. EAGLE-3 accept length 4.5 to 5.0 from E2E Networks.</p><p><strong>B</strong></p><p><strong>2026 GPU rates and per-token costs: H100 ~$2/hr, B200 ~$5 to $6/hr on-demand; ~$0.42/M (B200), ~$0.47/M (H100 PCIe).</strong></p><p>Spheron ($2.01/hr H100), getdeploying, aimultiple. Market trackers; rates move with provider, commitment, and region.</p><p><strong>B</strong></p><p><strong>Reasoning length growth: R1-0528 nearly doubled to ~23K tokens per AIME question vs ~12K for prior R1.</strong></p><p>BentoML DeepSeek deployment guide, 2026. R1 token pricing ~$0.55/M in, ~$2.19/M out; output billed higher and dominates cost.</p><p><strong>C</strong></p><p><strong>The KV-versus-weight amortization crossover (Figure 4): batch x sequence near 220,000 for a 70B model, where the KV read overtakes the weight read (~7,000 tokens at batch 32, ~1,750 at batch 128).</strong></p><p>House order-of-magnitude calculation from Llama-3-70B architecture (80 layers, 8 KV heads, head-dim 128) and the weight-versus-KV read balance, drawn in Figure 4. The coefficient moves with KV precision and serving format; the order of magnitude, and the conclusion that reasoning traces sit past the crossover, is robust.</p><p><strong>C</strong></p><p><strong>The compute-bound boundary and ~1,000-token wall in Figure 3.</strong></p><p>Derived, not stylized: the boundary is the roofline condition AI = 2B/(1+B*S/C) exceeding the ridge, with the wall at S = 2C/R (C ~ 220,000; R = 562 FP8 for B200). A house calculation with standard simplifying assumptions (GEMM-dominated FLOPs, dense GQA KV); exact coordinates shift with precision and ridge, the structure does not.</p><p><strong>C</strong></p><p><strong>The -48% / +19% cost magnitudes in Figure 5.</strong></p><p>Derived from the cost model in the text (accept length ~2.5, draft length ~3, draft overhead ~0.2) and consistent with the production speedups in Figure 8. Absolute dollar levels still vary with rate, model, and quantization; the regime-dependent sign and rough magnitude are the load-bearing claim.</p><p><strong>C</strong></p><p><strong>The shape of the speedup-decay envelope in Figure 2.</strong></p><p>House curve illustrating the conventional decay toward break-even; the measured EAGLE 3.1 points on it are Tier A and the break-even location is sourced, but the connecting envelope is schematic, not fitted.</p><p><strong>D</strong></p><p><strong>The ~300-token chat-reply baseline and the vanilla-draft 2.1 accept-length reference.</strong></p><p>Round-number references chosen to set scale against the measured reasoning and method figures, not claimed as measured values.</p><h3>External-audit simulation</h3><p>Audited as a whole, the issue rests on a spine of Tier A primary sources, and every load-bearing empirical claim in it was checked against its primary source: the <strong>EAGLE-3 paper </strong>(arXiv:2503.01840),<strong> MagicDec </strong>(arXiv:2408.11049), the <strong>DeepSeek hardware disclosure</strong> (arXiv:2505.09343), <strong>the GLM-5 report </strong>(arXiv:2602.15763), the <strong>MLPerf v5.1 and v6.0 </strong>specifications, the <strong>DeepSeek-V4 model cards</strong>, and the EAGLE 3.1 vLLM <strong>release </strong>each confirmed the figures attributed to them. </p><p>The<strong> central argument</strong>, that the sign of the ledger is set by serving regime and that reasoning traffic sits in the favorable regime, follows from those sources rather than from the house figures, which is the property an audit most wants to see. </p><p>Two pieces of evidence are doing disproportionate work and both survive scrutiny: DeepSeek&#8217;s own statement that <strong>MTP slightly hurts throughput </strong>while significantly <strong>improving latency</strong>, a direct vendor quote, and MLPerf v6.0&#8217;s decision to mandate speculative decoding for its tight-latency reasoning scenario, which is the measuring authority writing the thesis into the rules.</p><p>The weakest links are named rather than hidden, and after this revision they are narrow. <strong>Boundary and Crossover</strong> are now derivations rather than stylizations: the first is the roofline condition with the wall at twice the bytes-ratio over the ridge, the second is the<strong> weight-versus-KV balance</strong>, both house calculations carried out with standard simplifying assumptions (<em>GEMM-dominated compute, dense grouped-query KV</em>) whose exact coordinates move with precision and ridge while the structure holds. </p><p>The cost magnitudes are likewise derived from an explicit model, an accept length near two and a half and a draft length near three, and <strong>cross-checked against the production speedups</strong>; what remains genuinely soft there is the absolute dollar level, which varies too much with rate, model, and quantization to pin down. </p><p>The <strong>decay envelope is a schematic shape</strong>, though the measured points on it and its break-even location are sourced. The chat and vanilla-draft baselines are round numbers for scale. A handful of practitioner figures, the break-even batch, the <strong>VRAM envelope</strong>, and the production speedup band, come from individual engineering guides rather than independently reproduced benchmarks, and are tiered B accordingly. </p><p>None of these elements carries the conclusion: a reader who accepts only the Tier A claims, and works the two house calculations independently, arrives at the same verdict table.</p><p><strong>Overall confidence in the thesis is high</strong>, because the thesis is a statement about regimes and signs that the primary sources support directly, and it is deliberately not a statement that speculation yields any specific universal multiple, which the evidence would not support. </p><p>The <strong>quantitative illustrations</strong> are held at lower confidence by design, and labeled as such, so that the argument does not borrow credibility it has not earned. A reader who accepts only the Tier A claims still arrives at the same verdict table; the lower tiers furnish the texture, not the conclusion.</p><div><hr></div><h2>Sources and useful informations</h2><p>Primary and secondary sources for the load-bearing claims, with arXiv identifiers and venues where applicable. The text above attributes each source at its point of use; this is the consolidated record. </p><p>Papers appear first, then benchmark specifications, vendor and practitioner writeups, and model cards.</p><ol><li><p><span>Y. Leviathan, M. Kalman, and Y. Matias. </span><em><span>Fast Inference from Transformers via Speculative Decoding.</span></em><span> International Conference on Machine Learning (ICML), 2023. arXiv:2211.17192.</span></p></li><li><p><span>C. Chen, S. Borgeaud, G. Irving, J.-B. Lespiau, L. Sifre, and J. Jumper. </span><em><span>Accelerating Large Language Model Decoding with Speculative Sampling.</span></em><span> arXiv:2302.01318, 2023.</span></p></li><li><p><span>T. Cai, Y. Li, Z. Geng, H. Peng, J. D. Lee, D. Chen, and T. Dao. </span><em><span>Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads.</span></em><span> International Conference on Machine Learning (ICML), 2024. arXiv:2401.10774.</span></p></li><li><p><span>Y. Li, F. Wei, C. Zhang, and H. Zhang. </span><em><span>EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty.</span></em><span> International Conference on Machine Learning (ICML), 2024. arXiv:2401.15077.</span></p></li><li><p><span>Y. Li, F. Wei, C. Zhang, and H. Zhang. </span><em><span>EAGLE-2: Faster Inference of Language Models with Dynamic Draft Trees.</span></em><span> Conference on Empirical Methods in Natural Language Processing (EMNLP), 2024. arXiv:2406.16858.</span></p></li><li><p><span>Y. Li, F. Wei, C. Zhang, and H. Zhang. </span><em><span>EAGLE-3: Scaling up Inference Acceleration of Large Language Models via Training-Time Test.</span></em><span> Conference on Neural Information Processing Systems (NeurIPS), 2025. arXiv:2503.01840.</span></p></li><li><p><span>R. Sadhukhan, J. Chen, Z. Chen, V. Tiwari, A. May, T. Chen, and B. Chen. </span><em><span>MagicDec: Breaking the Latency-Throughput Tradeoff for Long Context Generation with Speculative Decoding.</span></em><span> arXiv:2408.11049, 2024.</span></p></li><li><p><span>DeepSeek-AI. </span><em><span>DeepSeek-V3 Technical Report.</span></em><span> arXiv:2412.19437, 2024.</span></p></li><li><p><span>DeepSeek-AI. </span><em><span>Insights into DeepSeek-V3: Scaling Challenges and Reflections on Hardware for AI Architectures.</span></em><span> International Symposium on Computer Architecture (ISCA), 2025. arXiv:2505.09343.</span></p></li><li><p><span>DeepSeek-AI. </span><em><span>DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning.</span></em><span> arXiv:2501.12948, 2025.</span></p></li><li><p><span>Z.ai (Zhipu AI). </span><em><span>GLM-5 Technical Report.</span></em><span> arXiv:2602.15763, 2026.</span></p></li><li><p><span>MLCommons. </span><em><span>MLPerf Inference: Datacenter, v5.1 (DeepSeek-R1 reasoning workload).</span></em><span> Benchmark rules and results, 2025.</span></p></li><li><p><span>MLCommons. </span><em><span>MLPerf Inference: Datacenter, v6.0 (DeepSeek-R1 Interactive scenario, mandated speculative decoding).</span></em><span> Benchmark rules, 2026.</span></p></li><li><p><span>EAGLE Team, vLLM Team, and TorchSpec. </span><em><span>EAGLE 3.1: release and SPEED-Bench results on Kimi-K2.6.</span></em><span> vLLM Blog, May 2026.</span></p></li><li><p><span>NVIDIA. </span><em><span>Speculative Decoding for Reinforcement-Learning Rollouts in NeMo RL.</span></em><span> NVIDIA Developer technical writeup, 2026.</span></p></li><li><p><span>Together AI. </span><em><span>Speculative decoding for high-throughput long-context inference (analysis of MagicDec).</span></em><span> Together AI Blog, 2024.</span></p></li><li><p><span>BentoML. </span><em><span>The Complete Guide to DeepSeek Models: V3, R1, V4 and Beyond.</span></em><span> BentoML Blog, 2026.</span></p></li><li><p><span>Spheron Network. </span><em><span>Speculative decoding in production: a practitioner&#8217;s guide.</span></em><span> Engineering guide, 2026.</span></p></li><li><p><span>E2E Networks. </span><em><span>Speculative decoding performance on Llama-3.1 serving.</span></em><span> Engineering notes, 2026.</span></p></li><li><p><span>DeepSeek-AI. </span><em><span>DeepSeek-R1-0528.</span></em><span> Model card, Hugging Face, 2025.</span></p></li><li><p><span>DeepSeek-AI. </span><em><span>DeepSeek-V4-Pro and DeepSeek-V4-Flash.</span></em><span> Model cards, Hugging Face, 2026.</span></p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Software Frontier&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Software Frontier</span></a></p><p></p></li></ol>]]></content:encoded></item><item><title><![CDATA[The Split and the Seam]]></title><description><![CDATA[Eighteen months ago, splitting prefill from decode was a contrarian research bet. Today it is the default that every serious stack runs, it helped erase 600 billion dollars from the company that build]]></description><link>https://www.thesoftwarefrontier.com/p/the-split-and-the-seam</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/the-split-and-the-seam</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Sun, 21 Jun 2026 14:02:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!a3zy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a3zy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a3zy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!a3zy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!a3zy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!a3zy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a3zy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png" width="1122" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2294382,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/202706223?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!a3zy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!a3zy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!a3zy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!a3zy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e933c23-7e0f-4ee4-be74-01d31e1bd107_1122x1402.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Intro</h2><p>On Monday, <strong>January 27, 2025</strong>, NVIDIA lost about 600 billion dollars of market value in a single trading session, a 17 percent fall that stands as the <strong>largest one-day market-capitalization loss</strong> in the history of US public markets. It did not fall alone. </p><p>Broadcom dropped 17.4 percent, Marvell 19.1 percent, AMD 19.1 percent, the <strong>chip-adjacent names down</strong> in sympathy across the board. The trigger was not an earnings miss or a product recall. </p><p>It was a technical report from a <strong>Chinese lab, DeepSeek</strong>, whose V3 and R1 models matched the frontier while having been trained and, crucially, served at a fraction of the assumed cost. </p><p>The market did the obvious arithmetic: if <strong>inference is far cheaper</strong> than actually we believed, fewer GPUs are needed, so the company selling the GPUs is worth less.</p><p>The arithmetic was wrong, and the reason it was wrong is the subject of this issue. Within days, Microsoft&#8217;s Satya Nadella was citing the<strong> Jevons paradox</strong>, the nineteenth-century observation that making a resource cheaper to use tends to increase, not decrease, its total consumption. The paradox held beautifully. </p><p>Over the course of 2025, by the Peterson Institute&#8217;s accounting, the cost to reach a fixed score on a <strong>hard reasoning benchmark fell</strong> from about 4,500 dollars per task to 11.64 dollars, a roughly<strong> 386-fold collapse</strong>, and inference usage did not shrink to match. It exploded past the efficiency gains, exactly as Jevons would predict. </p><p>The chip that was supposed to be made redundant by cheap inference is now sold out for years on the back of it [Figure 1].</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zuXr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zuXr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!zuXr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!zuXr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!zuXr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zuXr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 12&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 12" title="Figure 12" srcset="https://substackcdn.com/image/fetch/$s_!zuXr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!zuXr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!zuXr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!zuXr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa34aff13-7ef3-4e83-b325-ba8b05d0417f_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1. The shake and its resolution. Left, the single-day sector rout that followed DeepSeek&#8217;s efficiency disclosure, the largest one-day loss in market history. Right, the cost to reach a fixed benchmark score over 2025, a collapse the industry has named LLMflation. Efficiency did not destroy demand. It multiplied it.</figcaption></figure></div><p>Here is the part the market missed in its first reaction. DeepSeek&#8217;s efficiency was not a single trick. </p><p>It was a stack of techniques, low-precision FP8 arithmetic, a <strong>sparse mixture-of-experts model</strong>, a compressed attention scheme called multi-head latent attention, and, underneath all of it, an inference architecture that ran the <strong>two phases of language-model serving</strong>, prefill and decode, on entirely separate pools of machines. </p><p>That last technique, <strong>disaggregation</strong>, is the one that matters most for understanding what happened next, because in the eighteen months bracketing that selloff it went from a contrarian research idea that the <strong>open-source community</strong> pushed back on to the default architecture of virtually every production serving system in existence. </p><p><strong>NVIDIA Dynamo, llm-d, Ray Serve, SGLang, vLLM, LMCache</strong>, and Mooncake all run on it now. The very metrics the industry uses to talk about inference latency, time-to-first-token and time-per-output-token, were popularized through its lens. </p><p>The authors of <strong>DistServe</strong>, the paper that named the architecture, marked the moment in a November 2025 retrospective with a wry observation: if Moore&#8217;s law doubles compute every eighteen months, then the <strong>serving-systems equivalent had just doubled too</strong>, not because the chips got faster, but because the systems serving them did.</p><p>This issue is a teardown of that architecture as it actually exists in mid-2026, not as a tidy origin story. We<strong> start with the physics</strong>, because the physics is clean and explains everything downstream. </p><p>Then <strong>why colocation lost</strong>, what the split mechanically does, and the cost it creates at the seam where the two halves rejoin, a cost that the rack-scale hardware of the current generation has largely, but not entirely, dissolved. </p><p>Then we <strong>go down into the kernel layer</strong>, to the expert-parallel all-to-all communication and the custom kernels that make large mixture-of-experts models servable at all, which is the part most coverage skips and the part that actually decides throughput. </p><p>Then the attention rewrites that are shrinking the problem from underneath, the <strong>cross-vendor benchmark numbers</strong> and the honest places they fall apart, the operational tax nobody puts on the slide, the new silicon the split has spawned, and finally what the whole shake settled into.</p><p>The thesis, stated once and defended throughout: disaggregation is no longer a choice an operator debates. It is the substrate. The <strong>live questions have moved up a layer</strong>, to how you balance the pools, how wide you spread the experts, and whether the wire between your machines is fast enough that the seam is free.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Two workloads on opposite ends of the roofline</h2><p>The <strong>roofline model</strong> is the oldest honest tool in performance engineering, and once prefill and decode are plotted on it the rest of this issue is commentary. </p><p>Every kernel has an arithmetic intensity, the<strong> floating-point operations</strong> it performs per byte it moves from memory. Every chip has two ceilings: a compute ceiling set by its peak arithmetic rate, and a memory ceiling set by its bandwidth. </p><p>A kernel is compute-bound when its arithmetic intensity is high enough that the <strong>chip exhausts its FLOPS before its bandwidth</strong>, and memory-bound otherwise. </p><p>The crossover, the ridge point, is simply peak FLOP rate divided by bandwidth. For an <strong>H100 SXM at FP8</strong>, roughly 1,979 dense teraFLOPS over 3.35 terabytes per second of HBM3, the ridge sits near 591 FLOP per byte. </p><p>For the <strong>H200,</strong> identical compute over 4.8 terabytes per second of HBM3e, it falls to 412. For a B200, about 4,500 dense FP8 teraFLOPS over 8 terabytes per second, near 562 [Figure 2].</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4W3S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4W3S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!4W3S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!4W3S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!4W3S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4W3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20d78621-0dc3-4426-9930-56a99469e836_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 1" title="Figure 1" srcset="https://substackcdn.com/image/fetch/$s_!4W3S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!4W3S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!4W3S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!4W3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d78621-0dc3-4426-9930-56a99469e836_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 2. A roofline for three inference GPUs with the operating region of each phase marked. Prefill runs against the flat compute roof. Single-stream decode is pinned to the sloped bandwidth region. The same silicon is a different machine depending on which phase is running.</figcaption></figure></div><p>Prefill ingests the whole prompt at once. <strong>Every token attends to every prior token</strong>, the feed-forward layers process the full sequence in parallel, and the matrix multiplications are large and dense. </p><p>A prompt of a few thousand tokens pushes the arithmetic intensity into the <strong>hundreds or thousands of FLOP per byte</strong>, planting prefill firmly to the right of the ridge against the compute roof. Prefill is a FLOPS problem. It wants tensor cores and low precision and scales with raw matrix-multiply throughput.</p><p>Decode is the opposite animal. To generate one token it reads the entire weight set and the entire <strong>key-value cache</strong> for the sequence, performs a thin slice of computation, and emits a single token. For a single stream the arithmetic intensity sits near the floor, on the order of one to two FLOP per byte, pinning decode to the far left of the roofline on the bandwidth-limited slope. </p><p>Decode is a <strong>memory-bandwidth problem</strong>. It cannot keep the tensor cores fed; it cares only how fast the chip streams weights and cache out of HBM. The hard floor follows immediately: the fastest a single decode stream can run is bandwidth divided by bytes read per token, dominated by the weights [Figure 3]. </p><p>A <strong>70-billion-parameter model</strong> at FP16 is 140 gigabytes, so an H100 at 3.35 terabytes per second generates at most about 24 tokens per second on a single stream, an H200 about 34, a B200 about 57. Halve the precision to FP8 and every ceiling doubles. </p><p>This is the <strong>same calculation that bounds DeepSeek&#8217;s</strong> observed 20 to 22 tokens per second in production. Compute does not enter.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bdZL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bdZL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!bdZL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!bdZL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!bdZL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bdZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 3&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 3" title="Figure 3" srcset="https://substackcdn.com/image/fetch/$s_!bdZL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!bdZL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!bdZL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!bdZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9b0dbb-6acb-4bef-b5fd-b60a4b83f74b_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 3. The single-stream decode ceiling is HBM bandwidth divided by model bytes. No quantity of compute changes it. Halving precision, which halves the weight bytes, is the only lever that moves the ceiling for a fixed model.</figcaption></figure></div><p>Batching is the escape, and its limit is the reason disaggregation exists. <strong>Decode many sequences </strong>at once and the weight read is shared across the batch: you stream the weights once and amortize them. </p><p>The arithmetic intensity of decode is therefore approximately twice the batch size divided by the bytes per weight, which at FP16 is<strong> approximately the batch size itself</strong> [Figure 4]. To cross the H100 FP8 ridge of 591 you need a batch in the high hundreds. </p><p>That is the entire game in decode, pack as many concurrent sequences into a step as memory allows, because every added sequence moves you rightward toward the compute roof and <strong>lifts tokens-per-second-per-GPU. </strong></p><p>Hold the two facts together: prefill wants to run immediately, in small groups, against the compute roof, to keep <strong>first-token latency low</strong>; decode wants to run in enormous batches against the bandwidth ceiling, to keep cost-per-token low. </p><p><strong>One phase is latency-shaped</strong> and compute-hungry, <strong>the other throughput-shaped</strong> and bandwidth-hungry, and for two years the industry asked one GPU under one scheduler to do both at once.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sk9s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sk9s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!Sk9s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!Sk9s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!Sk9s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sk9s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 2" title="Figure 2" srcset="https://substackcdn.com/image/fetch/$s_!Sk9s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!Sk9s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!Sk9s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!Sk9s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8e4a4ca-f093-4cae-bfe7-c043bc733d82_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 4. Decode arithmetic intensity is essentially the batch size, because weights are read once per step and shared. Reaching the compute roof requires hundreds of concurrent sequences, which is why decode pools are built around the largest batches memory will hold.</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Why colocation lost</h2><p>Run both phases on one GPU under one<strong> continuous-batching scheduler</strong>, the architecture Orca introduced and vLLM popularized, and they fight. The fight has a precise mechanism. </p><p>Continuous batching keeps a rolling batch of decode steps running and folds in new requests as they arrive, but a <strong>new request cannot decode</strong> until its prompt is prefilled, and prefill is a heavy compute-bound operation that occupies the GPU far longer than a single decode step. </p><p>When a prefill lands in the batch, the system must either pause the <strong>in-flight decodes</strong> to prioritize it or batch the prefill alongside them, and both choices stall token generation for every active sequence. </p><p>The <strong>DistServe authors</strong> quantify the damage bluntly in their retrospective: even with chunked-prefill mitigation, a single large prefill can inflate time-per-output-token by a factor of two to thirty under bursty workloads. </p><p>A long prompt arriving at the wrong moment makes every other user&#8217;s stream stutter for a <strong>third of a second or more</strong> [Figure 5].</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Uw3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Uw3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!6Uw3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!6Uw3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!6Uw3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Uw3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 11&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 11" title="Figure 11" srcset="https://substackcdn.com/image/fetch/$s_!6Uw3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!6Uw3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!6Uw3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!6Uw3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f51689f-e474-4199-a1d4-f970379ac6a8_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 5. The structural waste of colocation. A prefill-heavy step pins the tensor cores while bandwidth idles; a decode-heavy step pins bandwidth while the tensor cores idle. A shared GPU pays for both resources and presses hard on one at a time. Exact values are workload-dependent; the asymmetry is not.</figcaption></figure></div><p>The <strong>deeper cost is coupling</strong>. As the DistServe paper put it, colocation forces the resource allocator to provision for the worst case of both latency targets simultaneously, the <strong>tight first-token target</strong> and the tight per-token target, because the same GPUs serve both. </p><p>You cannot tune one phase without detuning the other, and you cannot scale one without scaling the other. The roofline says why the waste is structural and <strong>not a scheduling artifact</strong>: on a prefill-heavy step the tensor cores run near saturation while the memory bus idles, and on a decode-heavy step the reverse, so a <strong>colocated GPU pays rent</strong> on two expensive resources and uses roughly one of them at any instant.</p><p>The serving community fought this with chunked prefill, introduced in the <strong>Sarathi work by Amey Agrawal</strong> and co-authors, which breaks a long prefill into bounded chunks interleaved with ongoing decode so the peak disruption per step is capped and per-token latency smooths out. </p><p>Chunked prefill is the strongest argument against disaggregation and an honest teardown has to credit it: by mixing a<strong> compute-bound prefill chunk</strong> with bandwidth-bound decode work in one step it even improves utilization, running the two against different ceilings. But it does not dissolve the coupling. </p><p>The phases still share one parallelism strategy, one memory pool, <strong>one tensor-parallel degree</strong>, all of them a compromise. And it trades latencies against each other: the finer you chunk to <strong>protect per-token latency</strong>, the more you stretch first-token latency, because a long prompt now dribbles through the GPU in pieces. </p><p>You are back in the original bind. On <strong>shared hardware</strong> you can favor first-token latency or per-token latency, but you cannot independently optimize both.</p><p>What changed in 2025 was not the physics but the stakes. DistServe, the authors recount, met real pushback in 2024 because disaggregation demands a <strong>heavy refactor of existing serving systems</strong>, and saw little adoption that year. </p><p>Then businesses began deploying language models at competitive scale, and throughput stopped being the only metric that mattered. <strong>Latency became existential</strong>, because a chatbot that stutters loses users, and an agent that stalls breaks workflows. </p><p>At the same time models grew and traffic surged, forcing systems past hundreds and into thousands of GPUs, the regime where a disaggregated architecture genuinely shines because <strong>it can allocate resources to each phase</strong> independently and pair each with its own parallelism strategy. The technique that was ahead of its time in 2024 was exactly on time in 2025.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The anatomy of the split</h2><p>Disaggregation assigns the phases to <strong>physically separate GPU pools</strong>. A request hits a prefill instance, which builds the key-value cache for the prompt and produces the first token; the cache is handed across to a decode instance, which loads it, folds the request into its large rolling batch, and generates the rest. </p><p>Prefill machines only prefill. Decode machines only decode. Three things become <strong>possible that colocation forbids</strong>, and they are the whole value proposition.</p><p>Interference disappears, because no prefill ever lands in the decode batch, so decode steps run uninterrupted and per-token latency stops spiking. <strong>Independent optimization becomes possible</strong>, because each pool can be tuned to its own roofline and scaled on its own axis, adding prefill capacity when prompts lengthen and decode capacity when outputs lengthen. </p><p>And <strong>phase-specific hardware</strong> becomes possible, the idea Splitwise pushed hardest, that since decode is bandwidth-bound and prefill compute-bound, the two should not run on identical chips at all, a thread that has since grown into an entire hardware category we will come to.</p><p>The crucial <strong>metric </strong>that makes all of this legible is <strong>goodput</strong>, and it is the metric most operators still fail to measure. Throughput is requests or tokens completed per second, full stop. </p><p><strong>Goodput is requests completed per second </strong>that meet their service-level objectives, both the first-token target and the per-token target. The distinction is the whole point, because a colocated system under load can post rising throughput while its goodput collapses, as interference pushes more and more requests past their latency targets even as tokens keep flowing [Figure 6]. </p><p><strong>Hao Zhang of UC San Diego</strong>, a DistServe author, frames it starkly in his lectures: a system can show ten requests per second of throughput while delivering three requests per second of goodput once the SLO is applied. The other seven finished late, which for an interactive product means they did not finish. </p><p>Disaggregation&#8217;s claim is a goodput claim. It does not necessarily move more tokens in the abstract; it moves more tokens that arrive on time, and the DistServe paper measured that as <strong>7.4 times more requests within SLO</strong>, or a 12.6 times tighter achievable latency target, against the colocated state of the art.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5i_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5i_O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!5i_O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!5i_O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!5i_O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5i_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 6&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 6" title="Figure 6" srcset="https://substackcdn.com/image/fetch/$s_!5i_O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!5i_O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!5i_O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!5i_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35b53939-6b20-4328-bce5-c51984c289d6_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 6. Throughput and goodput diverge under load. Raw tokens per second keep climbing while the count of requests that meet their latency targets falls away as interference mounts. Disaggregation&#8217;s win is the gap. Shape follows the DistServe goodput results; axes are illustrative.</figcaption></figure></div><p>The <strong>published uplifts</strong> that first announced the technique are worth stating with the asterisk each deserves [Figure 7]. </p><ul><li><p>DistServe reported 7.4 times more requests served within SLO against the colocated state of the art; </p></li><li><p>Splitwise, the parallel Microsoft Azure effort, 2.35 times the throughput at equal power and cost, or 1.4 times at 20 percent lower cost; </p></li><li><p>Mooncake, the platform behind Moonshot AI&#8217;s Kimi assistant, <strong>up to a 525 percent throughput gain</strong> in simulated overload and 75 percent more requests under real production traffic. </p></li></ul><p>The metrics differ, goodput in one, throughput at fixed power in another, raw request volume in a third, so they are not directly comparable, and each is a <strong>ceiling for a favorable workload</strong> rather than a constant anyone reproduces. </p><p>They are the numbers that turned a research idea into a procurement decision.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bA3m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bA3m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!bA3m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!bA3m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!bA3m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bA3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 7&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 7" title="Figure 7" srcset="https://substackcdn.com/image/fetch/$s_!bA3m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!bA3m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!bA3m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!bA3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc65e7bda-d66b-453b-9bb4-0aa66d4ec4ce_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 7. The headline multiples are real and each is a best case. The metrics are not commensurable across bars, and every figure is tied to a specific model, workload, and SLO. Read them as ceilings for favorable regimes, not a universal constant.</figcaption></figure></div><p>Modern orchestration adds one more lever on top of the split: cache-aware routing. <strong>NVIDIA Dynamo</strong>, the orchestration layer that sits above the inference engines, routes each request to the prefill worker whose resident cache best overlaps the incoming prompt, which NVIDIA reports can <strong>roughly halve first-token latency</strong> by avoiding redundant prefill of shared prefixes. </p><p>The router treats prefill and decode workers as first-class services, and a central planner continuously profiles the GPUs to autoscale and rebalance. This is the <strong>productized form of an idea DistServe </strong>seeded with a much simpler pull-based scheduler, which it used to keep decode workers from being flooded by spiky prefill bursts. </p><p>The <em>control plane</em> has become as much of the system as the data plane.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The seam, and the rack that dissolved it</h2><p>The instant you split the phases you create a seam, and across it <strong>you must carry the key-value cache</strong> from the prefill instance that built it to the decode instance that consumes it, for every request. The cache is not a control message. It is the full attention state of the prompt, and it can be gigabytes.</p><p>Its size is set by the attention architecture, and the spread is enormous [Figure 8]. <strong>Multi-head attention stores a key and value vector per head</strong>, per layer, per token; a Llama-2-class 70B model with 64 heads, head dimension 128, and 80 layers holds about 2.5 megabytes per token at FP16, so a 1,000-token prompt carries roughly 2.6 gigabytes of state. </p><p><strong>Grouped-query attention</strong>, the Llama 3 scheme, shares key and value projections across groups and cuts the stored heads from 64 to 8, dropping the cache to about 0.31 gigabytes per thousand tokens. </p><p><strong>Multi-head latent attention</strong>, DeepSeek&#8217;s design, compresses the per-token state into a single latent vector of dimension 576 stored once rather than per head, landing near 0.07 gigabytes per thousand tokens. </p><p>Across these three schemes the seam payload spans a factor of about 37, which is the <strong>unglamorous reason MLA models are structurally cheaper to disaggregate</strong> and the reason attention-architecture choices are now serving-cost choices.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X8Ol!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X8Ol!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!X8Ol!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!X8Ol!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!X8Ol!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X8Ol!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 4&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 4" title="Figure 4" srcset="https://substackcdn.com/image/fetch/$s_!X8Ol!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!X8Ol!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!X8Ol!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!X8Ol!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4469ab2e-86e4-4465-8d9b-9b1a8cb7288b_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 8. The seam payload is set by attention design. MHA ships a fraction of a gigabyte per token of context across the wire; MLA ships a small fraction of that. The bytes you must move are decided in the model architecture, not the serving stack.</figcaption></figure></div><p>Now the carry. Take the cache for a <strong>4,096-token prompt on a grouped-query 70B model</strong>, about 1.34 gigabytes, and move it across the interconnects an operator might have [Figure 9]. </p><p>On fifth-generation NVLink at 1.8 terabytes per second, 0.75 milliseconds. On <strong>InfiniBand NDR at 400 gigabits per second, 27 milliseconds.</strong> On 200-gigabit RoCE, 54. On commodity 100-gigabit Ethernet, 107. Across a 25-gigabit link between datacenters, 429. </p><p>The carry is a one-time handoff per request, so it adds to first-token latency rather than the per-token rate, and the right comparison is against the prefill it follows, <strong>roughly 290 to 600 milliseconds for that prompt</strong> on an H100. </p><p>Against that, NVLink and InfiniBand transfers are rounding error or close to it, <strong>Ethernet is a third of the prefill</strong> bolted onto every request, and cross-datacenter is fatal on its own. </p><p>The DistServe authors measured the intra-node case at under 0.1 percent of request latency over fast intra-node links, and every serious stack hides the transfer further with<strong> layer-wise streaming</strong>, shipping each layer&#8217;s cache the moment that layer finishes so its movement overlaps the computation of the next.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tQlD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tQlD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!tQlD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!tQlD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!tQlD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tQlD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 5&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 5" title="Figure 5" srcset="https://substackcdn.com/image/fetch/$s_!tQlD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!tQlD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!tQlD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!tQlD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f16fdc2-d23d-4f31-abba-c29402b0d224_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 9. The same 1.34 GB handoff across the interconnect hierarchy. Inside the rack it is noise; on InfiniBand it fits under the prefill; on commodity Ethernet it eats the budget; across datacenters it is fatal. The interconnect, not the GPU, decides whether disaggregation is viable.</figcaption></figure></div><p>This is where the <strong>current hardware generation changed the calculus</strong>, and it is the single most important development since the technique went mainstream. </p><p>The GB200 NVL72 and its successor the GB300 NVL72 connect 72 GPUs into <strong>one NVLink domain that behaves as a single massive GPU,</strong> with up to 130 terabytes per second of aggregate GPU-to-GPU bandwidth. </p><p>When prefill and decode pools live inside the same NVLink domain, the seam is no longer a network hop. It is a <strong>memory copy </strong>across a coherent fabric, sub-millisecond, effectively free. </p><p>The hard part of disaggregation, the part that made it a research problem for years, was moving the cache without blowing the latency budget, and the <strong>rack-scale NVLink domain </strong>makes that part vanish for deployments that fit inside a rack. This is a large reason disaggregation went from papers to production so fast: the hardware arrived to pay the seam&#8217;s bill. </p><p>The same fabric is why these systems can run the extremely wide expert parallelism we will see in the next section, which would be <strong>communication-bound on any slower interconnect</strong>.</p><p>The transfer machinery itself is now standardized infrastructure. NVIDIA&#8217;s NIXL, <strong>open-sourced at GTC 2025</strong>, unifies NVLink, InfiniBand, PCIe, and storage fabrics under one point-to-point abstraction and runs non-blocking so the GPU keeps computing while the cache moves. </p><p>Mooncake&#8217;s Transfer Engine, from the Kimi team, presents the same <strong>unified interface over TCP</strong>, RDMA, shared memory, and NVMe-over-fabrics. </p><p>LMCache, from the University of Chicago, accelerates the movement with <strong>batched transfers and I/O pipelining</strong> and decouples cache storage from the engine so the cache can persist, migrate, and be shared independently of execution; its authors report up to a tenfold reduction in first-token latency from KV reuse and offload. </p><p>DeepSeek built 3FS, a file system that pools thousands of SSDs and hundreds of storage nodes so any prefill can stash a cache that any decode can fetch in a locality-oblivious way. </p><p>And the cache, once it is a<strong> first-class managed object</strong>, can be retained and reused across requests, which is the quiet lever under the whole economy: of <strong>DeepSeek&#8217;s 608 billion daily input tokens</strong>, 342 billion, 56.3 percent, were served from cache rather than recomputed. </p><p>Prefix caching is for many workloads a larger cost lever than the prefill-decode split itself, and disaggregation is what makes the cache a managed resource in the first place.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!puFZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!puFZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!puFZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!puFZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!puFZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!puFZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 10&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 10" title="Figure 10" srcset="https://substackcdn.com/image/fetch/$s_!puFZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!puFZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!puFZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!puFZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21597614-d3ca-439e-b18a-3c8e504cb975_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 10. The economics DeepSeek disclosed, and the cache that drives them. Left, the daily GPU cost against the theoretical revenue if every token were billed at R1 rates, the source of the much-quoted 545 percent margin, which the company itself flags as theoretical and which is materially lower in reality. Right, the token composition: more than half of all input tokens were served from cache, not recomputed. This is the disaggregated, MLA-based, heavily-cached architecture that lit the fuse on the whole repricing.</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The kernel layer: expert parallelism and the all-to-all</h2><p>Here is the part most coverage skips, and the part that actually sets throughput on a <em>modern frontier model</em>. </p><p>Look under the hood of virtually any current frontier model, DeepSeek-V3, Kimi K2, Qwen3, Llama 4, and you find a <strong>sparse mixture-of-experts architecture</strong>: hundreds of expert sub-networks per layer, of which each token activates only a handful. </p><p>A 671-billion-parameter model like DeepSeek-V3 activates about 37 billion parameters per token. <strong>Sparsity is what makes these models cheap to run,</strong> but it imposes a specific and brutal communication pattern, and that pattern is where disaggregation, expert parallelism, and the interconnect all collide.</p><p>To serve a<strong> large MoE </strong>you distribute the experts across many GPUs, a scheme called expert parallelism, because no single GPU holds all of them. </p><p>But then every token has to travel to whichever GPUs hold its chosen experts and the results have to travel back, which means every layer performs<strong> two all-to-all communication operations per step</strong>, a dispatch that scatters tokens to their experts and a combine that gathers the results. </p><p>This is the dominant communication cost of MoE inference, and it has a vicious property: the messages are tiny. In <strong>DeepSeek-V3 </strong>each dispatch or combine message runs from about 7 kilobytes during inference to 256 kilobytes during training [Figure 11]. </p><p>General-purpose collective libraries like NCCL are tuned for the opposite regime, the large multi-megabyte all-reduce of dense training, where bandwidth dominates. <strong>At 7 kilobytes the per-message latency and synchronization overhead dominate</strong> instead, and NCCL leaves most of the wire idle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SwoG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SwoG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!SwoG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!SwoG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!SwoG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SwoG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 14&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 14" title="Figure 14" srcset="https://substackcdn.com/image/fetch/$s_!SwoG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!SwoG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!SwoG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!SwoG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab435cb-265c-4fa8-8ec7-fd4fe70cc402_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 11. Expert parallelism breaks the collective library. MoE dispatch and combine move tiny messages, where NCCL&#8217;s all-reduce kernels stall on latency and synchronization rather than saturating bandwidth. This mismatch is why DeepSeek wrote a dedicated communication library.</figcaption></figure></div><p><strong>That library is DeepEP</strong>, which DeepSeek open-sourced on the second day of its Open Source Week, and it is a small masterclass in why the kernel layer matters. </p><p>DeepEP provides custom all-to-all dispatch and combine kernels in two distinct flavors, and the split mirrors the prefill-decode split exactly. The <strong>high-throughput kernels serve prefill and training</strong>, maximizing raw bandwidth, but they emit dynamically shaped tensors that are incompatible with CUDA graphs. </p><p>The low-latency kernels serve decode, using direct RDMA to minimize latency and, critically, remaining CUDA-graph compatible so they avoid the <strong>kernel-launch overhead</strong> that dominates the decode phase, where each step is tiny and launch cost is a large fraction of the work. </p><p>The kernels need only about 20 streaming multiprocessors to saturate both the <strong>intra-node NVLink domain</strong> and the inter-node RDMA network simultaneously, freeing the rest of the GPU for computation. </p><p>They achieve this <strong>through NVSHMEM and IBGDA</strong>, which let the GPU issue RDMA operations directly to the network card without a round-trip through the CPU, and through asymmetric-domain forwarding that bridges the fast NVLink domain and the slower RDMA domain in one kernel. </p><p>The high-throughput path uses 24 queue pairs; the <strong>low-latency path uses 8 to 16</strong>, matched to the local expert count. A hook-based design overlaps the communication with computation without occupying compute units at all. </p><p>The newest DeepEP revisions add TMA-based transfers for minimal SM usage, support for the <strong>larger multi-node NVLink domains</strong> of the rack-scale systems, and a zero-SM remote-memory primitive for fetching KV cache directly from a peer.</p><p>This level of specialization is not optional at scale, and NVIDIA&#8217;s response confirms it: <strong>NVIDIA built HybridEP</strong>, its own token-based dispatch backend using the same hardware primitives, and co-developed a set of <strong>Blackwell kernels</strong> with the SGLang and vLLM projects through the FlashInfer library, covering attention prefill and decode, the communication path, the grouped matrix multiplications, the multi-node NVLink transfers, and MLA specifically. </p><p><strong>The all-to-all is the bottleneck</strong>, and the entire industry is now optimizing the same dozen kernels.</p><p>The payoff of getting this right is expert parallelism that goes very wide, and width is throughput [Figure 12]. </p><p>Spreading the experts of DeepSeek-R1 across 32 ways instead of 8 on a GB200 NVL72 lifts per-GPU output throughput by about 1.8 times, <strong>NVIDIA&#8217;s TensorRT-LLM measurements show</strong>, because a wider spread means each GPU holds fewer experts and therefore loads less weight per step, and because it fills the grouped matrix multiplications more completely. </p><p>Wide expert parallelism is only viable because the <strong>130-terabyte-per-second NVLink domain absorbs the all-to-all traffic</strong> that wider spreading generates; on a slower fabric the communication would swamp the gain. And the two phases run deliberately different widths. </p><p>DeepSeek&#8217;s disclosed production configuration runs prefill at expert-<strong>parallel degree 32 and decode at degree 144</strong>, a decode pool nearly five times wider than the prefill pool, because decode is where the wide spread pays off in throughput and where the batch is large enough to keep all those experts busy. </p><p>The DistServe authors, surveying the same system, note <strong>decode configurations reaching toward 256-way expert parallelism</strong>, and newer stacks push wider still. </p><p>The prefill-decode asymmetry that began as a latency argument has become a parallelism argument: the phases want not just different hardware but <strong>different distributed-systems topologies</strong> entirely.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Dxx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Dxx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!4Dxx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!4Dxx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!4Dxx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Dxx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 16&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 16" title="Figure 16" srcset="https://substackcdn.com/image/fetch/$s_!4Dxx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!4Dxx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!4Dxx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!4Dxx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68c853f7-9b06-485e-bdbe-02348dbc7188_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 12. Decode wants the widest expert parallelism the fabric will allow. Spreading experts to EP32 instead of EP8 lifts per-GPU decode throughput by about 1.8 times by shrinking the per-GPU weight load and filling the grouped matrix multiplications. The two phases run deliberately different degrees.</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The attention rewrite is shrinking the problem</h2><p>While the serving stack was learning to split and spread, the <strong>model architects were attacking the problem from underneath</strong>, and the attack lands squarely on the two costs this issue is about: the bytes at the seam and the compute in prefill.</p><p>Multi-head latent attention was the first cut, and we have already seen its effect on the seam, a roughly <strong>thirty-seven-fold reduction</strong> in cache bytes versus dense multi-head attention. </p><p>But MLA leaves the other cost untouched: prefill attention still scales quadratically with sequence length, because every token still attends to every prior token, and as <strong>context windows</strong> stretch toward a million tokens that quadratic term dominates the prefill bill. </p><p>This is the cost that DeepSeek attacked in V3.2 with DeepSeek Sparse Attention, and the mechanism is elegant [Figure 13]. A <strong>lightweight neural network DeepSeek calls the Lightning Indexer</strong> scores the relevance of past key blocks to the current query and selects only the top few thousand most relevant, and the expensive attention computation then runs only over that selected set. </p><p>The pattern is retrieve-then-attend, and it bends the cost curve from quadratic in sequence length toward roughly linear past the selection cutoff, while DeepSeek reports <strong>model quality virtually unchanged. </strong></p><p>At a million tokens of context the difference is on the order of a few hundredfold less attention work in prefill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xCLo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xCLo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!xCLo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!xCLo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!xCLo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xCLo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 18&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 18" title="Figure 18" srcset="https://substackcdn.com/image/fetch/$s_!xCLo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!xCLo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!xCLo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!xCLo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1b012a-64e9-4114-9d13-218c7ff7a37a_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 13. Sparse attention attacks the prefill cost itself. MLA cut the KV bytes crossing the seam; DeepSeek Sparse Attention then cut the prefill compute, selecting a fixed set of relevant key blocks before attending and bending quadratic attention toward linear at long context. Illustrative scaling for a fixed selection budget.</figcaption></figure></div><p>This matters for disaggregation in a way that compounds. Sparse attention shrinks both the prefill compute and, in its variants, the cache that must be carried, which <strong>shifts the prefill-decode balance again</strong> and makes long-context disaggregation economically viable at lengths that would have been hopeless under dense attention. </p><p>It is also the live frontier as of this writing. DeepSeek-V3.2 shipped in late 2025 as a <strong>671-billion-parameter MLA-plus-MoE model with DSA layered on top</strong>, reaching reasoning quality the company benchmarks against GPT-5, and its Speciale variant took gold-medal scores at the 2025 International Mathematical Olympiad and the ICPC World Finals. </p><p><strong>DeepSeek-V4</strong>, released in April 2026, extends the context window to a million tokens and replaces DSA with a successor called Compressed Sparse Attention, with its Pro variant reported at<strong> 80.6 percent on SWE-bench. </strong></p><p>The trajectory is unmistakable: the attention mechanism is being rebuilt around the economics of <strong>long-context inference</strong>, and each rebuild changes the numbers in the serving stack beneath it. Architecture and serving are no longer separable disciplines.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The benchmark reality, and where it breaks</h2><p>For two years the inference market argued over performance with vendor slides, which is no way to allocate billions in capital. </p><p>That changed in late 2025 when SemiAnalysis launched InferenceMAX, the <strong>first independent open-source benchmark</strong> to measure not raw throughput but total cost of compute across real models and real interactivity targets, running DeepSeek R1, GPT-OSS, Llama 3, and Qwen across the GB200 NVL72, B200, H200, H100, and AMD&#8217;s MI300X, MI325X, and MI355X, with Google TPU and AWS Trainium backends following. </p><p>It is the<strong> closest thing the field has to a neutral scoreboard</strong>, and the picture it paints is one a chip-level analysis would miss entirely [Figure 13].</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n0Rh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n0Rh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!n0Rh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!n0Rh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!n0Rh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n0Rh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 13&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 13" title="Figure 13" srcset="https://substackcdn.com/image/fetch/$s_!n0Rh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!n0Rh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!n0Rh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!n0Rh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20458f4f-3dc8-4649-9bf4-113297b5a519_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 13. Per-GPU throughput on DeepSeek R1 at a fixed 25 tokens-per-second-per-user interactivity, normalized to H200. The GB200 NVL72&#8217;s roughly tenfold lead over the H200, and threefold over the B200, comes from the rack-scale NVLink domain, not from a faster individual chip. Values from SemiAnalysis InferenceMAX; the advantage is interactivity-dependent.</figcaption></figure></div><p>At a fixed interactivity of 25 tokens per second per user on DeepSeek R1, the GB200 NVL72 delivers roughly ten times the per-GPU throughput of an H200 and <strong>about three times that of a standalone B200</strong>, even though the B200 is a faster chip in isolation. </p><p>The <strong>advantage is the 72-GPU NVLink domain</strong>, which lets the rack run wider parallelism and larger coherent batches than any single eight-GPU node can. </p><p>On absolute terms the B200 reaches 60,000 tokens per second per GPU at 1,000 tokens per second per user on GPT-OSS, and software optimization alone drove its cost on that model to <strong>two cents per million tokens,</strong> a fivefold reduction in two months. </p><p>NVIDIA frames the rack-level economics as a five-million-dollar GB200 NVL72 generating <strong>75 million dollars in token revenue</strong>, a fifteen-fold return, though that figure prices output at favorable rates and should be read as a vendor&#8217;s best case rather than a realized margin. </p><p>The energy picture is cleaner and third-party: on DeepSeek R1 the GB200 NVL72 delivers roughly eight times the tokens per provisioned megawatt of a single-node H200, and <strong>Blackwell runs about 20 percent more energy-efficient than AMD&#8217;s CDNA4</strong> on <strong>GPT-OSS</strong>, partly because the MI355X draws 1.4 kilowatts per GPU against the B200&#8217;s 1 kilowatt.</p><p>Now the part the headline numbers omit, and the part this publication exists to surface. The rack-scale advantage is not a constant. It is a function of interactivity, and it expires [Figure 14]. </p><p>At 60 tokens per second per user the GB200 NVL72 produces a little less than triple a B200&#8217;s per-GPU throughput, but as the interactivity target rises the batch that the rack can assemble shrinks, and<strong> by around 130 tokens per second per user</strong> the workload fits inside a single eight-GPU node&#8217;s NVLink domain, at which point the NVL72&#8217;s scale-out advantage disappears entirely and it becomes more expensive per token than a standalone node. </p><p>The whole case for the rack rests on serving many users at moderate interactivity, the <strong>chatbot and agent regime</strong>; push to extreme single-user speed and the economics invert. </p><p>The benchmark also exposes a software truth that no spec sheet shows: <strong>AMD&#8217;s MI355X</strong> is competitive with the B200 on FP8 disaggregated prefill, but its disaggregated performance actually degrades at higher interactivity because <strong>the ROCm stack lacks the kernel and collective optimizations needed</strong> to compose multiple state-of-the-art techniques together. </p><p>Disaggregation is not a hardware capability you buy; it is a software capability you accumulate, and the gap between vendors is measured in kernels.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9XYZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9XYZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!9XYZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!9XYZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!9XYZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9XYZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 17&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 17" title="Figure 17" srcset="https://substackcdn.com/image/fetch/$s_!9XYZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!9XYZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!9XYZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!9XYZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac224577-1715-4906-a307-d1a5974f1d0c_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 14. The rack-scale win has an expiry date. At moderate interactivity the NVL72 roughly triples a single node per GPU; push interactivity high enough that the batch shrinks into one eight-GPU node, and the advantage evaporates and inverts on cost. Shape after SemiAnalysis InferenceX v2.</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The dial you must keep turning</h2><p>Disaggregation hands you an operational problem that the headline numbers never mention, and every team that has run it in production knows it immediately. </p><p><strong>Once the fleet is split into a prefill pool and a decode pool</strong>, you have to choose the ratio between them, and you will get it wrong, because the right answer keeps moving [Figure 15].</p><p>The problem is a producer-consumer imbalance: prefill instances produce cache that <strong>decode instances consume</strong>, and the production rate rarely matches the consumption rate. Provision too few prefill instances and prompts queue while first-token latency slips and the decode pool sits half-idle for want of work. </p><p>Provision too few decode instances and the prefill pool races ahead while <strong>per-token latency slips </strong>and the prefill pool sits half-idle. Either error strands capital on GPUs that cannot do useful work because the other pool is the bottleneck. </p><p>DeepSeek&#8217;s disclosed answer was a fixed three-to-nine ratio, three prefill nodes feeding nine decode nodes, and the SGLang team reproduced a similar split on 96 H100s,<strong> twenty-four GPUs for prefill and seventy-two for decode, reaching 52,300 input tokens and 22,300 output tokens per second per node</strong>, the first open implementation to match DeepSeek&#8217;s own reported numbers, at a cost they put at twenty cents per million output tokens, about one-fifth the official API price.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8n0Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8n0Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!8n0Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!8n0Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!8n0Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8n0Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 8&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 8" title="Figure 8" srcset="https://substackcdn.com/image/fetch/$s_!8n0Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!8n0Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!8n0Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!8n0Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa96d9635-1cf2-43b5-93fc-8791ad9e0990_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 15. Disaggregation hands you a ratio you must keep correct. Too few prefill instances and first-token latency slips; too few decode instances and per-token latency slips. The optimum sits in a narrow band and drifts with every shift in prompt and output length. Schematic of the producer-consumer balance.</figcaption></figure></div><p>What makes this hard rather than a one-time sizing exercise is that the optimal ratio is not constant. It <strong>depends on the shape of the traffic</strong>, the ratio of input length to output length, and that shape shifts by the hour and by the product surface. </p><p>A wave of document-summarization requests is prefill-heavy and wants more prefill capacity; a <strong>wave of long-form generation</strong> is decode-heavy and wants more decode; a split that is optimal at noon is wrong by midnight. </p><p>This is why the serious systems have moved to dynamic rebalancing, monitoring load in real time and shifting the ratio, and <strong>why a system like TaiChi goes further</strong> and switches whole instances between disaggregated and colocated modes depending on which yields better goodput at the current load. </p><p>The existence of that last capability is the tell: colocation is not always wrong, and a<strong> system smart enough</strong> to know when to disaggregate is smart enough to know when to stop. </p><p>Disaggregation converts a <strong>hardware-utilization problem</strong> into a scheduling-and-capacity problem, which is usually a good trade because software is cheaper to change than silicon, but <strong>it is a trade and not a free win</strong>, and a team that splits without building the rebalancing machinery will frequently lose to a well-tuned colocated deployment with chunked prefill.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The split spawned silicon</h2><p>The most striking evidence that disaggregation has become foundational is not in any serving framework. </p><p><strong>It is in the silicon roadmap</strong>, because once the phases run on separate machines, the machines stop needing to be the same machine, and the hardware vendors have noticed [Figure 16].</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hLgW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hLgW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!hLgW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!hLgW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!hLgW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hLgW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fae74696-d771-4049-b014-6f00837861b6_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 15&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 15" title="Figure 15" srcset="https://substackcdn.com/image/fetch/$s_!hLgW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!hLgW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!hLgW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!hLgW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffae74696-d771-4049-b014-6f00837861b6_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 16. The split spawned silicon. Plotting accelerators by compute against memory bandwidth, vendors are now building to the corners: FLOPS-rich, cheap-memory parts for prefill, and bandwidth-rich parts for decode. Compute is a low-precision proxy across mixed formats; the positioning, not exact parity, is the point.</figcaption></figure></div><p>NVIDIA&#8217;s clearest statement is the <strong>Rubin CPX</strong>, announced in September 2025 and shipping at the end of 2026, a GPU built exclusively for the prefill and context phase. </p><p>Its logic is the wrong-sizing problem stated as a product: prefill is compute-bound and barely touches memory bandwidth, so dedicating <strong>expensive high-bandwidth HBM</strong> to it wastes the most expensive component on the chip. </p><p>The CPX therefore pairs 30 petaFLOPS of NVFP4 compute with <strong>128 gigabytes of GDDR7</strong>, a memory that SemiAnalysis estimates is roughly five times more cost-effective per byte than HBM and runs at perhaps a quarter of HBM&#8217;s bandwidth, which is fine because prefill does not need the bandwidth. </p><p>It adds dedicated attention hardware delivering about three times the <strong>attention throughput of a GB300 NVL72</strong>, aimed directly at million-token context, and it ships with PCIe but no NVLink, because it is built for disaggregated inference racks rather than tightly coupled training clusters. </p><p>The packaging makes the intent explicit: the <strong>Vera Rubin NVL144 CPX rack pairs 144 CPX prefill GPUs with 144 standard Rubin decode GPUs and 36 CPUs,</strong> prefill and decode silicon racked side by side, the disaggregation thesis cast in metal.</p><p>The decode side is bifurcating too, and along a more radical axis. In December 2025 NVIDIA signed a<strong> roughly 20-billion-dollar licensing arrangement with Groq</strong>, whose language-processing units abandon HBM entirely for on-chip SRAM, 500 megabytes per chip at 150 terabytes per second, an order of magnitude past any HBM part. </p><p>For autoregressive decode at long context, where the entire bottleneck is reading state out of memory, <strong>SRAM&#8217;s bandwidth is decisive</strong>: a 70-billion-parameter decode at 128,000 tokens of context runs dramatically faster in memory-access time on an SRAM part than on an HBM GPU. </p><p>The emerging architectural division has GPUs handling training and prefill while <strong>specialized low-latency parts handle decode</strong>, which is prefill-decode disaggregation pushed all the way down to the level of distinct chip families. </p><p>And the trend is not NVIDIA&#8217;s alone. The DistServe authors report that Huawei, Enflame, MetaX, and Biren are <strong>all prototyping or deploying decode-specialized or attention-optimized accelerators</strong> built on exactly this philosophy. </p><p>A systems technique conceived to tame latency on homogeneous GPUs is now redrawing the boundaries of the accelerator market itself.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>When it still doesn&#8217;t pay</h2><p>Disaggregation is the substrate now, but it is not a universal good, and the honest boundaries matter as much as the wins [Figure 17]. </p><p>SemiAnalysis, <strong>evaluating the Rubin CPX&#8217;s full hardware-level disaggregation</strong>, put the caveat precisely: complete disaggregation delivers excellent results only under certain ratios of input to output length and for long decode lengths, with other scenarios seeing underwhelming benefits. </p><p>The structure of the advantage explains the boundary. <strong>Disaggregation&#8217;s benefit grows with output length</strong>, because longer outputs mean more decode steps to protect from interference, and with offered load, because heavier load means more interference to remove. </p><p>In the opposite corner, short outputs under light traffic, there is <strong>little interference to eliminate</strong> and too little decoding for the protection to accrue, and the seam and the ratio overhead are pure cost. A well-tuned colocated deployment with chunked prefill wins there.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tLwj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tLwj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!tLwj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!tLwj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!tLwj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tLwj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Figure 9&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Figure 9" title="Figure 9" srcset="https://substackcdn.com/image/fetch/$s_!tLwj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 424w, https://substackcdn.com/image/fetch/$s_!tLwj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 848w, https://substackcdn.com/image/fetch/$s_!tLwj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 1272w, https://substackcdn.com/image/fetch/$s_!tLwj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b02adfd-3132-468b-9dfe-c9073e3bec3b_1634x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 17. The decision is a regime. Disaggregation pays when outputs are long and load is heavy, and goes underwater for short replies under light load. The map is an illustrative model encoding the consistent direction of the evidence, not a measured surface. Characterize your own traffic before committing.</figcaption></figure></div><p>Three caveats compound this. The wrong-sizing problem never fully disappears even with disaggregation, because a <strong>pure prefill instance on an HBM part still underutilizes its memory bandwidth</strong>, which is the entire reason the Rubin CPX exists. </p><p>The interactivity cliff from the benchmark section means that even where disaggregation and <strong>rack-scale hardware win</strong> at moderate interactivity, the advantage inverts at extreme single-user speed, when the batch collapses into a single node. </p><p>And the software-maturity tax, visible in AMD&#8217;s degraded high-interactivity disaggregation, means the gains are not portable across stacks; they <strong>have to be earned kernel by kernel. </strong>The strategic read is not disaggregate or do not disaggregate. </p><p>It is characterize your traffic on the two axes that matter, <strong>real output-length distribution</strong> and real peak-to-trough load, then build for your regime, and buy the interconnect before you buy the split, because on a slow fabric the seam eats the gain and on a fast one it disappears.</p><div><hr></div><h2>The shake, settled</h2><p><strong>Return to the 600 billion dollars</strong>. The market&#8217;s first instinct, that cheaper inference means less demand for the chips that serve it, has been falsified about as cleanly as a macro thesis ever is. </p><p>The <strong>cost collapse was real</strong>, from thousands of dollars per benchmark task to about eleven, and demand did not fall; it ran so far past the efficiency gains that the Peterson Institute concluded <strong>usage had dwarfed them</strong>, the Jevons paradox playing out in real time. </p><p>The technique that frightened the market, efficient inference built on disaggregation and sparsity and compressed attention, <strong>did not shrink the industry</strong>. It enlarged it, by making applications viable that were uneconomical at the old prices.</p><p>But there is a second-order effect the bullish reading often misses, and it is where the real consequence sits. <strong>DeepSeek did not just demonstrate cheap inference</strong>; it open-sourced the means of production. DeepEP, 3FS, the full reference architecture, all released to anyone. </p><p><strong>NVIDIA open-sourced Dynamo and NIXL</strong>. Mooncake, llm-d, LMCache, SGLang, and vLLM are all open. The result is that the disaggregated serving stack, the thing that lets you run a frontier model at a fraction of the naive cost, is no longer a moat. </p><p>It is a commodity any competent team can deploy, which is exactly why the <strong>SGLang reproduction could serve DeepSeek at one-fifth the official API price</strong>. The value did not disappear; it moved. </p><p>SemiAnalysis frames the shift as a move from raw FLOPS per chip to total intelligence per dollar at rack scale, and the InferenceMAX results bear it out: <strong>the GB200 NVL72 wins not because its chips are faster but because 72 of them act as one</strong>, and the orchestration software across them is as much of the product as the silicon. </p><p>The moat migrated from the model and the kernel, which are now shared, to the rack-scale system integration and the interconnect, which are hard to replicate and hard to buy.</p><p>The frontier from here is the generalization of the same idea to the next seam. The DistServe authors point to <strong>attention-FFN disaggregation as the natural successor</strong>: within decode, attention is memory-bound and hungry for KV-cache bandwidth while the feed-forward layers are compute-bound and hungry for <strong>weight storage,</strong> so splitting them onto tailored hardware lets each reach high utilization independently, and the same logic that justified the prefill-decode split applies one level down. </p><p>For dense models this was long considered impractical because it doubles the activation transfer per layer, but the <strong>MoE models that now dominate already perform two all-to-all operations per decode step</strong>, so the attention-FFN split can be folded into the communication pattern that already exists, making its extra transfer nearly free. </p><p><strong>MegaScale-Infer and StepFun&#8217;s Step-3 have already demonstrated it</strong> on large MoE models. The pattern is always the same: find a boundary in the computation where the two sides want different hardware or different parallelism, split there, and pay a transfer cost at the new seam in exchange for independent optimization on each side. </p><p>The question every such split raises is the question this entire issue has circled. <em>Is the thing you carry across the new seam small enough, and the wire fast enough, that the split pays?</em></p><p>DeepSeek published a margin and <strong>the market saw a number. </strong>The number was a consequence. </p><p>The cause was an architecture that took two workloads with opposite appetites and stopped forcing them to share a plate, and within eighteen months that<strong> architecture became the floor that everything else is built on</strong>, dragged the hardware roadmap behind it, and survived a 600-billion-dollar referendum on whether efficiency was a threat or an accelerant. The split won. </p><p>What remains, and what <strong>will keep deciding the economics as the seams multiply and the models keep rewriting themselves underneath</strong>, is the same thing it always was: how honestly the system respects the shape of the work, and how fast the wire is at the seam.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[We wrote the CUDA reference we could not find]]></title><description><![CDATA[The handbook we wanted on our own desks. GPU performance from first principles, current to Blackwell and CUDA 13.x.]]></description><link>https://www.thesoftwarefrontier.com/p/we-wrote-the-cuda-reference-we-could</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/we-wrote-the-cuda-reference-we-could</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Sat, 20 Jun 2026 08:35:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SAY7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54550d86-2756-4131-8818-956604f6749d_608x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We have both <strong>lost more hours than we want </strong>to admit to questions that should have a clean answer. Here is one.</p><p>On Hopper, a WGMMA sources its operands from shared memory and registers. On Blackwell, the new UMMA instruction can read its A operand straight from tensor memory, a level of the hierarchy that did not exist a generation ago. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Software Frontier is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>That single change reshapes how you build a pipeline. When we went looking for it written down in one place, it was not there. It was scattered across a PTX spec, a CUTLASS example, and a couple of microbenchmark threads.</p><p>That was the pattern everywhere. Occupancy rules in one tuning guide. Descriptor encodings in another. The genealogy of the tensor cores living in our heads after weeks of trial runs. Nothing sat in one place we could read front to back.</p><p><strong>So we wrote that place.</strong></p><p>We are not technical writers who picked up CUDA for a book. We write low-level GPU and systems code for a living, and we got tired of not having this on our own desks.</p><p><strong>CUDA Mastery 2026</strong> is a deep technical handbook for engineers who want to understand and optimize CUDA on modern NVIDIA GPUs, from the fundamentals through Hopper, Blackwell, and Blackwell Ultra. It is current to CUDA 13.x and the fifth generation of tensor cores.</p><p>It is<strong> not a syntax tutorial.</strong> Most CUDA resources teach you syntax, a few explain how the hardware actually works, and almost none teach you to reason about performance before you write a line. This is the one that does.</p><p>Here is what it covers, as one integrated reference instead of forty open browser tabs: SM internals, warp scheduling, scoreboarding, occupancy, and latency hiding. The full memory hierarchy, coalescing, shared memory, TMA, and Tensor Memory. </p><p>The tensor core path from WMMA to WGMMA to UMMA. Roofline modeling, bottleneck analysis, and Nsight profiling. CUTLASS, CuTe, CUDA Tile, PTX, SASS, and JIT. Multi-GPU with NCCL, NVLink, NVSwitch, and NVSHMEM. And real kernel walkthroughs: SGEMM, Flash Attention, reductions, scan, sort, and sparse ops.</p><p>Two rules we held ourselves to. Every specification is footnoted to a primary source, whether an NVIDIA whitepaper, the PTX ISA, a tuning guide, or published microbenchmarks, with nothing paraphrased from a blog you cannot trace. </p><p>And <strong>specification stays separate from measurement</strong>, so you always know whether a claim comes from a document or from a number someone ran.</p><p>Think about what one wrong optimization actually costs: a day chasing a bottleneck that was never there, or a kernel rewritten three times because an operand sat in the wrong memory. This reference shortens that loop. The next time you open Nsight and see a stall, you will know which part of the machine is talking to you.</p><p>It is <strong>written for engineers who already ship CUDA.</strong> If you have never launched a kernel, start somewhere gentler and come back when you want to go deep.</p><p><strong>The book is &#8364;89</strong>, a single payment, or 10 installments, and less than the going hourly rate for someone who already knows this. Every future v1.x update and correction is included free.</p><p><strong>We built this because we wanted it on our own desks</strong>. It is on yours now if you want it. </p><p><a href="https://lorenzobrada.gumroad.com/l/cuda_mastery">Get CUDA Mastery 2026</a></p><h4>Thank you in advance for your extremely precious support. </h4><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Software Frontier is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Kill Switch Was in the Mail ]]></title><description><![CDATA[How a single Friday letter switched off the world's most capable AI model, turned Anthropic's safety moat into its munition, and marked the second federal strike on the]]></description><link>https://www.thesoftwarefrontier.com/p/the-kill-switch-was-in-the-mail</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/the-kill-switch-was-in-the-mail</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Fri, 19 Jun 2026 13:30:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NMlq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NMlq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NMlq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!NMlq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!NMlq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!NMlq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NMlq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png" width="1254" height="1254" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1254,&quot;width&quot;:1254,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2459135,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/198379004?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NMlq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!NMlq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!NMlq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!NMlq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5307dade-240f-4620-a799-3a8ff09e1f63_1254x1254.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction</h2><p>At <strong>5:21pm Eastern on Friday, June 12</strong>, Anthropic received a letter. By midnight, the company had switched off the two most capable models it had ever released, for every customer on earth.</p><p>The letter came from the Department of Commerce. It invoked national security authorities and ordered Anthropic to <strong>suspend all access to Claude Fable 5 and Claude Mythos 5</strong> by any foreign national, anywhere, including the company&#8217;s own non-citizen employees. </p><p><strong>Anthropic&#8217;s </strong>own statement, published that night, explained the mechanics of compliance plainly: because there is no clean way to fence a live API endpoint by passport in real time, the only way to obey the order was to take both models down for everyone. <strong>Access to Opus 4.8, Sonnet, and Haiku was untouched.</strong> Fable 5 had shipped three days earlier. Its IPO-grade launch week ended with a kill order.</p><p>There are essentially<strong> two ways to read what happened</strong>, and the honest position is to hold both at once.</p><p>The first reading is narrow and technical. The trigger, by Anthropic&#8217;s account, was a single bypass technique that amounts to pointing the model at a codebase and asking it to <strong>fix the security flaws</strong>. </p><p>The company says the capability is widely available, including from <strong>OpenAI&#8217;s GPT-5.5</strong>, and is used every day by the defenders who keep systems running. On this reading, the suspension is an overzealous first use of a blunt instrument, a misunderstanding that both sides want resolved, and a story that will be over in days to weeks.</p><p>The second reading is structural and does not go away when the models come back. For the first time, the <strong>United States has reached for export-control machinery</strong>, designed for physical dual-use technology, and used it to pull a commercial AI model out of the hands of hundreds of millions of people with a Friday-afternoon letter. </p><p>The kill switch was never in the model. It was not in the classifiers, the <strong>thousand hours of red-teaming</strong>, or the thirty-day data retention. It was in the mail. And once a mechanism like that has been used once, it exists for every lab, every Friday, from now on.</p><p>This piece is about both readings, and about a third fact that reframes the whole episode: this is not the first time in <strong>2026 that the US government has moved against Anthropic specifically</strong>. It is the second, from a different department, under a different legal theory, in the space of three months. The pattern is the story.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B65X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B65X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 424w, https://substackcdn.com/image/fetch/$s_!B65X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 848w, https://substackcdn.com/image/fetch/$s_!B65X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 1272w, https://substackcdn.com/image/fetch/$s_!B65X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B65X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png" width="1456" height="715" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:715,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Seventy-two hours from launch to global shutdown.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Seventy-two hours from launch to global shutdown." title="Seventy-two hours from launch to global shutdown." srcset="https://substackcdn.com/image/fetch/$s_!B65X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 424w, https://substackcdn.com/image/fetch/$s_!B65X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 848w, https://substackcdn.com/image/fetch/$s_!B65X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 1272w, https://substackcdn.com/image/fetch/$s_!B65X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F650468c3-b9e2-4f8c-9358-c329b0c14600_1650x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 1</span> Seventy-two hours from launch to global shutdown.</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What got pulled</h2><p>To understand the stakes, you<strong> have to understand what was switched off</strong>, because it was not an ordinary model.</p><p>On June 9, Anthropic launched Claude Fable 5 and Claude Mythos 5 together. In the company&#8217;s framing,<strong> both belong to a new tier it calls Mythos-class</strong>, sitting above the Opus class in raw capability. </p><p>The first member of that tier, <strong>Claude Mythos Preview</strong>, had been released quietly in April through a government-linked program called Project Glasswing, and never offered to the public. </p><p>Fable 5 was the moment that tier went mainstream. In <strong>Anthropic&#8217;s own words</strong>, its capabilities exceed those of any model the company had ever made generally available, with the lead over Opus 4.8 widening as tasks grow longer and more agentic.</p><p>Fable 5 and Mythos 5 share the same underlying weights. The difference is entirely in the safeguards, which is also why they carry different names. <strong>Fable</strong>, from the Latin <em>fabula</em>, is the version <strong>made safe for general release.</strong> <strong>Mythos </strong>is the same model with safeguards lifted in specific domains, reserved for <strong>vetted cyberdefenders</strong> and critical-infrastructure operators inside Glasswing. Anthropic describes Mythos 5 as having the strongest cybersecurity capabilities of any model in the world.</p><p>The headline numbers were not subtle, and software engineering was the spine of the launch. On Anthropic&#8217;s published evaluations, <strong>Fable 5 posted 80.3 percent on SWE-bench Pro against 69.2 for Opus 4.8 and 58.6 for OpenAI&#8217;s GPT-5.5</strong>, and scored highest among frontier models on Cognition&#8217;s harder FrontierCode set, even at medium effort. </p><blockquote><p><em>The widely quoted 95 percent on SWE-bench Verified is real but should be read with care, because that benchmark is saturating; the gap that means something is the roughly eleven points on the harder Pro variant.</em></p></blockquote><p>Stripe, in early testing, used the model to perform a codebase-wide migration of a<strong> 50-million-line Ruby codebase in a single day</strong>, work it estimated would have taken a team over two months by hand. </p><p>The capability that matters most for the rest of this story is the one the public model hides, and it is worth being precise about what it is. </p><p>Anthropic&#8217;s cybersecurity evaluations measure offensive progress directly: the Firefox benchmark scores the fraction of trials that reach arbitrary code execution,<strong> OSS-Fuzz is a severity-weighted score </strong>that runs from a basic crash up to a full control-flow hijack, and CyberGym, a Berkeley suite of <strong>more than 1,500 real-world tasks</strong> built on Google&#8217;s fuzzing corpus, scores whether the model can reproduce a genuine vulnerability and prove it with a crashing input. </p><p>On the OSS-Fuzz measure, an independent reading of the Mythos 5 system card by<strong> Epoch AI</strong> put the unsafeguarded model&#8217;s crash rate at 80 percent against Opus 4.8&#8217;s 61.5. </p><p>The detail that matters most is that Anthropic says it did not train these abilities in; they <strong>emerged as a byproduct of general gains</strong> in code understanding and autonomy, which is the technical reason they cannot be cleanly excised. </p><p>Fable&#8217;s classifiers are tuned to block any progress on exactly these tasks. <strong>Pricing landed at ten dollars per million input tokens</strong> and fifty per million output, double Opus 4.8, and by Anthropic&#8217;s own description less than half what the retired Mythos Preview had cost. The <strong>context window is one million tokens</strong>, with up to 128k output.</p><p>For practitioners, the integration surface is where the safety architecture becomes concrete, and it is a fallback rather than a wall. By Anthropic&#8217;s account, when Fable&#8217;s classifiers flag a request touching one of three domains, the <strong>response is not refused</strong> but quietly handled by Claude Opus 4.8 instead, and the user is told it happened. </p><p>The <strong>model ID is </strong><code>claude-fable-5</code>, a drop-in string swap; developer documentation indicates the <strong>fallback surfaces in the API response</strong> with a refusal stop reason and the triggering category named, so a client can route or retry, though Anthropic&#8217;s own materials describe the behavior rather than the field names. </p><p>The<strong> three covered domains are </strong>the load-bearing detail:<strong> offensive cybersecurity, biology and chemistry, and distillation</strong>, the last being organized attempts to extract Claude&#8217;s capabilities to train competing models, which Anthropic says it has already detected at scale originating from authoritarian states. </p><p>Those classifiers route <strong>fewer than five percent of sessions</strong> away from the frontier model; for the other ninety-five, Anthropic says Fable performs effectively identically to the unsafeguarded Mythos 5. </p><p>Both Mythos-class models are <strong>designated Covered Models</strong>, carrying a mandatory thirty-day data retention even for enterprise customers who previously held zero-retention agreements. None of this is cosmetic. </p><p>Under<strong> Anthropic&#8217;s Responsible Scaling Policy</strong>, a model with this much cyber and biological capability is handled at <em><strong>AI Safety Level 3</strong></em>, the tier whose rules require hardened deployment and security controls, and the classifiers, the fallback, and the retention are the concrete form those requirements take.</p><p>That <strong>retention policy</strong> is part of what Anthropic points to as evidence of seriousness, and its definitions matter for everything that follows. <strong>A universal jailbreak</strong>, in Anthropic&#8217;s own terms, is any prompt, script, or harness that lets a user interact with the model as if its safeguards were not present; a non-universal one elicits some capability only in narrow circumstances, or needs reworking for each new case. </p><p>Anthropic says an external bug bounty ran more than a thousand hours without producing a universal jailbreak, that Fable <strong>complied with zero harmful single-turn cyber requests</strong> even when tested against thirty different public jailbreak techniques, and that the thirty-day retention exists precisely so it can detect and patch novel attacks in flight. </p><p>It also disclosed, in the same launch post, that the <strong>UK AI Security Institute had made progress toward a universal jailbreak </strong>within a brief testing window. That admission matters more than it looks: Anthropic&#8217;s case was never that Fable is unbreakable, but that breaking it is slow and costly enough to monitor. </p><p>That is <strong>a probabilistic claim</strong>, not an absolute one, which is exactly why the dispute that followed turned on what counts as a serious enough break.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!603C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!603C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 424w, https://substackcdn.com/image/fetch/$s_!603C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 848w, https://substackcdn.com/image/fetch/$s_!603C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 1272w, https://substackcdn.com/image/fetch/$s_!603C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!603C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png" width="1456" height="754" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:754,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What got pulled: the only public model above Opus.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="What got pulled: the only public model above Opus." title="What got pulled: the only public model above Opus." srcset="https://substackcdn.com/image/fetch/$s_!603C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 424w, https://substackcdn.com/image/fetch/$s_!603C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 848w, https://substackcdn.com/image/fetch/$s_!603C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 1272w, https://substackcdn.com/image/fetch/$s_!603C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0523776-b7a0-4cda-9b1b-d0aad65b983c_1650x855.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 2</span></strong> What got pulled: the only public model above Opus.</figcaption></figure></div><p>Fable 5 was <strong>not a careless release.</strong> It was, by design and by the company&#8217;s loud public framing, the <strong>most safety-instrumented frontier launch</strong> the industry had produced. That is what makes the next three days strange.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VfVP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VfVP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 424w, https://substackcdn.com/image/fetch/$s_!VfVP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 848w, https://substackcdn.com/image/fetch/$s_!VfVP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 1272w, https://substackcdn.com/image/fetch/$s_!VfVP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VfVP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png" width="1456" height="715" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:715,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The safeguards the government overrode.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The safeguards the government overrode." title="The safeguards the government overrode." srcset="https://substackcdn.com/image/fetch/$s_!VfVP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 424w, https://substackcdn.com/image/fetch/$s_!VfVP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 848w, https://substackcdn.com/image/fetch/$s_!VfVP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 1272w, https://substackcdn.com/image/fetch/$s_!VfVP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc81b93-b6ee-4aea-bf4b-e4e820c867a8_1650x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 3</span></strong> The safeguards the government overrode.</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The trigger, and the call that wasn&#8217;t answered</h2><p>The cleanest account of how the letter came to be written runs through Anthropic&#8217;s own cap table.</p><p>By the<strong> reporting of the Wall Street Journal </strong>and <strong>The Information</strong>, later echoed by Bloomberg, the bypass that set everything in motion was found not by an adversary but by researchers at Amazon, Anthropic&#8217;s largest investor. Amazon&#8217;s chief executive,<strong> Andy Jassy</strong>, took the finding straight to Washington, <strong>personally alerting Treasury Secretary Scott Bessent</strong> that his researchers had demonstrated a way around Fable 5&#8217;s cybersecurity guardrails. </p><p>The escalation reached Commerce Secretary Howard Lutnick the same day. By one reconstruction of the timeline, the <strong>government first called Anthropic at 1:00pm Eastern</strong>; the signed letter followed hours later, at 5:21. Dario Amodei spent that Friday on calls with cabinet officials, arguing that Amazon&#8217;s technique did not amount to a true jailbreak. The letter went out anyway.</p><p><em>What was the technique?</em> Here the reporting converges on something almost anticlimactic. Anthropic&#8217;s statement describes it as <strong>asking the model to read a specific codebase </strong>and fix any software flaws, a single-instance, non-universal bypass that surfaced a handful of previously known, minor vulnerabilities. </p><p>The most authoritative outside account is from<strong> Katie Moussouris</strong>, the founder of <strong>Luta Security</strong>, who serves on the Commerce Department&#8217;s own Information Systems Technical Advisory Committee and the Cyber Safety Review Board, and who says she is the only outside expert to have actually read the underlying research paper. Her summary is blunt. </p><p>The <strong>researchers took open-source code with known CVEs</strong>, plus new code with deliberately planted bugs, and <em>asked Fable 5, Mythos, and Opus to review it for security issues.</em> <strong>Fable 5 refused</strong>. They then asked the models to fix the code, and through a manual, multi-step process turned the output into scripts that test the patches. </p><p>That, she writes, is it. She proposed, only half in jest, a 1990s-style t-shirt: &#8220;<em>fix this code</em>&#8221; on the front, &#8220;<em>this shirt is a munition</em>&#8221; on the back.</p><p><strong>Her technical point is </strong>the one that should worry policymakers more than the prompt itself. The reason the technique works is that it is a defensive request. <strong>Asking a model to find a bug</strong>, explain why it matters, and write a test that confirms the patch is the single most valuable thing an AI can do for defensive security, the find-fix-test loop that defenders run every day.</p><p>You cannot remove that capability, she argues, without making the model worse at defending real systems. There is <strong>no surgical edit</strong> that deletes the offense and keeps the defense, because at this level they are the same muscle.</p><p>An independent test complicates the picture from the other direction, and it is worth holding alongside Anthropic&#8217;s own numbers. </p><p>The security firm <strong>Endor Labs</strong> benchmarked Fable 5 on <strong>two hundred real-world vulnerability-fixing tasks</strong> and found it landed mid-table, at 59.8 percent on functional correctness and just 19 percent on producing a genuinely secure fix, with a record number of timeouts the firm attributed to the model&#8217;s extended thinking. </p><p>Their reading cuts both ways: <strong>Anthropic&#8217;s headline cyber numbers</strong>, they note, mostly measure offensive progress, exploits and proofs of concept, not whether the model writes safe production code. </p><p>So the <strong>capability </strong>that triggered the recall <strong>is real and measurable</strong>, but it is specifically an offensive-discovery capability, and even that is uneven across the cyber task surface.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ap0x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ap0x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 424w, https://substackcdn.com/image/fetch/$s_!ap0x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 848w, https://substackcdn.com/image/fetch/$s_!ap0x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 1272w, https://substackcdn.com/image/fetch/$s_!ap0x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ap0x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png" width="1456" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The gap between what was cited and what would justify a recall.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The gap between what was cited and what would justify a recall." title="The gap between what was cited and what would justify a recall." srcset="https://substackcdn.com/image/fetch/$s_!ap0x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 424w, https://substackcdn.com/image/fetch/$s_!ap0x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 848w, https://substackcdn.com/image/fetch/$s_!ap0x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 1272w, https://substackcdn.com/image/fetch/$s_!ap0x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3b7f77-e280-4178-8cac-a89b57fe3934_1650x780.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 4</span></strong> The gap between what was cited and what would justify a recall.</figcaption></figure></div><p>This is <strong>the crux of Anthropic&#8217;s public objection. </strong></p><p>The company says it has been given only verbal evidence of a narrow, non-universal bypass, that <em>no concerning jailbreak producing a genuinely harmful result has been disclosed to it</em>, and that recalling a <strong>model deployed to hundreds of millions of people</strong> over a narrow finding would, if applied as an industry standard, halt all frontier deployments everywhere. </p><p>Anthropic has been explicit, including in Amodei&#8217;s own policy writing, that it believes the government <em>should</em> be able to block unsafe deployments, but <strong>through a process that is transparent</strong>, fair, and grounded in technical fact. Its complaint is not that the power exists. It is that this use of it does not meet that bar.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Two rationales, and which one is real</h2><p>Here the <strong>official story develops a seam</strong>, and the seam is worth prying at, because it determines which of the two readings from the top of this piece is the operative one.</p><p>Publicly and to Anthropic, the stated trigger was the jailbreak. But <strong>the Lutnick letter itself</strong>, a copy of which Reuters reported seeing, frames the danger differently: as the risk that the models <strong>could be diverted to military intelligence users in China, Russia</strong>, or other countries of concern. </p><p>Those are not the same justification. One is a <strong>technical claim</strong> about a safeguard failing. The other is a <strong>geopolitical claim </strong>about who might get access. And the divergence is not merely rhetorical: the regulatory provision the order reportedly invokes is one aimed at <strong>military-intelligence end users</strong> in countries of concern, which means the diversion rationale is built into the legal instrument itself, even as Anthropic&#8217;s own public statement names only the jailbreak. </p><p>The hook and the explanation point in different directions. Semafor reported that <strong>White House concerns</strong> ran beyond the bypass entirely, with officials suspecting that a <strong>China-linked group</strong> had accessed Mythos before the shutdown, a suspicion, it should be stressed, that has not been publicly substantiated. </p><p>Anthropic says the question of Chinese access was never raised in any of its conversations about the jailbreak.</p><p>The accounts diverge on the human level too. <strong>David Sacks</strong>, the White House AI adviser, has said the administration gave Amodei a clear choice, fix the jailbreak or <strong>de-deploy the models</strong>, and that Amodei refused. Anthropic disputes that characterization. As of this writing the competing versions have not been reconciled, and a reader should treat both as contested.</p><p><em>Why does the seam matter? </em>Because if the real driver is a narrow technical bypass, the episode is fixable, and probably will be fixed, with some added vetting layer. </p><p>If the real driver is diversion risk to adversary states, the <strong>model may stay restricted no matter what Anthropic does to its classifiers</strong>, because the concern is not about the safeguard at all. And if the real driver is neither, if national security is functioning as the available lever in a relationship that had already curdled, then the technical merits are almost beside the point.</p><p><strong>Michael Horowitz </strong>of the <strong>Council on Foreign Relations</strong>, speaking about the <em>earlier</em> Anthropic dispute, called it a fight &#8220;<em>about politics and personalities</em>&#8221; that was &#8220;<em>masquerading as a policy dispute.</em>&#8221; That framing did not come from nowhere. </p><p>To see why, you have to look at what happened in March.</p><div><hr></div><h2>A part most coverage missed</h2><p>Th<strong>e Fable 5 suspension</strong> has been reported as a discrete event. It is better understood as the <strong>second of two extraordinary statutory actions</strong> against Anthropic inside a single quarter, the sharp end of a federal campaign that had been escalating since winter, and the earlier action tells you a great deal about this one.</p><p>The pressure began before either statute was invoked. By Fortune&#8217;s account, the <strong>Trump administration moved as early as February</strong> to push federal agencies off Anthropic&#8217;s models, after the company refused the Pentagon&#8217;s preferred contract language permitting use of Claude for any lawful purpose. </p><p><strong>Anthropic wanted two carve-outs</strong>: no fully autonomous lethal weapons, and no mass surveillance of Americans. </p><p>That dispute hardened into something unprecedented on March 3, when <strong>Secretary of Defense Pete Hegseth </strong>designated Anthropic a supply-chain risk to national security, invoking a rarely used statute, Section 3252 of Title 10, and barring defense contractors, suppliers, and partners from doing business with the company. </p><p>As the <strong>Congressional Research Service and Courthouse News documented</strong>, the same refusal was the trigger. The Pentagon&#8217;s position, argued later before a DC Circuit panel, was that those guardrails amounted to an <em>&#8220;operational veto,&#8221;</em> a remote kill switch the company could trigger based on its own reading of lawful versus unlawful use. </p><p>Hegseth put it less legally on social media: America&#8217;s warfighters, he wrote, would never be <em>&#8220;held hostage by the ideological whims of Big Tech.&#8221;</em></p><p>The <strong>supply-chain-risk label</strong> is historically reserved for foreign adversaries. Applying it to a US company that was, until weeks earlier, the Pentagon&#8217;s hand-picked frontier vendor, the first whose models ran inside classified networks, was extraordinary. </p><p><strong>Anthropic sued on March 9</strong>, calling the action unprecedented and unlawful. By May, a three-judge DC Circuit panel hearing one of the two challenges sounded openly skeptical of the government&#8217;s reasoning, with the <strong>court pressing </strong>on whether a guardrail against, in one judge&#8217;s framing, telling an unreliable model &#8220;<em>which bombs to drop</em>&#8221; really constituted a supply-chain risk. </p><p>The litigation is unresolved. In the meantime, agencies including Health and Human Services, Treasury, and State confirmed they were migrating off Claude, even as the <strong>Department of Defense</strong>, by CNBC&#8217;s reporting, <strong>kept using Anthropic&#8217;s models</strong> to support active military operations in Iran, and the NSA, by later accounts, continued using Claude for its own work. Blacklisted and indispensable at the same time.</p><p>There is a <strong>political layer </strong>underneath the legal one. Amodei has drawn fire from Sacks, who has accused Anthropic of pushing &#8220;<em>woke AI</em>,&#8221; largely over its regulatory positions. </p><p>A Defense official told CNBC the March decision was about &#8220;<em>the military being able to use technology for all lawful purposes,</em>&#8221; not personality. But the pattern that emerges when you put the two actions side by side is hard to wave away.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G0FF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G0FF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 424w, https://substackcdn.com/image/fetch/$s_!G0FF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 848w, https://substackcdn.com/image/fetch/$s_!G0FF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 1272w, https://substackcdn.com/image/fetch/$s_!G0FF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G0FF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two federal actions against one company in three months.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two federal actions against one company in three months." title="Two federal actions against one company in three months." srcset="https://substackcdn.com/image/fetch/$s_!G0FF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 424w, https://substackcdn.com/image/fetch/$s_!G0FF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 848w, https://substackcdn.com/image/fetch/$s_!G0FF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 1272w, https://substackcdn.com/image/fetch/$s_!G0FF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bedb3-0ed0-42d3-a54a-b5cedbd0996e_1650x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 5</span></strong> Two federal actions against one company in three months.</figcaption></figure></div><p><strong>Two departments.</strong> Two legal instruments that had never been pointed at an AI company before. One target. In March, the objection was that Anthropic&#8217;s safety restrictions were too strong, that it would not let the government use Claude freely enough. </p><p>In June, <strong>the objection was</strong> that <strong>Anthropic&#8217;s safety restrictions</strong> were too weak, that a bypass let users reach capability the safeguards were meant to contain. The company was punished, in the same quarter, for both having guardrails and for not having good enough ones. </p><p>Whatever else that is, it is <strong>not a stable regulatory environment,</strong> and it is the context every line of Anthropic&#8217;s confidential S-1 now sits inside.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The machinery, and why it is new</h2><p>The <strong>legal vehicle deserves a closer look</strong>, because its novelty is the part with the longest half-life.</p><p>The legal vehicle deserves a closer look, because its novelty is the part with the longest half-life. The order took the form of what export lawyers call an &#8220;<em>is informed</em>&#8221; letter from the <strong>Commerce Department&#8217;s Bureau of Industry and Security</strong>, the mechanism by which BIS notifies a specific company that a license is now required for specific items. That mechanism is not itself new. </p><p>What is new is pointing it at a deployed commercial model. Reuters, which reported seeing the letter, said Commerce invoked the<strong> Export Control Reform Act of 2018</strong> and its authority over emerging and foundational technologies; analysts parsing the public reporting place the regulatory hook in the export rules covering <strong>military-intelligence end users</strong>, though the letter itself has not been released, so the precise provisions remain a reconstruction. </p><p>The directive requires a license for any export, re-export, or <strong>in-country transfer of the models</strong> to a foreign person, and warns that noncompliance brings prompt criminal and civil penalties.</p><p>The doctrine doing the work is the deemed export, and understanding it is the whole game. Under the export regulations, releasing<strong> controlled technology or source code</strong> to a foreign national inside the United States has for decades been treated as an export to that person&#8217;s home country.</p><p>Showing a controlled blueprint to a foreign-born engineer in a San Francisco office is, in law, a shipment abroad. The letter applies that logic to a model: every inference a foreign national draws from Fable arguably releases the controlled capability to them, which is<strong> why the order reached foreign nationals on US soil</strong> and Anthropic&#8217;s own non-citizen staff, and why no geofence could satisfy it.</p><p><strong>Read with an engineer&#8217;s eye</strong>, the theory strains at a seam. Export controls were built for things that cross borders: chips, machine tools, encryption binaries, centrifuge designs. </p><p>The cited rules speak of technology and source code, but a hosted model hands the user neither. It<strong> hands them inference</strong>, an outcome rather than an artifact, and the weights never leave Anthropic&#8217;s data centers. </p><p>As one former federal prosecutor put it to CIO, the <strong>physical location of the source code</strong> has become <strong>irrelevant</strong>; what is being controlled is access to what the code can do. That is a real shift in what export means, and it is not clearly settled law. </p><p>Export controls have not traditionally reached foreign access to US software as a service, which is precisely why, as Lawfare noted, the House passed a <strong>Remote Access Security Act in January</strong> to extend export jurisdiction to remote access of controlled US technology. The government reached for a theory that Congress is, at the same moment, trying to write into statute because it is not yet clearly there.</p><p>There is one more piece of timing that <strong>turns the episode from aggressive into nearly incoherent</strong>. Ten days before the letter, on June 2, the same administration signed an executive order titled &#8220;<em>Promoting Advanced Artificial Intelligence Innovation and Security,</em>&#8221; setting up a voluntary framework, to be <strong>designed by August 1</strong>, under which developers could offer the government early access to frontier models up to thirty days before release. </p><p>The President had just cut a planned ninety-day cybersecurity review window down to thirty, and by multiple accounts the order explicitly <strong>barred any mandatory licensing</strong> or pre-clearance regime. Anthropic, OpenAI, and Google all welcomed it as the reasonable version of government engagement: <strong>a request, not a rule.</strong> </p><p>The framework was not built. The August deadline had not arrived. And before the voluntary process could take its first breath, the <strong>government reached for the binding instrument</strong> it had just promised not to use. Voluntary in the announcement, mandatory in the execution, ten days apart.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The own-goal: who export control actually reaches</h2><p>Set aside the question of whether the safeguard failed, and ask the colder question an <strong>export-control regime</strong> is supposed to answer: </p><blockquote><p><em>does it stop the bad outcome it names?</em></p></blockquote><p>The collected judgment of the security profession is that it does not, and may do the reverse. <strong>More than eighty cybersecurity executives</strong>, including leaders at firms such as Nvidia and Adobe, signed an open letter to Lutnick and National Cyber Director Sean Cairncross over the weekend <strong>asking that the controls be lifted</strong>, an effort now hosted at freefable.org. </p><p>Moussouris&#8217;s argument is the technical spine of their case: the capability the <strong>order targets is defensive</strong>, the people it cuts off are defenders, and the attackers it is meant to thwart never needed a US endpoint in the first place.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YH9D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YH9D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 424w, https://substackcdn.com/image/fetch/$s_!YH9D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 848w, https://substackcdn.com/image/fetch/$s_!YH9D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 1272w, https://substackcdn.com/image/fetch/$s_!YH9D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YH9D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The asymmetry at the heart of the policy.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The asymmetry at the heart of the policy." title="The asymmetry at the heart of the policy." srcset="https://substackcdn.com/image/fetch/$s_!YH9D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 424w, https://substackcdn.com/image/fetch/$s_!YH9D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 848w, https://substackcdn.com/image/fetch/$s_!YH9D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 1272w, https://substackcdn.com/image/fetch/$s_!YH9D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe26fff03-bd6b-434d-9b58-065430447e5e_1650x840.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 6</span></strong> The asymmetry at the heart of the policy.</figcaption></figure></div><p>The asymmetry is stark. On one side of the ledger, the <strong>order cuts off allied-nation cyberdefenders</strong>, foreign-national engineers working legally in the United States, Anthropic&#8217;s own staff, the <strong>Glasswing partners</strong> across more than fifteen countries who were using Mythos precisely to secure critical infrastructure, and any researcher running a find-fix-test loop. </p><p>On the other side, it reaches none of the things it is nominally about. It <strong>does not touch Chinese open-weight models</strong>; on June 13, the day after the shutdown, the Chinese lab <strong>Zhipu AI shipped GLM-5.2 </strong>and explicitly cited the US ban as evidence that American models are unreliable partners. </p><p>It does <strong>not touch other frontier labs&#8217; cyber-capable models</strong>, which by Moussouris&#8217;s reckoning carry fewer guardrails and comparable capability, with the rest of the field expected to match Mythos-class capability within months. </p><p>It does not touch adversary state actors, who have their own systems. And it does not touch the capability itself, which is diffusing regardless. You cannot, <strong>as Moussouris puts it</strong>, export-control your way to cyber resilience.</p><p>The contradiction has not been lost on people who know the regime from the inside. <strong>Dean Ball</strong>, an AI policy analyst who briefly served in this administration, called the action cartoonish, pointing to the oddity of a government that <strong>waves advanced AI chips</strong> through to China while barring Britain and every other allied user from its best models. </p><p><strong>Moussouris</strong>, who lived through the last version of this fight, put the bottom line more bluntly: if national defense was the goal, the order scored an own goal against the United States.</p><p>There is a precedent she lived through. When the <strong>Wassenaar Arrangement </strong>added controls on &#8220;<em>intrusion software</em>&#8221; in 2013, the definition was written so broadly that it reached the routine cross-border work of defense itself, <strong>sharing exploit proofs of concept</strong>, coordinating vulnerability disclosure, running incident response, to the point that the United States declined to implement the original language and the text had to be <strong>renegotiated in 2017 </strong>to carve defensive research back out. </p><p>The Fable 5 directive, signed in an afternoon, has the same shape and none of the deliberation.</p><div><hr></div><h2>The sovereignty bill comes due</h2><p>The diplomatic cost is the part that will outlast the news cycle, and it lands closest to home for <strong>anyone reading this from outside the United States.</strong></p><p>For every allied government that had quietly assumed continuous access to the frontier, the <strong>message of June 12 was unambiguous</strong>: that access is revocable, unilaterally, on a domestic legal theory you have no vote in, with a few hours&#8217; notice. </p><p>The reaction was immediate and came from the top. At the <strong>G7 summit at Evian-les-Bains this week</strong>, the suspension became one of the sharpest flashpoints on the agenda. <strong>UK Prime Minister Keir Starmer</strong> raised the blackout directly with Trump and asked for a carve-out restoring access for British citizens and businesses. Washington rebuffed it. </p><p><strong>UK AI minister Kanishka Narayan</strong> put the stakes plainly, noting that the most advanced AI in the world had just been cut off for everyone in Britain, and argued the episode proves the case for sovereign AI capability. </p><p><strong>Canada&#8217;s Mark Carney </strong>framed it as a warning about overreliance on any single model. The European Union, already the stricter regulator, now has fresh reason to reduce its dependence on American AI infrastructure.</p><p>Out of that pressure, a <strong>workaround is taking shape</strong>, and its shape is the most revealing part of the whole episode. According to Reuters, the Financial Times, and Axios, a <strong>US delegation led by Lutnick </strong>spent the summit&#8217;s sidelines negotiating a &#8220;<em>trusted partners</em>&#8221; framework: a sanctioned channel through which vetted allies, either whole countries or individual companies, could regain access to the controlled models. </p><p>The<strong> pitch is cybersecurity</strong>, the same allied-defense logic the order itself invoked. Read it against what Anthropic did on June 12 and the irony is exact. The company <strong>declined to gate access by nationality</strong> and shut the models off rather than operate that system. Governments are now assembling the same nationality gate themselves, one level up, and calling it a partnership. </p><p>The <strong>selective-access layer</strong> that was too compromising for a private firm to run is being rebuilt as a diplomatic club, in which reaching the frontier becomes a privilege Washington grants to allies rather than a product a company sells to customers. <strong>No agreement has been reached</strong>, and which countries and which companies would qualify is undefined.</p><p>The <strong>structural irony compounds</strong>. An action justified by the need to deny capability to adversaries functions, in practice, as the strongest possible argument for those adversaries&#8217; domestic alternatives, and for <strong>allied sovereign-AI programs</strong> that route around US providers entirely. </p><p>Zhipu&#8217;s launch timing was not a coincidence; it was marketing handed to Beijing for free. This is the <strong>AI-sovereignty debate </strong>stripped of abstraction. It is no longer a conference panel. </p><p>It is a <strong>procurement decision </strong>that every<strong> non-US enterprise and government now has to price</strong>, and the new line item is the probability that the best model on the market disappears for an indeterminate number of weeks because of a dispute in Washington it cannot see coming.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>An IPO inside the blast radius</h2><p>All of this is happening on the worst possible calendar.</p><p>By the reporting around the launch, confirmed in the company&#8217;s own filing announcement, <strong>Anthropic confidentially filed its IPO prospectus with the SEC on June 1</strong>, eight days before Fable 5 shipped and eleven before it was pulled. </p><p>The filing followed a 65 billion dollar Series H that valued the company at 965 billion post-money, ahead of OpenAI&#8217;s 852 billion from late March, on a revenue run-rate that had crossed 47 billion by Anthropic&#8217;s May disclosure. The <strong>growth is real and almost vertical</strong>: Anthropic told investors it expects 10.9 billion dollars of revenue in the second quarter alone, more than double the first. The <strong>margin underneath is thinner</strong> than the headline. </p><p>Its own projected second-quarter operating profit implies a margin of roughly five percent, and at the reported valuation <strong>the company is priced near twenty times annualized revenue</strong>, a multiple that assumes years of uninterrupted hypergrowth. </p><p>OpenAI confirmed its own confidential filing days later, and SpaceX is gearing up for a record public debut this week. </p><p><strong>Three of the largest IPOs in history </strong>are converging, and one of the three just demonstrated, live, that its flagship product can be switched off by a letter.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1hE2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1hE2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 424w, https://substackcdn.com/image/fetch/$s_!1hE2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 848w, https://substackcdn.com/image/fetch/$s_!1hE2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 1272w, https://substackcdn.com/image/fetch/$s_!1hE2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1hE2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A flagship that can be pulled by letter, mid-roadshow.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A flagship that can be pulled by letter, mid-roadshow." title="A flagship that can be pulled by letter, mid-roadshow." srcset="https://substackcdn.com/image/fetch/$s_!1hE2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 424w, https://substackcdn.com/image/fetch/$s_!1hE2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 848w, https://substackcdn.com/image/fetch/$s_!1hE2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 1272w, https://substackcdn.com/image/fetch/$s_!1hE2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F413f5823-4987-48c7-bee3-2a6a7132c96d_1650x840.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 7</span></strong> A flagship that can be pulled by letter, mid-roadshow.</figcaption></figure></div><p>In an earlier piece for this newsletter, <strong>I argued that Anthropic&#8217;s valuation rested on a question no one could yet answer</strong>, because the S-1 was sealed: whether the revenue was high-margin, organically demanded, and durably embedded, or low-margin and propped by a circular capital structure. <strong>Two different businesses</strong>, hiding inside the same black box. The Fable 5 episode adds a second axis of the same kind. </p><p>There are now two different regulatory realities the company could be living in, and the filing does not tell you which. </p><p>In one, these are isolated frictions with an administration that will normalize, and the government dependency cuts the other way, toward Glasswing, toward classified deployments, toward a company so embedded in national security that it is too important to sideline. </p><p>In the other, the through-line from<strong> the Pentagon blacklist</strong> to the <strong>Commerce directive</strong> is a <strong>durable hostility</strong> that will keep surfacing as new restrictions, new carve-outs, and new headline risk, precisely the kind a roadshow cannot price.</p><p>The market&#8217;s read leans toward the benign outcome on the immediate question, though these are <strong>live prediction-market prices</strong> that move by the day, not fixed facts, and different outlets captured different values within the same week. </p><p>As of mid-June,<strong> Kalshi&#8217;s own market</strong> put the odds of Fable 5 returning before July 1 at 57 percent, before July 10 at 67, and before July 17 at 75; a parallel Polymarket contract ran somewhat higher, around seventy percent for a US return by July 1.</p><p>Kalshi traders separately gave <strong>Anthropic a 77 percent chance of reaching the public markets before OpenAI.</strong> The figures drift with each session, but across both venues the signal is the same: a bet on &#8220;<em>restored, with conditions,</em>&#8221; not on a permanent kill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!moZ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!moZ0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 424w, https://substackcdn.com/image/fetch/$s_!moZ0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 848w, https://substackcdn.com/image/fetch/$s_!moZ0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 1272w, https://substackcdn.com/image/fetch/$s_!moZ0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!moZ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png" width="1456" height="715" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:715,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The market expects &#8220;restored, with conditions,&#8221; not a kill.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The market expects &#8220;restored, with conditions,&#8221; not a kill." title="The market expects &#8220;restored, with conditions,&#8221; not a kill." srcset="https://substackcdn.com/image/fetch/$s_!moZ0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 424w, https://substackcdn.com/image/fetch/$s_!moZ0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 848w, https://substackcdn.com/image/fetch/$s_!moZ0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 1272w, https://substackcdn.com/image/fetch/$s_!moZ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb078d6ee-43e1-4be0-bfc3-52903804df83_1650x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><span data-color="rgb(187, 59, 40)" style="color: rgb(187, 59, 40);">Fig. 8</span></strong> The market expects &#8220;restored, with conditions,&#8221; not a kill.</figcaption></figure></div><p>It is worth noting what the comparison to OpenAI implies. OpenAI built its government posture around vetted, tiered access: an explicit government track, a <strong>Defense Department pilot</strong>, sensitive cyber capability released through approval rather than open availability. </p><p>That is closer to what regulators have signaled they want. Anthropic, by shipping a<strong> Mythos-class model</strong> to the broad public first, was arguably the lab that tested the line. It found the line. The cost of being first to the frontier, this quarter, was being first to the letter.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What this actually means</h2><p>Strip away the specifics and four things are left standing, in rough order of how long they will matter.</p><p>The immediate event is probably resolvable, and the machinery of its resolution is already visible. <strong>Anthropic sent senior engineers to Washington</strong> and met officials through the week, and by the weekend the contours of a deal were forming around vetted access rather than open availability: the <strong>trusted-partners framework floated at the G7</strong>, plus a reported identity-verification layer, both of which look a great deal like how Mythos 5 was restricted in the first place. </p><p>Even David Sacks, no friend of the company, has said the administration&#8217;s <strong>hope is that Anthropic fixes the issue,</strong> the directive is revoked, and Fable returns to general availability. A permanent kill of a flagship the company just filed an IPO around would be the surprise, not the base case.</p><p>The precedent is not resolvable, and it is the real news. Frontier AI has been reclassified, in practice if not yet in settled law, as a controlled export. </p><p>The mechanism to pull a live model from the entire market now exists, has been used, and survives whatever happens to Fable 5 specifically. <strong>The trusted-partners talks make this worse</strong>, not better: they do not roll the precedent back, they institutionalize it, turning a one-off emergency letter into a standing system in which allied access is licensed rather than assumed. </p><p><strong>Every lab, OpenAI and Google included</strong>, now operates one Friday letter away from the same outcome, and the whole industry has just watched the vetted-access posture become the one that survives contact with Washington, while the open-release model gets tested to destruction.</p><p>For practitioners, the lesson is architectural and immediate. If your stack had a <strong>hard dependency on a single frontier model</strong>, June 12 was the day that risk stopped being theoretical. </p><p>The pragmatic move while this plays out is the one Fable 5 itself makes on <strong>high-risk queries:</strong> fall back to Opus 4.8, usually a one-line model-ID change, since it is live, unaffected, and the model Fable defers to anyway. </p><p><strong>AWS did exactly this</strong> at the infrastructure level, automatically rerouting Fable and Mythos calls to Opus 4.8 the moment the order landed. </p><p>The deeper lesson is to treat model availability as a dependency to be abstracted and load-balanced, not a constant. The<strong> capability gap between Mythos-class and Opus-class is real,</strong> widest on long-horizon agentic work, and for some workloads there is no clean substitute today. That gap is now a supply risk, and supply risk gets designed around.</p><p>And for Anthropic, the episode puts its foundational thesis under load. The company&#8217;s entire identity is the bet that safety and capability can be co-developed, that being the most careful lab is a moat rather than a tax. </p><p>The uncomfortable reading of this quarter is that <strong>the moat became the target.</strong> The capability it built to lead the frontier is exactly what got the model classed as a munition, and the very language the company used to sell its caution helped write the legal case for taking it away. </p><p>The <strong>cybersecurity researcher Peter Girnus </strong>made the point with a blade: a company that calls its product a munition in every press release should not be shocked when a government eventually takes it at its word. As he put it, &#8220;<em>They wrote the legal predicate themselves and called it a brand</em>.&#8221; </p><p>The <strong>government partnership</strong> Anthropic cultivated as a differentiator is the same channel through which all of it arrived. Safety did not exempt the company. By one reading, safety is what made it conspicuous.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What to watch</h2><p>Because the <strong>story is moving daily, </strong>here are the markers that will tell you which of the two readings is winning, in roughly the order they will resolve.</p><p>The terms of restoration, not the fact of it. &#8220;<em>Restored</em>&#8221; and &#8220;<em>restored as it shipped</em>&#8221; are different outcomes. Watch whether Fable 5 returns generally available or only through the trusted-partners channel, whether the reported<strong> early-July identity-verification rollout </strong>extends to foreign nationals or merely confirms US citizenship, and what compliance burden attaches. A narrow, conditioned return is the base case, and the conditions are the whole story.</p><p>Whether the trusted-partners framework actually lands. As of this week it is a negotiation with no agreement, the qualifying countries and companies are undefined, and the <strong>EU and UK are already hedging toward their own capacity.</strong> If it formalizes, allied access to the frontier becomes a license Washington issues. If it collapses, the sovereignty exodus accelerates.</p><p>Whether the China-diversion claim is ever evidenced. It is the one rationale that, if substantiated, flips the base case from &#8220;<em>restored with conditions</em>&#8221; to &#8220;<em>restricted regardless of safeguards.</em>&#8221; So far it is an <strong>unsubstantiated suspicion,</strong> and Anthropic says it was never raised in any conversation about the jailbreak.</p><p><strong>The DC Circuit ruling on the Pentagon designation</strong>. A decision against the government reframes the whole pattern as overreach the courts will check. A decision for it hardens the precedent across both fronts at once.</p><p>And whether the rest of the field quietly changes its release posture. If OpenAI and Google visibly shift toward vetted, tiered access over the coming months, <strong>that is the market pricing the new reality</strong>, and the open-release era of frontier models ends not with a ban but with a business decision.</p><p>Hold all of that, and <strong>resist the two easy endings.</strong> This was not a trivial misunderstanding that proves nothing, and it was not a five-alarm assault on innovation that proves everything. It was a demonstration. </p><p>A<strong> commercial AI model </strong>serving hundreds of millions of people was reclassified as a controlled weapon and switched off centrally, on a <strong>domestic legal theory built for centrifuges</strong>, triggered by a defensive coding prompt, escalated by the company&#8217;s own largest investor, and justified by two rationales that still do not match, in the same quarter a different arm of the same government had blacklisted the same company for the opposite sin. </p><p>The narrow event will probably pass. The <strong>precedent it set will not. </strong>The envelope has been opened in public, and it does not go back inside.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><em>Sources include the primary statement and launch posts from Anthropic; reporting from Reuters, the Financial Times, the Wall Street Journal, The Information, Bloomberg, Axios, CNBC, Fortune, TIME, Semafor, TechCrunch, NBC News, and The Next Web; the Congressional Research Service (IN12669) and Courthouse News on the Pentagon designation and litigation; technical analysis by Katie Moussouris of Luta Security, the only outside expert to have read the underlying research paper; the open letter at freefable.org; market-implied data from Kalshi; and the Claude API documentation. The Amazon-origin account is attributed to the Wall Street Journal and The Information; the G7 trusted-partners talks to Reuters, the Financial Times, and Axios. All valuation figures are reported, estimated, or market-implied as labeled. The China-access concern is reported only as an unsubstantiated suspicion, and the competing Sacks and Anthropic accounts of the de-deployment ultimatum remain unreconciled as of June 18, 2026. No claim here rests on a publicly available audited filing, because Anthropic&#8217;s S-1 remains confidential.</em></p>]]></content:encoded></item><item><title><![CDATA[How three companies set the price of intelligence ]]></title><description><![CDATA[HBM, the memory wall, and the physics underneath every token. From the capacitor to the income statement.]]></description><link>https://www.thesoftwarefrontier.com/p/how-three-companies-set-the-price</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/how-three-companies-set-the-price</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Wed, 17 Jun 2026 12:13:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!d7Nd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d7Nd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d7Nd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!d7Nd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!d7Nd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!d7Nd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d7Nd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png" width="1254" height="1254" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1254,&quot;width&quot;:1254,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2505071,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d7Nd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!d7Nd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!d7Nd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!d7Nd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b6b42d6-d6fc-49f8-8210-0734fcff887f_1254x1254.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Author&#8217;s note on method.</strong> <em>This report was researched in June 2026 against primary sources (JEDEC standards, vendor announcements, supplier earnings releases) and dated trade reporting, with every computed figure derived from first principles and shown inline. The HBM4 ramp, the Rubin and MI450 launches, and the Q1 2026 memory shock are recent events; a verification list of claims worth re-checking sits in Appendix B, with confidence tiers throughout. Two sections present explicit illustrative models (the cost of a stack, the gigawatt chain): their inputs are tagged as sourced or assumed, their arithmetic is exact, and their outputs are ranges, not disclosures. Cross-vendor specifications use published peak figures and are directional where measurement conventions differ. Appendix C specifies the measurement program that would convert several first-principles claims here into original benchmark data. Nothing in this report is investment advice.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The thesis: every token is a memory read</h2><p>Strip away the software and an output token is a physical event: to produce one token, an accelerator must stream essentially<strong> every active parameter of the model</strong> from memory through its arithmetic units. A 70 billion parameter model quantized to <strong>FP8 is 70 gigabytes of weights. </strong></p><p>Generating one token means reading 70 gigabytes. Generating a hundred tokens a second means moving seven terabytes a second, and <em>no amount of arithmetic brilliance changes that requirement</em>, because the arithmetic is not the constraint. <strong>During decode</strong>, the phase that produces every token anyone has ever read from a model, the limiting resource on every modern accelerator is memory bandwidth.</p><p>That bandwidth has exactly one industrial source: <strong>High Bandwidth Memory</strong>, towers of DRAM dies thinned to thirty micrometers, drilled through with thousands of copper vias, and bonded onto a logic die millimeters from the GPU. </p><p>Three companies on earth manufacture it at the frontier: <strong>SK hynix</strong> in Icheon and Cheongju, <strong>Samsung</strong> in Pyeongtaek, and <strong>Micron </strong>in Boise, Hiroshima, and Taichung. Which means the marginal cost of intelligence, the dollars per million tokens that every API price and every AI gross margin ultimately rests on, is set<strong> not in Santa Clara</strong> but in a three-supplier memory oligopoly, by stacking yields, bonding chemistry, and wafer allocation.</p><p>The market has noticed, violently. In the first quarter of 2026, SK hynix posted a <strong>72 percent operating margin</strong>, higher than Nvidia&#8217;s and TSMC&#8217;s most recent reported margins, on revenue that nearly tripled year over year; on the earnings call the company said <strong>customer requests for HBM already exceed its planned production</strong> capacity for the next three years, per the Q1 release and call coverage. </p><p>The supplier of the bottleneck is now more profitable, in percentage terms, than the company whose chips it feeds. That inversion is the subject of this report.</p><p>The structure: <strong>the device physics that created the wall (II)</strong>; the wall measured on real silicon, including<strong> the operating taxes nobody quotes (III)</strong>; the anatomy of a stack down to the via, and t<strong>he yield equation that prices it (IV)</strong>; the oligopoly&#8217;s history and<strong> the 2026 supercycle (V)</strong>; HBM4, the <strong>largest architectural break in the technology&#8217;s history, now ramping (VI)</strong>; the machines it feeds and the two opposing design philosophies <strong>the new standard revealed (VII)</strong>; the money, including a <strong>transparent cost-per-stack model (VIII)</strong>; the bridge to the price of a token and <strong>the gigawatt-to-wafer chain (IX)</strong>; the <strong>bear case, stated properly (X); </strong>the <strong>road past HBM4 (XI); </strong>and <strong>what to watch (XII)</strong>, with five falsifiable calls. </p><p>Two interludes price the <strong>KV economy </strong>and the power wall along the way. <strong>Appendix C </strong>specifies the benchmarks that would extend this from synthesis to measurement.</p><p>One framing number before the detail. From the V100 in 2017 to the Rubin GPU now entering production, Nvidia&#8217;s peak tensor throughput at the lowest supported precision grew <strong>roughly 400-fold</strong>. </p><p>Over the same nine years, the memory bandwidth feeding that compute grew <em>24.4-fold. </em>The <strong>16.4x</strong> <strong>divergence </strong>between those exponents, computed from the vendors&#8217; own datasheets, is the memory wall. Everything below is downstream of it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3c1e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3c1e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 424w, https://substackcdn.com/image/fetch/$s_!3c1e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 848w, https://substackcdn.com/image/fetch/$s_!3c1e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 1272w, https://substackcdn.com/image/fetch/$s_!3c1e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3c1e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png" width="1456" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132213,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3c1e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 424w, https://substackcdn.com/image/fetch/$s_!3c1e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 848w, https://substackcdn.com/image/fetch/$s_!3c1e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 1272w, https://substackcdn.com/image/fetch/$s_!3c1e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55b5d674-8588-4801-8926-694f9c7700ce_1672x931.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>II. The physics: why the wall exists</h2><p>The wall is not a design oversight. It is the collision of two different scaling regimes, and to price it correctly you have to go down to the cell.</p><p><strong>The cell that cannot shrink.</strong> A DRAM bit is one transistor and one capacitor, the 1T1C cell, unchanged in concept since 1966. Writing stores charge on the capacitor; reading shares that charge onto a long bitline and asks a sense amplifier to detect the disturbance. </p><p>The readable signal is set by charge sharing: the voltage swing the sense amplifier sees is approximately the cell&#8217;s stored swing scaled by Cs over (<em>Cs plus Cbl</em>), the <strong>cell capacitance against the parasitic bitline capacitance</strong>. With modern cell capacitance in the single-digit femtofarads and bitlines loaded by hundreds of neighboring cells, that swing is on the order of tens of millivolts, detected differentially against a reference bitline. </p><p>Shrink the capacitor and the signal disappears into noise; the read becomes unreliable; the bit is worthless. </p><p>So the capacitor holds a roughly fixed charge requirement regardless of lithography, which is <strong>why DRAM capacitors became architecture</strong> rather than printing: vertical pillars with aspect ratios beyond 100 to 1, wells drilled a hundred times deeper than they are wide, lined with high-k dielectric laminates <em>(the zirconia-alumina-zirconia family)</em> to wring capacitance from area that no longer exists in plan view.</p><p>The consequence is the slowest node cadence in semiconductors. The industry&#8217;s DRAM generations crawled from <strong>1x-class</strong> around 19 nanometers in the mid-2010s through <strong>1y</strong>, <strong>1z</strong>, <strong>1a </strong>(<em>roughly 14</em>), <strong>1b </strong><em>(roughly 12 to 13)</em> to today&#8217;s <strong>1c </strong>at roughly 11 to 12 nanometers: a decade to cover what logic crossed in three years. </p><p>EUV lithography, which rescued logic, arrived in DRAM late and thinly: SK hynix introduced it at 1a, Samsung uses it on more layers, and Micron famously held out on <strong>DUV multi-patterning through 1-beta</strong> before adopting EUV at<strong> 1-gamma. </strong></p><p>Bits per wafer, the quantity that sets the cost of a gigabyte, now improves single-digit percent per year. This is the <em>supply-side bedrock </em>of every price in this report: the raw material of memory has nearly stopped getting cheaper.</p><p><strong>The latency that never moved.</strong> Hidden under the bandwidth story is a stagnation worse than the capacity one: <strong>DRAM row cycle time</strong>, tRC, the time to open a row, sense it, restore it, and precharge for the next, has improved by less than 2x in two decades, parked in the <strong>mid-40-nanosecond range</strong>, because it is governed by the analog physics of sense amplification, not by lithography. </p><p>Every bandwidth gain in <strong>modern DRAM</strong> is therefore parallelism wearing a frequency costume: more banks, more bank groups, deeper prefetch <em>(DDR5 fetches sixteen beats per access)</em>, more independent channels, so that thousands of slow rows are in flight at once. HBM is this philosophy at its logical extreme.</p><p><strong>The pin that cannot run.</strong> The other escape route, faster pins, is capped by signal integrity. A DDR5 pin driving centimeters of motherboard trace through a connector tops out in the high single Gbps; <strong>GDDR7 reaches the 30s </strong>only over short, exquisitely tuned point-to-point routes at painful energy cost. </p><p>And energy is the real currency: moving a bit from a board-level DIMM costs on the <strong>order of 10 to 15 picojoules</strong>; GDDR-class interfaces sit near 7 to 8; HBM, with its millimeters-long links through a silicon interposer, runs in the 3 to 5 range, and the logic-process base dies of HBM4 push the interface toward <strong>0.75 to 0.8 volts against 1.1 for DRAM-process predecessors</strong>, roughly doubling interface efficiency, per TSMC&#8217;s published figures (<em>all pJ-per-bit values are approximate vendor-class numbers</em>).</p><p>Run the energy arithmetic forward and it bites hard. At 4 picojoules per bit, fully streaming a <strong>B200&#8217;s 8 TB/s costs about 256 watts</strong>; fully streaming Rubin&#8217;s 22 TB/s at an improved 3 pJ per bit still costs about 528 watts. Memory traffic alone, at full decode throughput on an HBM4 flagship, plausibly draws two-thirds of what an entire H100 board drew. <strong>This is why packages crossed 2,000 watts</strong>, why every HBM4 platform is liquid-cooled, and why the JEDEC thermal envelope is now a first-order economic document.</p><p>So: a cell that cannot shrink, a row that cannot speed up, a pin that cannot run, and an energy budget that punishes distance. The only move left is the one HBM made: <strong>go wide</strong> (<em>1,024 wires, now 2,048</em>), <strong>go short</strong> (<em>millimeters through an interposer</em>), and<strong> go up </strong>(<em>stack the dies</em>). </p><p>Width replaces frequency; proximity replaces drive power; the third dimension replaces the second. The <strong>cost of the trick</strong> is the <em>subject of section IV</em>: stacking is the most yield-hostile thing the memory industry has ever mass-produced.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>III. The wall, quantified, and the taxes nobody quotes</h2><p>The cleanest way to see the wall is the manufacturers&#8217; own flagship specifications, indexed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RzVG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RzVG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 424w, https://substackcdn.com/image/fetch/$s_!RzVG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 848w, https://substackcdn.com/image/fetch/$s_!RzVG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 1272w, https://substackcdn.com/image/fetch/$s_!RzVG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RzVG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png" width="1456" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148973,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RzVG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 424w, https://substackcdn.com/image/fetch/$s_!RzVG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 848w, https://substackcdn.com/image/fetch/$s_!RzVG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 1272w, https://substackcdn.com/image/fetch/$s_!RzVG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb3b92d-80c2-4307-a55b-f20e10fcade9_1747x1026.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Computed from vendor datasheets and <strong>GTC 2026 disclosures</strong>. Note that the compute line rides shrinking precision (FP16 to FP8 to FP4), a legitimate but partly definitional gain; the bandwidth line had to be manufactured stack by stack. </p><p>The <strong>bytes-per-FLOP column</strong> is the punchline: each generation can feed each unit of its arithmetic less data than the last. The machine is increasingly a furnace with a narrowing fuel line.</p><p>Operationally, the two phases of inference live on opposite sides of the roofline. Prefill is a matrix-matrix multiply with arithmetic intensity in the <strong>hundreds of FLOPs per byte</strong>: compute-bound. Decode performs roughly two FLOPs per parameter per token while reading every parameter byte: intensity near 2 at FP8, against a <strong>ridge point around 560 FLOPs per byte on a B200</strong>, so a single conversation idles the arithmetic above 99 percent while it waits on DRAM. </p><p>The entire modern serving stack (<em>continuous batching, paged KV caches, speculative decoding, MoE routing</em>) exists to hide that ratio, and every one of those techniques converts the problem into a different demand on the same resource: <strong>more concurrent streams need more KV cache</strong>, and the KV cache lives in HBM. </p><p>Bandwidth sets the speed of a token; capacity sets how many tokens you can be making at once. Both are the stack.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m1OJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m1OJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 424w, https://substackcdn.com/image/fetch/$s_!m1OJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 848w, https://substackcdn.com/image/fetch/$s_!m1OJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 1272w, https://substackcdn.com/image/fetch/$s_!m1OJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m1OJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png" width="1456" height="827" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:827,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119579,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m1OJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 424w, https://substackcdn.com/image/fetch/$s_!m1OJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 848w, https://substackcdn.com/image/fetch/$s_!m1OJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 1272w, https://substackcdn.com/image/fetch/$s_!m1OJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec83cbc-3f09-49a3-bb8d-896b840af626_1672x950.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Two operating taxes deserve quantification because they appear in no marketing datasheet.</em></p><p><strong>The refresh tax.</strong> DRAM forgets; every row must be rewritten on a fixed schedule, and while a bank refreshes it cannot serve traffic. The overhead is roughly <em>tRFC over tREFI</em>, the refresh pulse width over the refresh interval: with multi-hundred-nanosecond tRFC on dense dies against the <em>standard 3.9 microsecond interval</em>, the tax is on the order of 5 to 10 percent of theoretical bandwidth (HBM&#8217;s per-bank and managed refresh modes claw some back). </p><p>The vicious part is thermal: JEDEC devices double their refresh rate above 85 degrees Celsius, halving tREFI, so the bandwidth tax roughly doubles exactly when the stack is working hardest and hottest. A 16-high tower dissipating tens of watts through molded underfill in a 2,300-watt package is a device engineered to live near that threshold. Hot memory is slow memory, and slow memory is expensive tokens: cooling budgets are bandwidth budgets.</p><p><strong>The utilization tax.</strong> Achieved bandwidth is not peak. Between refresh, bank conflicts under <em>irregular KV-cache access,</em> read-write turnarounds, and command overheads, well-tuned decode workloads typically realize 60 to 80 percent of datasheet bandwidth (the measurement protocol in Appendix C exists to pin this number per platform). </p><p>Every figure in this report that divides by peak bandwidth is therefore optimistic by that factor, uniformly, which preserves comparisons while flattering absolutes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dxwz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dxwz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 424w, https://substackcdn.com/image/fetch/$s_!Dxwz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 848w, https://substackcdn.com/image/fetch/$s_!Dxwz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 1272w, https://substackcdn.com/image/fetch/$s_!Dxwz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dxwz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png" width="1456" height="745" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:745,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82547,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dxwz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 424w, https://substackcdn.com/image/fetch/$s_!Dxwz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 848w, https://substackcdn.com/image/fetch/$s_!Dxwz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 1272w, https://substackcdn.com/image/fetch/$s_!Dxwz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ef3999-d33f-4dd7-abb6-69c1e6e26a0c_1672x855.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The wall is also not transient. The longest-baseline study, Gholami and colleagues&#8217; &#8220;<strong>AI and Memory Wall,</strong>&#8221; measured twenty years of server hardware: peak compute scaling 3.0x every two years, DRAM bandwidth 1.6x, interconnect 1.4x. Different exponents compound. </p><p>The wall is structural, and the industry that gets paid because of it is the next several sections.</p><div><hr></div><h2>IV. Anatomy of a stack, to the via</h2><p>A current HBM device is a tower: a base die at the bottom and 8, 12, or 16 DRAM core dies above it. </p><p><strong>JEDEC&#8217;s HBM4 standard</strong>, published as JESD270-4 on April 16, 2025, fixes the envelope: a 2,048-bit interface organized as 32 independent channels (<em>each split into two pseudo-channels, 64 concurrent access streams per stack</em>), support for <strong>24Gb </strong>and <strong>32Gb </strong>core dies in 4-, 8-, 12-, and 16-high stacks, capacities to <strong>64GB per stack</strong>, per-pin rates from 8 Gbps in the base spec, and a package height of 775 micrometers for both 12- and 16-high, <em>loosened from HBM3E&#8217;s 720</em> to give 16-high a fighting chance without new bonding physics.</p><h4>The vertical wiring</h4><p>Each core die is thinned to 30 to 50 micrometers (<em>SK hynix&#8217;s CES 2026 16-high uses 30, about a third of a hair</em>) and pierced by through-silicon vias: <strong>copper columns</strong> roughly 5 to 6 micrometers in diameter, formed via-middle with deep reactive-ion etch, lined, filled, then revealed by grinding the wafer from the back. </p><p>Signal, power, and <strong>ground TSVs</strong> together number on the order of ten thousand per stack (<em>order-of-magnitude; vendors do not publish counts</em>), with spares woven in:<strong> TSV repair logic </strong>in the base die can route around dead vias, one of several redundancy layers (<em>alongside row and column fuses</em>) that keep the yield equation below from being even crueler. </p><p>Between dies, communication crosses<strong> microbump fields</strong> at pitches around 25 micrometers, thousands of joints per interface, every one a potential stack-killing defect.</p><h4>The brain at the bottom</h4><p>The base die is the stack&#8217;s logic: the 2,048-bit PHY facing the host, channel routing, built-in self-test, the<strong> IEEE 1500 test wrapper</strong>, repair control, and the direct-access port that lets a tester exercise the tower. </p><p>Through HBM3E it was built on a DRAM process, because that is what memory firms own, and it shows: DRAM transistors make poor I/O drivers. At <strong>HBM4&#8217;s 10-plus Gbps </strong>per pin across 2,048 lanes, signal integrity demands real logic transistors, real equalization, lower supply rails, which is the engineering reason (<em>beyond the strategic one in section VI</em>) that the base die migrated to foundry logic processes this generation.</p><h4>How the tower is joined</h4><p>The bonding step is the deepest process moat in the industry, currently a three-way technology bet.<strong> </strong></p><p><strong>SK hynix uses MR-MUF</strong>, mass reflow with molded underfill: dies are placed and the solder joints formed in a batch reflow, then the whole stack is encapsulated in one molded underfill shot, a flow with better warpage control, a <strong>stronger thermal path</strong> through the mold compound, and batch throughput, widely credited as the reason it shipped 12-high first and leads yields (t<em>he underfill material itself is a quiet chokepoint, long supplied under an exclusive arrangement with Namics, per trade reporting</em>). </p><p><strong>Samsung </strong>and <strong>Micron </strong>use TC-NCF, thermo-compression over a pre-laminated non-conductive film: each die is pressed down individually with heat and force, slower and stress-accumulating, but precise at fine pitch. </p><p>The <strong>bridge step is fluxless TCB</strong>, removing flux and its residues by bonding in a reducing atmosphere. The endgame is hybrid bonding: copper pads and dielectric planarized to sub-nanometer roughness, fused face to face with no bumps at all, <strong>pitch capability below 10 micrometers</strong>, thinner stacks, a direct copper thermal path, and lower parasitics. </p><p>It is mandatory somewhere past 16 to 20 layers and brutally hard: Samsung, betting on it most aggressively, was reported in April 2026 to be sampling hybrid-bonded 16-high HBM4 to Nvidia at <strong>yields around 10 percent</strong>, while SK hynix completed a 12-high hybrid-bonding validation and placed its first inline production order while publicly committing to MR-MUF through HBM4E, per <strong>EE Times via TrendForce</strong>. </p><p>And in April 2026 JEDEC was reported to be weighing a roughly 900-micrometer height for HBM4E, which would let incumbent bonding survive another generation and <em>shift hundreds of millions of dollars</em> of equipment orders with one standards vote.</p><h4>The equation that prices it all</h4><p>If each die-plus-bond event succeeds with probability <strong>p</strong>, a stack of <strong>n </strong>yields <strong>p </strong>to the power <strong>n</strong>, and one failure scraps the tower with every good die in it. </p><p>At<strong> 99 percent per layer</strong>, a 12-high yields 89 percent; at 97, 69; at 95, 54. This compounding, mitigated but not repealed by known-good-die testing before stacking, TSV and row repair after, and known-good-stack test at the end (<em>the step driving Advantest&#8217;s memory-test boom</em>), is why HBM commands <strong>5 to 6 times the per-bit price of DDR5 </strong>(<em>industry trackers put HBM3E near $8 to $10 per GB, roughly $300 per 36GB stack, with early HBM4 stacks around $500, per Silicon Analysts estimates</em>), and why TrendForce calculates HBM consumes roughly <strong>three times the wafer area per bi</strong>t of commodity DRAM once die-size trades and stack losses are counted. </p><p>Three suppliers, a decade of bonding chemistry embodied in process recipes, and an exponential that punishes newcomers: that is the moat, stated as math.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lnfr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lnfr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 424w, https://substackcdn.com/image/fetch/$s_!Lnfr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 848w, https://substackcdn.com/image/fetch/$s_!Lnfr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 1272w, https://substackcdn.com/image/fetch/$s_!Lnfr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lnfr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134991,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lnfr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 424w, https://substackcdn.com/image/fetch/$s_!Lnfr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 848w, https://substackcdn.com/image/fetch/$s_!Lnfr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 1272w, https://substackcdn.com/image/fetch/$s_!Lnfr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388d5d12-a438-428f-83a2-fbfe55f09010_1672x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>V. The oligopoly, and the quarter the memory market broke</h2><p>HBM was born unwanted. AMD&#8217;s packaging architects, led by <strong>Bryan Black</strong>, spent the early 2010s convincing anyone who would listen that memory belonged on the package; SK hynix co-developed the first standard, and the<strong> 2015 Fury X shipped it</strong>, 4GB of HBM1 whose capacity ceiling promptly handicapped the card against Nvidia&#8217;s cheaper GDDR5 flagship. </p><p>The pioneer paid the tuition; the fast follower banked the lesson: Nvidia adopted HBM2 on the P100 in 2016 and never looked back, while for most of a decade the<strong> product line survived at SK hynix on conviction</strong> more than profit. </p><p>The reward arrived all at once after ChatGPT. SK hynix was first to HBM3 (effectively sole-sourcing the H100), first to <strong>8- and 12-high HBM3E</strong>, and converted the lead into a position Counterpoint measured at 62 percent revenue share in Q2 2025, against 21 for Micron, which had skipped HBM3 entirely and <em>leapfrogged to HBM3E</em>, and 17 for Samsung, the incumbent giant caught flat. </p><p>We saw <strong>repeated Nvidia qualification failures</strong> on HBM3E thermals and power through 2024, a leadership change, and a recovery visible by Q3 2025 (<em>Counterpoint: back to 35 percent</em>) that culminated in late January 2026 with Nvidia qualification for HBM4 itself and production from February, per Bloomberg-sourced reporting. </p><p>Analyst estimates after Computex put <strong>SK hynix at 60 to 70 percent </strong>of the HBM4 volume allocated to Vera Rubin, Samsung at 25 to 30, and Micron the remainder, and in early June Nvidia and SK hynix signed a multi-year pact to <strong>co-develop AI memory for Rubin and beyond</strong>, the first agreement of its kind, which converts the leader&#8217;s share into contracted durability, per reporting on the deal; Counterpoint credits SK hynix 61 to 64 percent of the overall HBM market through the period. </p><p>Nvidia has also reportedly asked all three for 16-high stacks as early as late 2026.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BO9_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BO9_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 424w, https://substackcdn.com/image/fetch/$s_!BO9_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 848w, https://substackcdn.com/image/fetch/$s_!BO9_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 1272w, https://substackcdn.com/image/fetch/$s_!BO9_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BO9_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79680,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BO9_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 424w, https://substackcdn.com/image/fetch/$s_!BO9_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 848w, https://substackcdn.com/image/fetch/$s_!BO9_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 1272w, https://substackcdn.com/image/fetch/$s_!BO9_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd507b94e-99d4-4d05-8d2d-670469a10f42_1672x893.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then came the quarter that broke the market. </p><p>Because an HBM bit consumes about three times the wafer area of a commodity bit and sells for five times the price, every rational fab starved DDR5 to feed it, with <strong>DDR4 output collapsing toward 20 percent of 2025 levels</strong>; demand met the squeeze, and in Q1 2026, the seasonal trough, global DRAM industry revenue hit $97.1 billion, up 85.3 percent in a single quarter, the <strong>largest in history, per Omdia,</strong> on contract price increases TrendForce recorded at 90 to 95 percent quarter on quarter, the steepest ever, revised up from an already unprecedented 55 to 60.</p><p>The primary-source exhibit is SK hynix&#8217;s Q1 2026 report, and it deserves its numbers stated in full because they are the income-statement proof of everything above: <strong>revenue of 52.5763 trillion won </strong>(<em>about $35.6 billion</em>), the first quarter above 50 trillion in company history, up roughly 60 percent sequentially and 198 percent year over year; operating profit of 37.6103 trillion won (around $25 to 27 billion) at a 72 percent operating margin and a <strong>77 percent net margin</strong>, all-time highs on every line, with one quarter&#8217;s operating profit nearly matching the whole of record fiscal 2025 (47.2 trillion won) and exceeding all of fiscal 2024, per the company&#8217;s release and earnings coverage. </p><p>On the call, management said customer HBM requests already exceed planned capacity for the next three years, <em>guided HBM4E samples for the second half of 2026 with 2027 mass production</em>, and announced <strong>a 19 trillion won </strong>(about $13 billion)<strong> advanced-packaging plant</strong>, with 2026 capex priorities of the M15X ramp, Yongin site preparation, and EUV tooling. </p><p>SK Group&#8217;s chairman went further, telling reporters in March that the global<strong> wafer shortage will likely persist</strong> to 2030 with a shortfall exceeding 20 percent, since capacity takes four to five years to add, per CNBC. </p><p>Micron&#8217;s fiscal first quarter (the November quarter) had already shown the shape: $13.64 billion of revenue, up 57 percent, 56 percent gross margins, demand &#8220;substantially higher&#8221; than supply, followed by its December exit from the consumer memory business entirely. </p><p><strong>Bank of America</strong> frames 2026 as a <strong>supercycle on the order of the 1990s boom</strong>, with DRAM revenue up 51 percent for the year; the three memory makers added roughly $900 billion of combined market value from September, per market reporting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H-uf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H-uf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 424w, https://substackcdn.com/image/fetch/$s_!H-uf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 848w, https://substackcdn.com/image/fetch/$s_!H-uf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 1272w, https://substackcdn.com/image/fetch/$s_!H-uf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H-uf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png" width="1456" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:87609,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201615837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H-uf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 424w, https://substackcdn.com/image/fetch/$s_!H-uf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 848w, https://substackcdn.com/image/fetch/$s_!H-uf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 1272w, https://substackcdn.com/image/fetch/$s_!H-uf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ab0e2e-2322-4f35-a825-07c27337951f_1672x873.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Demand <strong>now reaches upstream</strong> in ways the industry has never seen: in October 2025 OpenAI signed letters of intent with both Samsung and SK hynix under Stargate targeting on the <strong>order of 900,000 DRAM wafer starts per month</strong>, widely characterized as approaching 40 percent of global output, per Reuters. </p><p>Whatever fraction converts, the meaning is the change itself: model companies negotiating two layers down their own supply chain, because they have understood what this report argues. The<em> token supply curve is a wafer allocation.</em></p>
      <p>
          <a href="https://www.thesoftwarefrontier.com/p/how-three-companies-set-the-price">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Vertical and the Loop: valuation, compute, and the Anthropic IPO]]></title><description><![CDATA[Anthropic&#8217;s confidential trillion-dollar IPO, the three-silicon bet underneath it, the physics of a token, and the circular machine that pays for the frontier.]]></description><link>https://www.thesoftwarefrontier.com/p/the-vertical-and-the-loop-valuation</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/the-vertical-and-the-loop-valuation</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Wed, 10 Jun 2026 13:42:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OReR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OReR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OReR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 424w, https://substackcdn.com/image/fetch/$s_!OReR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 848w, https://substackcdn.com/image/fetch/$s_!OReR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!OReR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OReR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png" width="1456" height="754" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:754,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170744,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201004624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OReR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 424w, https://substackcdn.com/image/fetch/$s_!OReR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 848w, https://substackcdn.com/image/fetch/$s_!OReR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!OReR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad172655-a524-421c-9473-baf5db9b44a8_2200x1140.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Reported and estimated figures. Anthropic's S-1 is confidential; none of the below is yet an audited, publicly filed fact.</em></p><div><hr></div><p><strong>A note on the byline.</strong><em> This analysis is written by <strong>The Software Frontier.</strong> We have no access to Anthropic&#8217;s non-public financials, no instruction to flatter the company, and no stake in the outcome. Everything here is drawn from public reporting, third-party regulatory filings, analyst estimates, and published silicon benchmarks, attributed inline. Where the company looks strong we say so. Where the bears have the better argument, we say that too. Treat the byline as a reason for scrutiny, not for trust.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Software Frontier is a reader-supported publication.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Three rockets, one launch window</h2><p>For the first time in the history of American capital markets, three private companies are attempting to go public in a <strong>single year at valuations</strong> above one trillion dollars each. That has never happened once. It is now scheduled to happen three times in roughly one hundred days.</p><p>SpaceX, which by 2026 had combined with xAI into a single entity, filed its <strong>public S-1 on May 20</strong> and is expected to begin trading on June 12, seeking upwards of seventy-five billion dollars, according to Datacenter Dynamics&#8217; reading of the prospectus. </p><p><strong>OpenAI filed</strong> a confidential draft registration on May 22, targeting a fourth-quarter listing that could come as early as September, with Goldman Sachs, Morgan Stanley, and JPMorgan leading, per the Wall Street Journal and CNBC. And on Monday, June 1, Anthropic started its own clock,<strong> confidentially filing an IPO prospectus</strong> with the SEC and confirming it in a public statement. </p><p>Reuters reported back in December that the company had already engaged Wilson Sonsini, the firm that managed Google&#8217;s 2004 IPO, to prepare.</p><p>PitchBook&#8217;s Harrison Rolfes told CNN that two trillion-dollar filings in such a short window represent the largest concentration of pre-IPO capital ever brought to market at once. He was counting two. There are three. </p><p><strong>Wedbush&#8217;s Dan Ives</strong>, who has tracked this complex for years, called the moment an <em>opening of the floodgates</em> for an IPO market that has been largely shut.</p><p>This piece is about the middle rocket. Anthropic is the most interesting of the three not because it is the largest, but because it sits at the exact center of <strong>every structural question</strong> the AI buildout has raised: the quality of AI revenue, the physics and economics of inference, the rivalry between <em>three incompatible silicon stacks</em>, and the circular capital flows that critics compare to the vendor-financing collapse of the dot-com era. To price Anthropic is to price the entire complex.</p><p>There is a complication, and it is the most important sentence in this report. <strong>The filing is confidential.</strong> Under SEC rules for emerging growth companies, the prospectus stays private until roughly fifteen days before a public roadshow. </p><p>Which means that as of this writing, the<strong> most anticipated technology IPO in a generation</strong> is being valued by the market on numbers that no auditor has signed for public release. </p><p>Everything you are about to read about Anthropic&#8217;s financials is reported, estimated, or projected. None of it is yet a filed, audited fact. Hold that thought. We will return repeatedly to why it matters more here than almost anywhere else.</p><div><hr></div><h2>The vertical</h2><p>Start with the revenue curve, because it is the reason any of this is happening, and because it does not look like a curve. <mark>It looks like a wall.</mark></p><p>Anthropic reported roughly <strong>one billion dollars in annualized revenue</strong> at the end of 2024. By the end of 2025 that figure was around nine billion. After closing its Series G in February 2026 it was near fourteen billion. By early April, multiple outlets put the run-rate above thirty billion. </p><p>In May, per CNBC&#8217;s account of the filing, Anthropic disclosed a<strong> run-rate of forty-seven billion dollars</strong>, a figure echoed at roughly forty-five billion by the research firm Sacra.</p><p>Read that sequence again: <mark>one, nine, fourteen, thirty, forty-seven.</mark> The jump from fourteen to forty-seven happened in about four months. There is no precedent for this in enterprise software. </p><p>The closest analogue is<strong> not a software company at all. </strong>It is a commodity in a shortage, which is exactly what frontier inference capacity has become.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZwXF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZwXF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!ZwXF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!ZwXF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!ZwXF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZwXF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-revenue&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-revenue" title="c-revenue" srcset="https://substackcdn.com/image/fetch/$s_!ZwXF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!ZwXF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!ZwXF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!ZwXF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e3a4ba2-3f48-4789-9658-1c48a3c889e3_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The wall.</strong> Run-rate roughly 5x&#8217;d in twelve months and more than 3x&#8217;d in the four months to May. Sources: CNBC, Sacra, The Motley Fool, MEXC syndication, TipRanks. Intermediate points (Aug, Oct 2025) from contemporaneous reporting.</figcaption></figure></div><p>The composition matters more than the level. Roughly eighty percent of revenue comes from enterprises, per TipRanks, almost the inverse of OpenAI&#8217;s consumer-heavy base. Futurum&#8217;s Nick Patience notes that<strong> eight of the Fortune 10</strong> are now paying customers. More than three hundred thousand businesses run Claude. </p><p>The count of customers spending a million dollars or more per year crossed one thousand by April, double the roughly five hundred in February. And one product, <strong>Claude Code</strong>, reached about one billion dollars in annualized revenue within six months of launch, a developer-tool adoption speed that AI Weekly, citing WSJ figures, called a new category benchmark.</p><p>That last fact is<strong> double-edged</strong>, and we will sharpen the second edge later. For now, note the shape: this is not a consumer novelty that might churn. It is a deeply embedded enterprise dependency growing into core workflows. </p><p>That is the <strong>most durable kind of revenue </strong>there is. It is also the kind that invites a backlash when the bill arrives, which is precisely what is now starting to happen.</p><div><hr></div><h2>The margin question, which is really two companies</h2><p>The number everyone quotes is revenue. The number that decides whether Anthropic is worth a trillion dollars is<strong> gross margin</strong>, and on gross margin Anthropic is two entirely different businesses wearing the same name.</p><p>In 2024, Anthropic&#8217;s gross margin was <strong>negative ninety-four percent</strong>, per data compiled by TradingKey. It cost nearly two dollars of compute to deliver one dollar of revenue. By 2025 that had swung to somewhere around forty to fifty percent. </p><p>The company&#8217;s own projection, reported by Sacra and Seeking Alpha, is for gross margin to reach roughly seventy-seven percent by 2028.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bz_K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bz_K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!bz_K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!bz_K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!bz_K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bz_K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-margin&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-margin" title="c-margin" srcset="https://substackcdn.com/image/fetch/$s_!bz_K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!bz_K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!bz_K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!bz_K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae14ac4-d63d-44e8-b7b1-6f499fae5b36_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Two businesses.</strong> A dollar of 45%-margin revenue and a dollar of 77%-margin revenue are not the same asset in any discounted cash flow. The entire valuation thesis rests on which one is emerging. Sources: TradingKey (2024), Sacra and Seeking Alpha (2025, 2028E).</figcaption></figure></div><p>A Substack analysis by <strong>Shanaka Anslem Perera</strong> framed the stakes more precisely than any sell-side note I have read: revenue at forty percent gross margin and revenue at seventy-seven percent gross margin are not the same business with different costs. </p><p><strong>They are different businesses</strong>. The whole valuation rests on the assumption that the second business is the one arriving. The bear case rests on the possibility that it is not.</p><p><em>Why might margins expand so dramatically?</em> The answer is not hand-waving. It is mechanical, it is grounded in the physics of how a token is produced, and it is the strongest single pillar of the bull case. Section VII takes it apart piece by piece. </p><p>But first we have to understand what Anthropic actually runs Claude on, because the margin story and the silicon story are the same story.</p><div><hr></div><h2>The profitability that may not be one</h2><p>In mid-May, the Wall Street Journal reported that Anthropic is on pace to post its first operating profit in the second quarter of 2026: <strong>roughly $10.9 billion in revenue</strong> against an expected operating profit of about $559 million, more than doubling the $4.8 billion booked in Q1.</p><p><strong>AI Weekly&#8217;s summary </strong>of the WSJ figures framed this as the moment Anthropic crosses into covering its own costs, a milestone that, if real, changes the fundraising calculus for the entire frontier sector. Investors could finally model a path to returns rather than an indefinite subsidy.</p><p>The technology critic Ed Zitron argues the milestone is partly an artifact of timing, and the argument deserves engagement rather than dismissal. The mechanism: under the <strong>compute deal Anthropic struck with the xAI unit of SpaceX</strong>, Anthropic pays $1.25 billion per month for the Colossus 1 cluster, a figure that emerged from SpaceX&#8217;s own S-1 and was reported by TechCrunch. </p><p>That is roughly fifteen billion dollars a year. But the deal carries a discounted rate for the first two months while xAI completes its ramp, and those two discounted months fall, conveniently, in exactly the quarter Anthropic is using to claim its first operating profit.</p><p>Zitron&#8217;s point is not that Anthropic is lying. It is that a 559-million-dollar operating profit is a thin margin on a temporarily depressed cost base, and that when the <strong>SpaceX rate steps up </strong>to its full level, the same quarter&#8217;s economics look different. </p><p>Whether you find this damning or merely worth watching depends on your priors. <strong>What is not in dispute</strong> is that the profitability claim and the compute deal are entangled, and that a confidential S-1 means we cannot yet see how the company books the ramp discount. </p><p>This is the first concrete reason the confidentiality matters: the single most important narrative claim, that Anthropic is now profitable, sits on a cost structure we cannot inspect.</p><div><hr></div><h2>The three-silicon bet</h2><p>Now the part that, in the end, actually decides the future: where the compute comes from, what it runs on, and who controls it.</p><p>Anthropic has done something <strong>no other frontier lab has managed</strong>. It trains and serves Claude across three mutually incompatible silicon stacks at once: Amazon&#8217;s Trainium, Google&#8217;s TPU, and Nvidia&#8217;s GPUs (<em>the latter rented, remarkably, from a rival</em>). </p><p>This is <strong>not an accident of procurement</strong>. It is a deliberate hedge against the single greatest risk a frontier lab faces, which is being captive to one supplier&#8217;s roadmap, pricing, and power budget. </p><p>Anthropic CFO Krishna Rao framed the <strong>multi-vendor approach</strong> to CNBC as spreading workloads across vendors to tune for price, performance, and power. Read it as insurance.</p><h3>Amazon and Trainium</h3><p>On April 20 and 21, Amazon and Anthropic announced an expanded partnership that, per <strong>Global Data Center Hub&#8217;s reconstruction</strong>, totals up to thirty-three billion dollars in committed Amazon equity: <em>five billion in fresh equity at a $350 billion pre-money valuation</em>, up to twenty billion more tied to milestones, on top of eight billion deployed from 2023 to 2025. </p><p>In exchange, Anthropic committed to spend more than one hundred billion dollars on AWS over the next decade and to <strong>deploy up to five gigawatts of Trainium capacity</strong>. The engine is Project Rainier, which Anthropic&#8217;s own announcement describes as already running over one million Trainium2 chips. </p><p>The<strong> Indiana campus</strong> alone, per Global Data Center Hub, spans twelve hundred acres across seven buildings and scales toward 2.2 gigawatts at full build-out. </p><p>The commitment spans Trainium2, Trainium3, and the still-unannounced Trainium4, with <strong>Amazon&#8217;s Annapurna Labs </strong>taking design feedback from the lab that stresses the chips hardest.</p><h3>Google and TPUs</h3><p>The <em>Google relationship is older </em>and, in valuation terms, arguably the better bargain. CNBC reported that before the latest deal Google&#8217;s stake exceeded three billion dollars at roughly fourteen percent, built from a <strong>three-hundred-million-dollar 2023 check</strong> for about ten percent plus a two-billion-dollar follow-on. </p><p>In October 2025 the two announced a cloud deal for up to one million TPUs worth tens of billions. Then on April 24, 2026, Google committed up to forty billion dollars more in cash and compute, per TechCrunch and CNBC, expanding to<strong> five gigawatts of TPU capacity</strong> over five years. A Broadcom securities filing put the associated next-generation TPU figure at 3.5 gigawatts. </p><p>The Motley Fool&#8217;s<strong> Billy Duberstein</strong> argued Google is getting a screaming bargain, partly because a guaranteed five-gigawatt anchor tenant de-risks Alphabet&#8217;s own enormous capex. He is probably right, and the reason he is right is the same reason the structure is fragile, which is <strong>the subject</strong> of future discussions.</p><h3>Nvidia, via xAI&#8217;s Colossus</h3><p>This is the strangest leg, and the most revealing. On May 6, at its own Code with Claude developer conference, Anthropic announced it would take essentially all the compute at Colossus 1, the<strong> Memphis supercomputer</strong> built by xAI and now owned by the merged SpaceX entity.</p><p>Per xAI&#8217;s release, Colossus 1 houses over 220,000 Nvidia GPUs spanning H100, H200, and GB200 accelerators, roughly 300 megawatts. The timing was not accidental: with usage of xAI&#8217;s own Grok having dropped, Colossus 1 sat underused, which is what freed its full capacity for Anthropic, per<strong> TechCrunch&#8217;s</strong> reading of the S-1. </p><p>Anthropic&#8217;s chief compute officer Tom Brown said on the record that the company would expand onto <strong>Nvidia GB200 capacity </strong>in the larger Colossus 2 through June, per Axios. TechCrunch later reported, from SpaceX&#8217;s S-1, that Anthropic will pay <strong>$1.25 billion per month through May 2029</strong>, a deal that could bring the Musk entity over forty billion dollars in revenue, with either side able to terminate on ninety days&#8217; notice. </p><p>The arrangement is pointed at consumer capacity, directly improving Claude Pro and Claude Max. The irony is thick enough to cut: Anthropic, the lab founded by OpenAI defectors, is<strong> now renting its consumer compute from Elon Musk</strong>, who wrote on X in February that the company <em>hates Western civilization</em>, per CNBC. Business is business.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N9Xv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N9Xv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!N9Xv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!N9Xv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!N9Xv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N9Xv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-capacity&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-capacity" title="c-capacity" srcset="https://substackcdn.com/image/fetch/$s_!N9Xv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!N9Xv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!N9Xv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!N9Xv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f7241-09e4-4344-8f01-e02513837998_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The hedge, in gigawatts.</strong> Roughly 1.5 to 2 GW is live today; the bars show contracted ceilings. A 1 GW data center costs near $50B, of which about $35B is chips (CNBC). Sources: Anthropic, Amazon, Google, xAI, Broadcom filings, TechCrunch.</figcaption></figure></div><div><hr></div><h2>Chips, racks, and the CUDA moat</h2><p>If you read only one section as an engineer, read this one and the next. The headline question is simple to state and hard to answer: </p><div class="pullquote"><p>can custom silicon actually serve a frontier model, or is Nvidia&#8217;s lead structural? </p></div><p>Anthropic is the live experiment, and the early data is more interesting than either camp admits.</p><p>Start at the chip. <strong>AWS shipped Trainium3</strong> in December 2025 on TSMC&#8217;s 3nm N3P node, the most advanced process in any shipping AI accelerator, per <strong>Tom&#8217;s Hardware</strong> and the spec compilations at IntuitionLabs and Awesome Agents, reaching broad availability in early 2026. </p><p>Each Trainium3 chip delivers about 2.52 petaflops of MXFP8 compute with 144 GB of HBM3e and 4.9 TB/s of memory bandwidth, with eight NeuronCore-v4 engines and a <strong>NeuronLink-v4</strong> interconnect at <strong>2 TB/s. </strong>AWS claims roughly 2x the per-chip compute of Trainium2, rising to about 4.4x at the 144-chip UltraServer level, with 4x better energy efficiency. </p><p><strong>Google&#8217;s TPU v7</strong>, codenamed Ironwood and announced in 2025, delivers about 4.6 petaflops of FP8 per chip with<strong> 192 GB of HBM and 7.37 TB/s</strong> of bandwidth, which analysts at Introl described as on par with Blackwell. </p><p>Nvidia&#8217;s B200, by contrast, delivers <mark>roughly 9 petaflops of FP8 per chip with sparsity</mark> (about 4.5 dense), per Nvidia&#8217;s datasheet. Its headline figure <strong>near 18 to 20 petaflops is an FP4 number</strong>, a lower-precision format, so comparing like for like at FP8 is the only fair reading.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TQUG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TQUG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!TQUG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!TQUG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!TQUG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TQUG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-chipflops&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-chipflops" title="c-chipflops" srcset="https://substackcdn.com/image/fetch/$s_!TQUG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!TQUG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!TQUG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!TQUG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F951e9236-3ac4-411c-a7fa-acc549e85145_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>At the chip level Nvidia leads, but by less than the marketing implies.</strong> At comparable FP8 precision, a single B200 (~9 PF, with sparsity) is roughly 3.6x a Trainium3 die (2.52 PF) and under 2x a TPU v7 (4.61 PF); at dense FP8 the B200 (~4.5 PF) barely edges the TPU. The often-quoted 8x gap compares B200 FP4 against Trainium3 FP8, which is not like for like. Sources: AWS, Google, Nvidia datasheet via Civo, CudoCompute, Tom&#8217;s Hardware.</figcaption></figure></div><p>Now move up one level, to the rack, where AI is actually deployed. AWS packs 144 Trainium3 chips into a liquid-cooled Trn3 Gen2 UltraServer that delivers <strong>roughly 362 petaflops of FP8, 20.7 TB of HBM3e</strong>, and an aggregate 705.6 TB/s of memory bandwidth. </p><p>Per Tom&#8217;s Hardware and Oplexa&#8217;s analysis, that puts the <strong>UltraServer </strong>essentially level with Nvidia&#8217;s flagship GB300 NVL72 at rack scale, at an estimated fifty percent lower cost per workload and roughly forty percent better energy efficiency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jqqu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jqqu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!jqqu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!jqqu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!jqqu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jqqu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-rack&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-rack" title="c-rack" srcset="https://substackcdn.com/image/fetch/$s_!jqqu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!jqqu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!jqqu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!jqqu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F924d1724-a69c-4512-9989-b328f52a38f6_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>At the rack level, it is a tie, at roughly half the cost per workload.</strong> Amazon closes a roughly 3 to 4x per-chip FP8 gap with integration and scale-up fabric. This is the entire competitive argument for custom silicon, and Anthropic is the proof of concept. Source: Oplexa, Tom&#8217;s Hardware.</figcaption></figure></div><p><strong>This is the crux</strong> that most coverage misses. The custom-silicon competition is not happening at the transistor. It is happening at the system and at the dollar. </p><p><strong>Amazon and Google </strong>close a brutal single-chip deficit through dense integration, liquid cooling, and proprietary scale-up fabrics: Nvidia calls its fabric NVLink, Google calls its ICI, <strong>AWS calls its NeuronLink</strong>. Once you are buying racks rather than chips, and once you weight by cost and power rather than raw flops, the gap collapses.</p><p>Memory is the other half of the story, and it is the half that governs inference. As we will show in detail, modern serving is <strong>memory-bandwidth-bound</strong>, not compute-bound, which is why the per-token cost curve is so sensitive to HBM. </p><p>Here the three are closer than the compute numbers suggest, and Nvidia&#8217;s lead is narrower.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WGHs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WGHs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!WGHs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!WGHs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!WGHs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WGHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-bandwidth&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-bandwidth" title="c-bandwidth" srcset="https://substackcdn.com/image/fetch/$s_!WGHs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!WGHs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!WGHs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!WGHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3eeb355-320b-468b-bcab-18c892eb5da9_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>On the metric that decides inference economics, the field is tight.</strong> HBM capacity per chip runs 144 GB (Trainium3), 192 GB (TPU v7), and 288 GB (Nvidia B300). For memory-bound serving, this parity is why non-Nvidia inference is viable. Source: vendor specs via Tom&#8217;s Hardware, IntuitionLabs.</figcaption></figure></div><h3>Inside the die: systolic arrays versus SIMT</h3><p>The reason a custom accelerator can rival a GPU it trails on paper comes down to dataflow. </p><p>Each Trainium3 chip carries eight NeuronCore-v4 engines, and each engine is<strong> built around systolic arrays</strong>: a 128 by 128 grid for BF16 and a wider 512 by 128 grid for MXFP8, backed by 32 MiB of on-core SRAM. A systolic array is the opposite of a general-purpose processor. </p><p>Weights are loaded into the grid and held stationary while activations pulse through it, so a<strong> value read once from SRAM </strong>is reused across an entire row or column of multiply-accumulate units before it retires. </p><p>On the <strong>dense matrix multiplies</strong> that dominate a transformer, that weight-stationary dataflow keeps the multiply-accumulate units near full occupancy while spending almost nothing on instruction fetch, register-file traffic, or <strong>cache coherence</strong>. Google&#8217;s TPU is the same idea at a different size: one very large matrix-multiply unit fed by a compiler that schedules the entire computation ahead of time.</p><p>Nvidia&#8217;s Blackwell takes the other path. Its streaming multiprocessors are <strong>SIMT machines</strong>: thousands of threads grouped into warps, with tensor cores doing the matrix math and a deep hierarchy of schedulers, register files, and caches feeding them. </p><p>That flexibility is the point. A <strong>GPU runs irregular control flow</strong>, dynamic shapes, sparsity, and an enormous library surface, on hardware that was never specialized to one operator. The cost of that generality is silicon and power spent on everything that is not the multiply. For the long tail of workloads, the flexibility earns its keep. For a transformer decode loop, much of it sits idle.</p><p>This is the precise reason the <strong>rack-level parity</strong> in the charts above is real rather than a marketing artifact. A frontier lab runs essentially one workload shape, the <strong>transformer</strong>, and writes its own kernels, so it does not need most of what a GPU spends transistors on, and it can drive a systolic array to a utilization a general user could never reach. </p><p>The cost it pays is the programming model. <strong>Fifteen years of CUDA</strong>, of PTX and SASS-level tuning, of cuDNN and CUTLASS and a developer base in the millions, <strong>has no equivalent on the other side</strong>. AWS answers with the Neuron SDK and its NKI kernel interface plus JAX and PyTorch support; Google answers with <strong>XLA</strong>, JAX, and Pallas. </p><p>A team with kernel engineers can reach high utilization on any of the three. An enterprise that only wants a <strong>model behind an API cannot</strong>, which is why the moat protects Nvidia at the bottom of the market and erodes at the very top, where Anthropic operates.</p><p>The last equalizer is the fabric. A single chip never serves a frontier model alone, so what matters is how fast many chips behave as one. Nvidia&#8217;s NVLink 5 moves about 1.8 terabytes per second per GPU through an <strong>NVSwitch fabric;</strong> AWS NeuronLink-v4 moves about 2 terabytes per second per chip; Google&#8217;s ICI wires its pods into a three-dimensional torus. </p><p>Tensor parallelism forces every chip to exchange a slice of activations on every layer, and expert parallelism in a<strong> mixture-of-experts model </strong>adds an all-to-all shuffle of tokens to their chosen experts, so scale-up bandwidth, not raw per-chip flops, is what lets 144 Trainium3 act like one giant accelerator with<strong> 706 terabytes per second </strong>of aggregate memory bandwidth. The per-chip FLOPS gap is what the slides show. The scale-up fabric is what the workload feels.</p><p><em>So why has nobody else pulled this off? </em>Because the real moat was never the silicon. It is the software. Nvidia&#8217;s CUDA is fifteen years of libraries, kernels, compilers, and developer muscle memory. </p><p>AWS counters with the Neuron SDK and JAX and <strong>PyTorch support;</strong> Google has its own mature stack. For the long tail of enterprises, porting off CUDA is a non-starter: the engineering cost dwarfs the hardware savings. </p><p>But a frontier lab is the one customer that can pay that cost, because it writes its own kernels, owns its own stack, and has the systems talent to make a<strong> non-CUDA chip productive</strong>. </p><p>That is <strong>precisely why Anthropic is the perfect partner</strong> to validate custom silicon, and why Amazon and Google paid tens of billions in equity to make it their anchor tenant. Anthropic reportedly fed design input directly into Trainium3, per Awesome Agents. </p><p>The lab is not just renting the chips. It is co-designing the thing meant to dethrone the incumbent.</p><p>One quiet beneficiary deserves a name: Broadcom. It co-designs Google&#8217;s TPU, supplies the connectivity silicon that stitches these racks together, and, per The Motley Fool citing Broadcom&#8217;s own disclosures, <strong>booked roughly a ten-billion-dollar TPU order </strong>plus an additional eleven billion in hardware tied to Anthropic. </p><p>In a gold rush, the <strong>firm selling the most shovels</strong> to the most miners is often the cleaner trade. Hold that for the market section.</p><p>Caveat where it is due. Nvidia&#8217;s roadmap does not stand still: <strong>B200 and GB200 </strong>are reportedly sold out through mid-2026 against a backlog near 3.6 million units, per IntuitionLabs, and Vera Rubin, due in the second half of 2026 with HBM4 and a <strong>Rubin NVL144 rack</strong> at 3.6 exaflops of dense FP4, extends the lead at the top. </p><p>The near-term threat to Nvidia is not revenue. Demand still dwarfs supply. The threat is the long-run margin structure that depends on hyperscalers having no realistic alternative. Anthropic&#8217;s <strong>three-silicon bet</strong> is the clearest signal yet that the alternative is becoming real.</p><div><hr></div><h2>The cost of a token</h2><p>The bull case for Anthropic&#8217;s margin is a claim about physics and software, <strong>not accounting</strong>. To judge it you have to understand how a single token is actually produced, and why the cost of producing it is collapsing roughly tenfold a year. </p><p>This is the <strong>section the financial press cannot write</strong> and your readers care about most.</p><h3>Two phases, one bottleneck</h3><p>Serving a language model has two phases with opposite cost structures. <strong>Prefill</strong> ingests the prompt: every input token is processed in parallel, the arithmetic is dense, and the accelerator runs near its compute ceiling. Prefill is compute-bound, and it is cheap per token because parallelism is high. </p><p><strong>Decode</strong> generates the answer one token at a time, autoregressively, and here is the trap: to produce each new token, the hardware must stream the model&#8217;s entire active weight set out of high-bandwidth memory. </p><p><mark>Decode is therefore </mark><strong><mark>memory-bandwidth-bound</mark></strong><mark>, not compute-bound.</mark> As the Inworld and Spheron benchmark teardowns put it, reading model weights during decode is the primary bottleneck for autoregressive generation. </p><p>This single fact is why the <strong>memory-bandwidth chart</strong> in the previous section matters more than the flops chart, and why a Trainium3 or a TPU v7, which trail Nvidia badly on raw flops but sit within striking distance on bandwidth, can serve inference competitively. <mark>The frontier is not compute-starved. It is bandwidth-starved.</mark></p><p>Two structures sit on top of this. The <strong>KV cache</strong> stores the attention keys and values for every prior token, so it grows with context length and with batch size, and it competes for the same <strong>scarce HBM capacity </strong>and bandwidth; long-context serving is expensive precisely because, as CloudRift&#8217;s benchmarks note, it stresses KV-cache traffic. </p><p>And <strong>batching</strong> is the lever that makes serving economic at all: by processing many requests together, each expensive weight-read from HBM is amortized across many sequences, so throughput, and therefore cost per token, depends enormously on how full the batch is. </p><p><strong>GMI Cloud&#8217;s teardown</strong> makes the point concrete: an H100 running Llama 70B in FP8 generates roughly two to three thousand tokens per second at batch 32, about $0.19 to $0.29 per million output tokens, and the same GPU at fifty percent utilization sees its effective cost per token roughly double. Utilization is not a footnote. It is half the unit economics.</p><h3>Three levers that crush cost</h3><p>An academic study circulating on arXiv this year, modeling what it calls a tiered <strong>Super-Moore effect</strong>, decomposes inference cost into hardware, labor, and a technology index that captures architectural innovation. Its key finding is that the technology index has improved far faster than the hardware alone. Three levers do most of the work.</p><p><strong>Quantization.</strong> Moving the numerical format of the weights from FP16 to FP8 to FP4 or INT4 halves the bytes per parameter at each step. Because decode is bandwidth-bound, fewer bytes per weight means more tokens per second on the same silicon, almost linearly. </p><p>Spheron measures FP8 cutting effective cost per token by roughly half on H100 and H200 by <strong>doubling throughput with no extra GPUs</strong>; Blackwell&#8217;s FP4 tensor cores push it further still. Quantization is close to a free lunch until model quality degrades, and the frontier labs have become expert at quantizing right up to that line.</p><p><strong>Mixture of experts.</strong> A dense model activates all its parameters for every token. A mixture-of-experts model routes each token through only a small subset. </p><p>The <strong>arXiv study</strong> quantifies the canonical example: DeepSeek&#8217;s architecture carries <em>671 billion total parameters but activates only 37 billion per token</em>, <mark>an eighteen-fold reduction in per-token compute</mark> with no proportionate quality loss, and it operates independently of any hardware trend. </p><p>MoE is the <strong>single largest architectural reason </strong>a frontier-class answer is no longer a frontier-class expense.</p><p><strong>Algorithmic serving.</strong> FlashAttention removed the memory bottleneck inside the attention kernel; speculative decoding, which drafts several tokens with a small model and verifies them with the large one, cuts latency two to three times, per Introl; continuous batching and paged KV caches keep utilization high. <strong>None of these require new chips</strong>. They are software, and software ships continuously.</p><p>The hardware levers compound on top: Blackwell&#8217;s B200 carries 2.4 times the <strong>memory bandwidth of an H100</strong> and enough capacity (192 GB) to hold models up to roughly 96 billion parameters in FP16, or 192 billion in FP8, on a single GPU, which removes tensor-parallel communication overhead entirely, per Inworld. </p><p>Fewer cross-GPU hops means lower latency and lower cost at once.</p><h3>The arithmetic of serving</h3><p>Make the bottleneck quantitative, because the precise numbers are what justify the margin. During decode, producing one token requires reading every active parameter out of<strong> high-bandwidth memory exactly once</strong>, so the single-stream token rate has a hard ceiling set by bandwidth, not by compute:</p><blockquote><p><em>tokens/sec &#8776; HBM bandwidth &#247; ( bytes-per-parameter &#215; active parameters )</em></p></blockquote><p>The numbers are unforgiving. A dense 70-billion-parameter model in FP8 must stream <strong>70 GB per token</strong>; an H100 at 3.35 TB/s tops out near 48 tokens per second on a single stream, a B200 at 8 TB/s near 114. </p><p>A <strong>405-billion-parameter model</strong> falls into the single digits. This is why latency-sensitive, single-user decoding feels slow on the largest dense models no matter how many teraflops the chip advertises: those teraflops are not the binding constraint.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bxlB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bxlB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!bxlB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!bxlB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!bxlB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bxlB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/573de779-12c2-4405-a6bb-ede56132546f_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-decode&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-decode" title="c-decode" srcset="https://substackcdn.com/image/fetch/$s_!bxlB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!bxlB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!bxlB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!bxlB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F573de779-12c2-4405-a6bb-ede56132546f_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The latency floor.</strong> Single-stream decode is bounded by HBM bandwidth divided by the bytes streamed per token, so the largest dense models emit only single-digit to low-hundreds of tokens per second per accelerator before batching. Batching raises aggregate throughput; it does not raise this single-stream ceiling. H100 at 3.35 TB/s, B200 at 8 TB/s, FP8.</figcaption></figure></div><p>The escape is batching. Because every sequence in a batch reuses the same weight read, serving <strong>256 requests together</strong> multiplies aggregate throughput by roughly 256 with no additional weight traffic, until the KV cache or the compute ceiling intervenes. </p><p>Plotted on a roofline, decode lives far down the memory-bound slope at an arithmetic intensity near one, while prefill and training sit against the compute ceiling. </p><p>The ridge point, where a workload stops being memory-bound and becomes compute-bound, falls <strong>near 560 to 590 FLOP per byte</strong> on both H100 and B200, and decode runs one to two orders of magnitude below it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0ue5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0ue5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 424w, https://substackcdn.com/image/fetch/$s_!0ue5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 848w, https://substackcdn.com/image/fetch/$s_!0ue5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!0ue5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0ue5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png" width="1456" height="847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:847,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-roofline&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-roofline" title="c-roofline" srcset="https://substackcdn.com/image/fetch/$s_!0ue5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 424w, https://substackcdn.com/image/fetch/$s_!0ue5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 848w, https://substackcdn.com/image/fetch/$s_!0ue5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!0ue5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc22a07f-35bc-4b43-8942-192345d9b0ed_1720x1000.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Why decode leaves FLOPs on the table.</strong> Below the ridge point, throughput is capped by bandwidth, so adding compute does nothing; only more bandwidth or fewer bytes per token help. Prefill and training sit against the compute ceiling, where FLOPs matter. Dense FP8 peak: H100 ~1.98 PF, B200 ~4.5 PF.</figcaption></figure></div><p>This <strong>reframes the right efficiency metric</strong>, a point your readers will appreciate more than any valuation table. For prefill and training, the number that matters is model FLOPs utilization, MFU, typically 35 to 50 percent on a well-tuned cluster. </p><p>For decode, <strong>FLOPs utilization is nearly meaningless </strong>because the tensor cores are starved of data; the metric that matters is memory-bandwidth utilization, MBU, and the engineering goal is to keep HBM busy, not the math units. Almost every serving optimization that matters, from paged attention to continuous batching, is at bottom a scheme to raise MBU.</p><p><strong>Quantization attacks the bytes.</strong> Halving the bytes per parameter halves the bandwidth bill per token and so roughly doubles decode throughput. The frontier has marched down the precision ladder accordingly: FP16 and BF16 at two bytes, <strong>FP8 </strong>at one, <strong>FP4 </strong>and INT4 at half a byte, with the KV cache itself increasingly stored in FP8 to stretch context. </p><p>Blackwell&#8217;s tensor cores are built for FP4; Trainium3&#8217;s wider array is built for <strong>MXFP8 microscaling</strong>. The binding constraint is quality: too-aggressive quantization raises perplexity and degrades reasoning, so labs quantize weights and cache hard while protecting the few numerically sensitive layers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!agXi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!agXi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!agXi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!agXi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!agXi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!agXi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-bytesparam&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-bytesparam" title="c-bytesparam" srcset="https://substackcdn.com/image/fetch/$s_!agXi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!agXi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!agXi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!agXi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4b780fa-8d09-4960-8c2b-1aad0975dbbb_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Precision is bandwidth.</strong> Each step down the ladder halves the bytes streamed per token, and because decode is bandwidth-bound, roughly doubles throughput. The frontier now runs weights in FP8 or FP4 and stores the KV cache in FP8, quantizing right up to the point where quality breaks.</figcaption></figure></div><p><strong>The KV cache is the tax that limits batching.</strong> Attention must keep the key and value vectors of every prior token, and that cache grows linearly with both context length and batch size, competing with the weights for the same HBM. </p><p>For a<strong> 70-billion-parameter model</strong> with grouped-query attention, the cache costs roughly 0.33 MB per token, so a single million-token context consumes more than 340 GB, beyond what a B200 holds. The cache, not the weights, is usually what caps how large a batch can run, and batch size is what sets cost per token, so KV-cache management is the hinge of serving economics. </p><p><strong>Grouped-query </strong>and <strong>multi-query attention</strong> shrink it by sharing key and value heads; paged attention stops it from fragmenting memory; FP8 storage halves it again.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NvlE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NvlE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!NvlE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!NvlE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!NvlE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NvlE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-kv&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-kv" title="c-kv" srcset="https://substackcdn.com/image/fetch/$s_!NvlE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!NvlE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!NvlE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!NvlE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bdf132a-f5af-4f41-aa4c-9b26992d5b3d_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The cache outgrows the chip.</strong> For a 70B-class GQA model the KV cache costs ~0.33 MB per token and grows linearly with context, overtaking a B200&#8217;s entire 192 GB before a single million-token sequence. This, more than the weights, is what caps batch size, and batch size sets cost per token.</figcaption></figure></div><p><strong>Speculative decoding attacks the sequential dependency.</strong> A small draft model proposes several tokens and the large model verifies them in one forward pass, accepting the longest correct prefix. </p><p>With a per-token draft acceptance probability near 0.7 and four drafted tokens, the expected number confirmed per verification step is about ( 1 minus 0.7 to the fifth ) divided by 0.3, near 2.8, a two to three times speedup before draft overhead. </p><p>The large model still does the same total work per accepted token; what changes is that the work happens in parallel instead of one token at a time, which is exactly what a memory-bound loop needs.</p><p><strong>Mixture of experts attacks the parameter count.</strong> A dense model pays for all its parameters on every token; a mixture-of-experts model routes each token to a small subset, so per-token compute scales with active parameters, not total. DeepSeek&#8217;s architecture carries 671 billion parameters but activates 37 billion per token, an 18-fold cut in both the FLOPs and, decisively, the bytes streamed during decode. </p><p>The catch is twofold: all 671 billion parameters must still sit in HBM, a capacity tax that demands many chips, and routing tokens to experts requires an all-to-all step that leans on the scale-up fabric from the previous section. </p><p>MoE is the single largest reason a frontier-class answer is no longer a frontier-class expense, and it is why the dense decode ceiling above understates a well-built model: at 37 billion active parameters that same H100 serves roughly 90 tokens per second single-stream rather than five.</p><p><strong>Stack these together</strong>, quantization halving bytes, mixture-of-experts cutting active parameters by an order of magnitude, speculative decoding parallelizing the sequence, batching <strong>amortizing every weight read</strong>, and cheaper bandwidth each hardware generation on top, and the roughly tenfold annual fall in the cost of a token stops looking like magic and starts looking like arithmetic. </p><p>That is<strong> the engine underneath</strong> the margin bridge that follows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JS1s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JS1s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!JS1s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!JS1s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!JS1s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JS1s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-costdecline&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-costdecline" title="c-costdecline" srcset="https://substackcdn.com/image/fetch/$s_!JS1s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!JS1s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!JS1s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!JS1s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40b9f016-945d-4026-9806-d81d05f0f204_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Roughly 10x a year, faster than PC compute or dot-com bandwidth ever fell (Introl).</strong> GPT-4-class output dropped from about $20 per million tokens in late 2022 to about $0.40 by late 2025. Endpoints documented (Introl); intermediate points trace the stated trend. Economy-tier quality fell about 600x since 2020, from the $60 GPT-3 API to roughly $0.10 today (arXiv).</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rP7c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rP7c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!rP7c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!rP7c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!rP7c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rP7c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-costchip&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-costchip" title="c-costchip" srcset="https://substackcdn.com/image/fetch/$s_!rP7c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!rP7c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!rP7c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!rP7c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155bf55b-95b0-48b9-b16c-80c195aba771_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>A generational chip cut inference cost roughly 7x.</strong> Inworld measures about $0.02 per million tokens on B200 versus about $0.14 on H100, because throughput gains outpace the rental premium. Other teardowns put H100 frontier serving at $0.19 to $0.29 fully utilized, doubling at half utilization (GMI). Figures are config-dependent; treat as directional.</figcaption></figure></div><h3>What it costs Anthropic to make a token</h3><p>We can now build the cost side from the metal up. The exercise is illustrative, the assumptions are stated plainly, and the point is the order of magnitude, not a false-precision number.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rocn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rocn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 424w, https://substackcdn.com/image/fetch/$s_!rocn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 848w, https://substackcdn.com/image/fetch/$s_!rocn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 1272w, https://substackcdn.com/image/fetch/$s_!rocn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rocn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png" width="1456" height="750" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:750,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:258471,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201004624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rocn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 424w, https://substackcdn.com/image/fetch/$s_!rocn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 848w, https://substackcdn.com/image/fetch/$s_!rocn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 1272w, https://substackcdn.com/image/fetch/$s_!rocn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1540f0fa-42db-4708-bee7-7643480c36b8_2470x1273.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now the other side of the ledger. </p><p>We do not know Anthropic&#8217;s blended <strong>realized price per token</strong>, because the filing is confidential, and that is the honest limit of this analysis. </p><p>What we do know: frontier output has historically listed in the <strong>five-to-fifteen-dollar range per million tokens</strong>, and Anthropic&#8217;s most capable model, the withheld Mythos preview, was priced at twenty-five dollars per million input tokens and one hundred twenty-five dollars per million output, per <strong>Sacra </strong>(<em>a single-source figure, indicative rather than confirmed</em>). </p><p>Even after a generous markup for the true cost of a genuine frontier model over a benchmark mid-size one, the gross spread between a cost-to-serve measured in cents and a realized price measured in dollars is wide. </p><p>That <strong>spread is the gross margin</strong>. And because the cost side falls about tenfold a year while realized prices fall more slowly, the spread widens with time. This is the physical mechanism behind the projected march from forty-five to seventy-seven percent.</p><p>Nvidia, naturally, has quantified the same loop from the supplier&#8217;s side. In its InferenceMax v1 results, the company claims a <strong>single GB200 NVL72 </strong>turns a five-million-dollar investment into roughly seventy-five million dollars of <strong>DeepSeek-R1 token revenue</strong>, a fifteen-fold return, what it calls AI-factory economics. </p><p>Treat the figure as a vendor benchmark on an idealized model, but the direction is the entire bull thesis in one number: at current token prices, a frontier accelerator generates a multiple of its cost in sellable output.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lK1C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lK1C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!lK1C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!lK1C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!lK1C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lK1C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-marginbridge&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-marginbridge" title="c-marginbridge" srcset="https://substackcdn.com/image/fetch/$s_!lK1C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!lK1C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!lK1C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!lK1C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F844b3c34-0da0-413b-8688-82d9037758f8_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>How -94% becomes +77%.</strong> Fixed-cost leverage (revenue scaling against a roughly fixed capacity base, per SaaStr) does the heavy lifting; token deflation (quantization, MoE, cheaper silicon) and a mix shift toward high-value enterprise and Claude Code finish it. Step sizes are an illustrative attribution to named mechanisms, not audited figures; the 2024, 2025, and 2028E levels are the reported and projected anchors.</figcaption></figure></div><p><strong>The technical bottom line</strong></p><p>The cost <strong>half of Anthropic&#8217;s margin equation</strong> is governed by mechanisms we can see and that compound predictably: <em>quantization, mixture-of-experts routing, algorithmic serving gains, and cheaper bandwidth per token</em>, together delivering roughly an order of magnitude of cost reduction per year. That is why a 77% gross margin is physically plausible rather than fantastical.</p><p>The risk lives on the price half, which we cannot see. If open-weight competition (<em>DeepSeek, Llama</em>) and rival labs compress realized prices as fast as cost falls, the spread does not widen and the margin thesis stalls. </p><p><mark>The bull is betting cost falls faster than price. </mark></p><p><mark>The bear is betting price falls to meet cost.</mark> The <strong>confidential S-1</strong> hides exactly the number, realized revenue per token, that would settle it.</p><div><hr></div><h2>The infinite loop</h2><p>Look again at the last two columns of the capital-and-compute table. <strong>Amazon </strong>is investing up to <strong>thirty-three billion into Anthropic</strong>; Anthropic is committing to spend over one hundred billion with Amazon. </p><p><strong>Google </strong>is investing up to <em>forty billion</em>; Anthropic is spending tens of billions with Google. The capital flows out as equity and comes back as revenue.</p><p><strong>CNBC </strong>said it plainly in its coverage of the Google deal: much of the investment will return in the form of revenue. This is the circular-financing question, and it is the single most important structural issue hanging over all three IPOs. </p><p>It is not unique to Anthropic. It is basically the operating system of the entire cycle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_SP9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_SP9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 424w, https://substackcdn.com/image/fetch/$s_!_SP9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 848w, https://substackcdn.com/image/fetch/$s_!_SP9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!_SP9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_SP9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-flow&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-flow" title="c-flow" srcset="https://substackcdn.com/image/fetch/$s_!_SP9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 424w, https://substackcdn.com/image/fetch/$s_!_SP9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 848w, https://substackcdn.com/image/fetch/$s_!_SP9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!_SP9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a85398-8873-46aa-9577-856e877e8f18_1800x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The closed loop.</strong> The same firms that supply the silicon and the cloud also own the equity. Capital invested as equity returns as committed revenue, which is then reported as growth. Figures are deal maxima, not all drawn. Sources: Global Data Center Hub, TechCrunch, CNBC, Reuters.</figcaption></figure></div><p>The canonical example is on the <strong>OpenAI side</strong>. In September 2025 Nvidia announced it would invest up to one hundred billion dollars in OpenAI to fund a data center buildout equipped with, naturally, Nvidia chips. </p><p><strong>Bernstein&#8217;s Stacy Rasgon </strong>wrote, per Business Standard, that the move would <em>clearly fuel circular concerns.</em> By March 2026, per BlockEden&#8217;s account, Jensen Huang was telling investors that thirty billion might be the last such investment and that the full hundred billion was not in the cards.</p><p>Nvidia also committed up to ten billion to Anthropic, which <strong>CFO Colette Kress</strong> noted could further expand the company&#8217;s bookings, a sentence that contains the whole critique in miniature: the investment expands the bookings of the company making the investment.</p><p>The <strong>scale of the web</strong> is staggering. BlockEden tallied OpenAI&#8217;s infrastructure commitments at roughly $1.15 trillion across seven vendors between 2025 and 2035.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!glRV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!glRV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 424w, https://substackcdn.com/image/fetch/$s_!glRV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 848w, https://substackcdn.com/image/fetch/$s_!glRV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 1272w, https://substackcdn.com/image/fetch/$s_!glRV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!glRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png" width="1456" height="830" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:830,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-vendorweb&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-vendorweb" title="c-vendorweb" srcset="https://substackcdn.com/image/fetch/$s_!glRV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 424w, https://substackcdn.com/image/fetch/$s_!glRV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 848w, https://substackcdn.com/image/fetch/$s_!glRV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 1272w, https://substackcdn.com/image/fetch/$s_!glRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7a59a9-addd-40df-873d-4b5145d51825_1720x980.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>One company, $1.15 trillion in promises.</strong> Several of these vendors are also OpenAI investors; AMD reportedly handed OpenAI 10% equity warrants as a customer. The capital and the contracts run in a closed circle. Source: BlockEden compilation of public disclosures.</figcaption></figure></div><p>The defenders are not stupid, and their argument deserves a fair hearing. </p><p><strong>Dario Amodei</strong>, at the <em>New York Times DealBook Summit</em> in December, argued there is nothing inappropriate in principle about a party with capital and a chip interest funding a party with revenue confidence but no cash on hand. </p><p>That is a coherent description of ordinary project finance. But the historical rhyme is hard to ignore, and Bloomberg drew it explicitly: during the<strong> late-1990s internet boom</strong>, equipment makers fueled the fiber buildout with vendor financing, and when demand failed to arrive on schedule, the roundtripping that had inflated the appearance of demand amplified the collapse. </p><p>The mechanism that makes the boom look bigger is the same one that makes the bust deeper. Sequoia&#8217;s David Cahn has quantified the implied shortfall: by his framework, the <strong>AI complex</strong> needs roughly six hundred billion dollars in annual revenue to justify the capex being deployed, and the gap is widening, not closing.</p><blockquote><p><em>&#8220;In this new world of AI, compute is revenues.&#8221;</em></p></blockquote><p><strong>Jensen Huang</strong> &#183; Nvidia CEO, on the Q4 FY2026 earnings call, reframing the entire spending debate (Fortune, Benzinga)</p><p>That single line is the keystone of the bull architecture, and section VII gave it a number: at current token prices a frontier accelerator throws off a multiple of its cost in sellable output. </p><p>Huang&#8217;s claim is that<strong> capital expenditure</strong> converts into compute, compute into tokens, and tokens directly into revenue, so the spending is self-justifying. </p><p>Nvidia&#8217;s own results give the argument force: <strong>record quarterly revenue</strong> of $68.1 billion, up roughly 73 percent year over year, with $78 billion guided for the next quarter, and Kress telling investors total AI infrastructure investment could reach three to four trillion dollars annually by 2029 or 2030. </p><p>For Anthropic specifically, the loop lands on one phrase, revenue quality. When eighty percent of revenue is enterprise and a meaningful share of capital comes from the same<strong> hyperscalers </strong>whose clouds Anthropic is committing to, an investor is entitled to ask how much of the forty-seven-billion run-rate is organic demand and how much is the visible end of a closed capital loop. </p><p><em>Nobody outside the company knows.</em> The filing is confidential. That is the second reason confidentiality matters more here than usual.</p><div><hr></div><h2>How do you price a wall?</h2><p>Valuation is where the rigor either holds or collapses, so let us be careful, bring the <strong>public-market </strong>context the private headlines leave out, and do the one thing most coverage skips: put the multiple next to its peers.</p><p>Anthropic closed its <strong>Series G</strong> on February 12, 2026: thirty billion dollars raised at a $380 billion post-money valuation, which Perera calculated as roughly twenty-seven times annualized revenue. </p><p>By the April tender offer, the reference valuation was $350 billion, at which <em>The Motley Fool</em> noted the multiple had compressed to under twelve times the then-thirty-billion run-rate, simply because revenue had nearly tripled while the valuation held flat. </p><p>Then, per <strong>Let&#8217;s Data Science</strong> and <strong>CNN</strong>, Anthropic raised sixty-five billion dollars in May at a $965 billion valuation, surpassing OpenAI&#8217;s $852 billion mark for the first time. </p><p>The IPO target is above one trillion. Reuters notes the company was valued at just $183 billion as recently as last November.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G0wH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G0wH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!G0wH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!G0wH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!G0wH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G0wH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-valuation&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-valuation" title="c-valuation" srcset="https://substackcdn.com/image/fetch/$s_!G0wH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!G0wH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!G0wH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!G0wH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29d6d9c-6df7-4492-ae42-955d84f42a23_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>5x in six months.</strong> $183B to a trillion-plus target between November and the IPO. The multiple is not the story; the denominator is moving too fast for any multiple to stay meaningful. Sources: Reuters, Perera, Global Data Center Hub, CNN, Let&#8217;s Data Science.</figcaption></figure></div><h3>The comp that reframes the question</h3><p>A trillion dollars sounds insane until you place it beside what the public market already pays for AI growth. </p><p>At its IPO target, Anthropic trades near twenty-one times its <strong>forty-seven-billion run-rate</strong>, and near fourteen times its projected seventy-billion 2028 revenue. Those are not the highest multiples in the AI complex. They are far from it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dwiN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dwiN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!dwiN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!dwiN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!dwiN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dwiN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-comps&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-comps" title="c-comps" srcset="https://substackcdn.com/image/fetch/$s_!dwiN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!dwiN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!dwiN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!dwiN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8887fcb0-ea3e-4552-89b5-f6231bdfde36_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Anthropic&#8217;s multiple is mid-pack, despite the fastest growth.</strong> Palantir trades near 55x revenue at roughly 70 to 85 percent growth; Databricks near 25x at 65 percent. Anthropic on run-rate sits near 21x while growing on the order of 1,000 percent year over year, and near 14x on 2028E. Multiples for Microsoft, Alphabet, and Amazon are approximate and vary daily. Databricks and Anthropic are private marks. Sources: multiples.vc, heygotrade, SaaStr (PLTR, NVDA, Databricks); company valuations for the Anthropic bars.</figcaption></figure></div><p>That is the reframe a careful analyst owes the reader. On a pure revenue multiple, Anthropic at a trillion dollars is <strong><mark>cheaper than Palantir</mark></strong><mark> and cheaper than Databricks, while growing many times faster than either.</mark> The naive objection, the multiple is absurd, does not survive contact with the comp set. </p><p>The serious objections are about durability and quality, and there are three honest frames.</p><p><strong>The bull frame is forward margin.</strong> If you believe the seventy-seven-percent gross margin of section VII arrives, and the company&#8217;s projection of roughly seventy billion in revenue and seventeen billion in cash flow by 2028 (Sacra), then a trillion dollars is about fourteen times 2028 revenue on the fastest-growing, highest-margin software asset ever built. Rich, but not obviously mispriced for the category leader.</p><p><strong>The bear frame is present reality.</strong> Right now the margin is closer to forty-five percent, the company does not expect to stop burning cash until 2027 (Sacra), and the cloud bill runs to roughly eighty billion dollars through 2029. At present economics, a trillion dollars prices a future that has not arrived as though it already has, and the comp multiples assume the growth rate persists for years, which no company in history has sustained.</p><p><strong>The skeptic frame is the one I find most useful.</strong> We are pricing the largest IPO in a generation on a confidential filing. One quiet signal cuts against the skepticism: The Motley Fool reported that when Anthropic invited long-tenured employees to sell at the $350 billion valuation, they chose to hold far more than expected. The people with the most information declined liquidity at $350 billion, and the May round then priced at nearly three times that. Insider behavior is not proof, but it is data, and here it points the same way the revenue does. Up.</p><h3>How to actually get exposure</h3><p>For investors who<strong> cannot buy private shares</strong>, the cleanest listed proxies are mechanical. Amazon carries up to a thirty-three-billion-dollar stake plus the AWS revenue Anthropic is committing to. </p><p>Alphabet holds roughly fourteen percent plus Google Cloud&#8217;s TPU revenue; <strong>Google Cloud </strong>grew about sixty-three percent year over year to a roughly twenty-billion-dollar quarterly run-rate, the fastest of the big three. </p><p>Broadcom is the picks-and-shovels play through TPU co-design and connectivity. Nvidia sits at the keystone with a roughly ten-billion-dollar stake and the <strong>GPU demand underneath</strong> all of it, trading near a 4.8-trillion-dollar market capitalization on the strength of Huang&#8217;s compute-is-revenues thesis. </p><p>A trillion-dollar Anthropic IPO does not just price Anthropic. As one trading desk framed it, the entire listed AI complex is likely to re-rate on Anthropic comps, not merely the company itself.</p><p>One market-structure point will matter on debut day. A listing this large arriving this fast triggers fast-entry index inclusion rules, which means passive funds become forced buyers shortly after pricing, a mechanical tailwind Yahoo Finance flagged as one reason all<strong> three trillion-dollar names</strong> may benefit from going public in quick succession. Investors will have just watched SpaceX test those rules in real time.</p><h3>What the price implies: a transparent valuation</h3><p>The comps above are <strong>a relative reframe</strong>, not a valuation. Here is the valuation, built the way a disciplined analyst builds one when the financials are sealed. </p><p>You cannot run a bottoms-up discounted-cash-flow model on Anthropic, because the inputs such a model needs, the actual margins, the free cash flow, the <strong>capex schedule</strong>, the share count, and the realized price per token, all sit inside the confidential S-1. </p><p>Anyone publishing a <strong>single intrinsic-value number</strong> from a DCF right now is inventing those inputs. What can be done rigorously, from fact-checked data alone, is to reframe the question around two hard primary anchors, the roughly $47 billion run-rate and the roughly $1 trillion price, and ask answerable things.</p><h3>What the price requires</h3><p>The most honest move is <strong>a reverse discounted-cash-flow</strong>: rather than forecast cash flows we do not have, solve for the growth the known price embeds, then judge whether it is believable. </p><p>Treat $1 trillion as today&#8217;s enterprise value, assume the market values the company at a steady-state revenue multiple m reached in year eight and discounts at a cost of capital w, and the revenue the price implies follows directly.</p><p>Revenue(yr 8) = $1,000B &#215; (1 + w)^8 &#247; m | implied CAGR = ( Revenue(yr 8) &#247; $47B )^(1/8) - 1</p><p>With cost of capital from 9 to 13 percent and a terminal revenue multiple from 4 to 8 times, both defensible and neither touching sealed data, the implied eight-year revenue growth rate is the following.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q7PU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q7PU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 424w, https://substackcdn.com/image/fetch/$s_!Q7PU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 848w, https://substackcdn.com/image/fetch/$s_!Q7PU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7PU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q7PU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png" width="1456" height="806" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9dc27048-e691-4f95-a160-22db72676638_2470x1368.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:806,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:316461,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201004624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q7PU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 424w, https://substackcdn.com/image/fetch/$s_!Q7PU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 848w, https://substackcdn.com/image/fetch/$s_!Q7PU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7PU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dc27048-e691-4f95-a160-22db72676638_2470x1368.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The price embeds <em><mark>roughly 25 to 40 percent annual revenue growth</mark></em><mark> sustained for eight years, centered near 30 percent.</mark> That converts the entire debate into one question a reader can answer: </p><blockquote><p><em>do you believe Anthropic compounds revenue at about 30 percent a year for nearly a decade? </em></p></blockquote><p>Current growth is far above that, which gives the bull case runway; the bear case is that <strong>no company has held 30 percent</strong> for eight straight years, and open-weight price compression is the likeliest thing to break it. </p><p>The reverse DCF does not say who is right. It says, from fact-checked data, exactly what you are being asked to underwrite.</p><h3>The range of outcomes</h3><p>A scenario value completes the picture, anchoring the base on the company&#8217;s own 2028 projection, which is a projection and flagged as such, with a bear and a bull around it, each valued at an exit multiple and discounted to today.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5WP4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5WP4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!5WP4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!5WP4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!5WP4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5WP4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-valscenarios&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-valscenarios" title="c-valscenarios" srcset="https://substackcdn.com/image/fetch/$s_!5WP4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!5WP4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!5WP4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!5WP4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2fc4517-77bf-4998-976b-8f2ef3f2174a_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The price is paid for the right tail.</strong> Probability-weighted present value is about $800 billion against a price near $1 trillion, so the market leans on the bull case to clear the bar. The five-fold spread between bear and bull, roughly $290 billion to $1.6 trillion, is the real story: this is a wide distribution, not a tight intrinsic value. Discounted at 11 percent; the probabilities are illustrative and the one input a reader should make their own.</figcaption></figure></div><p>One tension in the fact-checked data deserves a flag rather than a paper-over. A roughly $47 billion run-rate today against the company&#8217;s roughly $70 billion 2028 projection implies revenue growth decelerating to 15 to 20 percent a year by 2028, a sharp slowdown from the current pace. </p><p>Either the <strong>$70 billion figure </strong>predates the $47 billion run-rate and is now conservative, or management expects growth to crash, and the comps reframe that calls the price cheap rests entirely on which it is.</p><p><strong>How to read it</strong></p><p>The honest close is not a verdict but the underwriting question the price poses: do you believe roughly 30 percent revenue growth for eight years, and do you believe the<strong> cost half of the margin</strong> keeps falling faster than the price half. </p><p>A reader who answers yes to both can justify the trillion-dollar tag; one who doubts either cannot. The point of showing every assumption is that you can change them and watch the answer move.</p><p><em>This valuation is analysis, not investment advice and not a recommendation. The run-rate and price anchors are primary; the 2028 revenue and cash-flow figures are company projections; the multiples are approximate and volatile; the cost of capital, exit multiples, and scenario probabilities are explicit modeling choices made for transparency, not derived from non-public data.</em></p><div><hr></div><h2>A mirror, a rocket, and a clock</h2><p>You cannot value Anthropic in isolation, because the IPO is partly a race, and races have<strong> positional dynamics.</strong></p><p>OpenAI is the mirror image. Per Nerd Level Tech and Let&#8217;s Data Science, it converted to a public benefit corporation in October 2025 as<strong> OpenAI Group PBC,</strong> with the nonprofit Foundation retaining roughly twenty-six percent and board control. </p><p>Microsoft holds roughly twenty-seven percent on a diluted basis, an investment valued between about $135 billion and $228 billion depending on the mark, and ended its exclusivity arrangement in April. Sam Altman holds no equity. </p><p>OpenAI closed the largest private round in history on March 31, $122 billion at an<strong> $852 billion post-money valuation</strong>, with SoftBank, Amazon, Nvidia, and Microsoft all participating. </p><p>Revenue runs about two billion dollars a month, near a twenty-five-billion run-rate as of March, with<strong> fifty million consumer subscribers</strong> and nine million business users, per roborhythms&#8217; compilation.</p><p>The contrast that will dominate the dueling roadshows is profitability. Multiple outlets, citing the loss figures, report <em>OpenAI losing about $1.22 for every dollar of revenue</em> in Q1 2026, an operating margin near negative one hundred twenty-two percent, with a projected fourteen-billion-dollar loss for the year. </p><p>Anthropic, by the <strong>disputed WSJ figures</strong>, claims a small operating profit in the same window. So the two enter the public markets at nearly identical valuations and opposite financial stories.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QV0t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QV0t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!QV0t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!QV0t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!QV0t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QV0t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-vsopenai&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-vsopenai" title="c-vsopenai" srcset="https://substackcdn.com/image/fetch/$s_!QV0t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!QV0t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!QV0t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!QV0t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee5fc40b-3f71-4a60-b09a-7253fd7f72dd_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The overtaking.</strong> Anthropic crossed above OpenAI on run-rate revenue in spring 2026 even as OpenAI retained far greater consumer reach. By May, Sacra put Anthropic near $45B versus OpenAI near $33B. Reported figures, not audited.</figcaption></figure></div><p>There is a real first-mover argument, though the precedent cuts only so far. When <strong>Lyft </strong>and Uber went public in 2019, Lyft, the first mover, popped on its debut while <strong>Uber </strong>fell on its first day; both stocks then traded poorly in the months after, so debut-day positioning is no guarantee of anything.</p><p> Both labs will seek tens of billions in fresh capital in close succession, so reaching market first plausibly matters. Anthropic&#8217;s confidential filing means it could price as early as mid-August on the <strong>SpaceX timeline</strong>, per Yahoo Finance, though Futurum reports a target as late as October; either way, likely ahead of <strong>OpenAI&#8217;s Q4 window</strong>. </p><p>Against that, the sober counterpoint: Wall Street already knows both stories intimately, and <strong>OpenAI&#8217;s S-1</strong> will likely be public by the time Anthropic prices, letting investors judge them side by side regardless of who rings the bell first.</p><p>The rocket is the merged SpaceX entity, and it is the wild card. Its S-1 disclosed that xAI spent $12.7 billion on AI infrastructure in 2025 and another $7.7 billion in Q1 2026, per <strong>Datacenter Dynamics</strong>, and it described its one gigawatt of capacity as <em>nameplate compute draw,</em> explicitly noting the figure reflects installed capacity and does not represent actual utilization. </p><p>In plain terms, the GPUs are installed but may not all be powered. That single disclosure is a gift to anyone trying to separate capacity headlines from real,<strong> energized compute</strong>, and every analyst should now apply a utilization haircut to gigawatt claims across the industry, including the contracted-capacity bars in section V.</p><p>Step back and the pipeline is unlike anything the IPO market has seen. Three trillion-dollar names, plus <strong>Databricks </strong><em>(the only clearly profitable candidate, at a $5.4 billion run-rate growing 65 percent with positive free cash flow and a $134 billion private mark</em>) and <strong>Cerebras </strong>(which priced around a $48.8 billion valuation on a heavily oversubscribed book). </p><p>One IPO tracker estimated combined pipeline demand at up to four times the entire 2025 US IPO market.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uxaG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uxaG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!uxaG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!uxaG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!uxaG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uxaG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-ipopipeline&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-ipopipeline" title="c-ipopipeline" srcset="https://substackcdn.com/image/fetch/$s_!uxaG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!uxaG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!uxaG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!uxaG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea3dd121-286a-45e7-ac05-0686b5fe4af6_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>An unprecedented concentration.</strong> Three potential trillion-dollar debuts in roughly one hundred days, alongside the largest software listings in years. SpaceX, which acquired xAI in January 2026, is shown here near a reported IPO target of $1.5 trillion, the figure most frequently cited, with reports ranging from $1 trillion to $2 trillion. Sources: Datacenter Dynamics, CNN, Let&#8217;s Data Science, AI IPO Tracker.</figcaption></figure></div><div><hr></div><h2>Stated as strongly as I can make it</h2><p>A report that only sells the bull case is marketing. Here is the bear case, and it is not weak.</p><p><strong>Demand is showing its first cracks.</strong> Axios reported, in a piece timed to the filing, that Anthropic is going public just as businesses begin to rethink their AI spend, hit with what it called sticker shock. The writer <strong>Derek Thompson</strong> has named this the great AI cost panic of 2026, the phase where Fortune 500 buyers ask whether agentic AI is worth the bill. The most cited data point is the <strong>MIT Project NANDA </strong>study from July 2025, which found that ninety-five percent of enterprise generative-AI pilots produced zero measurable profit-and-loss impact, on thirty to forty billion dollars of corporate spending. </p><p>If even a fraction of that skepticism hardens into budget discipline, the revenue surge that justifies these valuations slows exactly when the infrastructure bills come due.</p><p><strong>The macro is stretched to dot-com proportions.</strong> The five largest Western hyperscalers are guiding toward roughly $725 billion of capex in 2026, up about seventy-seven percent from 2025&#8217;s record, per the Goldman, CreditSights, and Morgan Stanley estimates compiled by Tool Directory, with the trajectory projected past a trillion dollars annually in 2027.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QEqS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QEqS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!QEqS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!QEqS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!QEqS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QEqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;c-capex&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="c-capex" title="c-capex" srcset="https://substackcdn.com/image/fetch/$s_!QEqS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 424w, https://substackcdn.com/image/fetch/$s_!QEqS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 848w, https://substackcdn.com/image/fetch/$s_!QEqS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 1272w, https://substackcdn.com/image/fetch/$s_!QEqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf928a7c-306a-4d40-8fde-188d432b725e_1720x940.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>The largest private investment cycle in history.</strong> Tech equipment and software hit 4.4% of GDP in 2025, near the dot-com peak (IEEE ComSoc). Cahn&#8217;s framework says ~$600B of annual revenue is needed to justify it; the gap is widening. Sources: Goldman Sachs, CreditSights, Morgan Stanley via Tool Directory.</figcaption></figure></div><p>The reminder that this complex can reprice violently is recent. The <strong>DeepSeek shock </strong>of January 2025, when a cheaper Chinese model wiped roughly a trillion dollars of US AI market value in a single day, including Nvidia&#8217;s $588.8 billion single-day loss, the largest in market history, shows how a single efficiency surprise can rerate the whole sector. And note the double edge. </p><p>In fact, the same open-weight efficiency that drives the cost deflation of <strong>the previous sections</strong>, is also the force most likely to compress the prices that section warned about. There is <strong>no reason another DeepSeek cannot happen</strong>. Pat Gelsinger, the former Intel chief, when asked whether this is a bubble, answered <em>of course.</em></p><p><strong>Antitrust is loading.</strong> The cumulative concentration of hyperscaler-lab pairings, Microsoft with OpenAI and Google and Amazon both with Anthropic, is large enough that, per Tech Insider&#8217;s reading, the <strong>DOJ</strong>, FTC, and <strong>European Commission</strong> are likely to revisit the structure, with a formal investigation plausible by the fourth quarter of 2026. An IPO does not resolve this. It raises the profile of the very arrangements regulators most want to examine.</p><p><strong>Company-specific overhangs are real.</strong> Sacra flags several that bear directly on Anthropic&#8217;s ability to monetize its best work. Its most capable model, previewed as <strong>Mythos </strong>and codenamed <strong>Capybara</strong>, has been withheld from general release after it proved able to identify thousands of high-severity software vulnerabilities; the commercial vehicle, Claude Security under <strong>Project Glasswing</strong> (<em>with partners including Nvidia, AWS, Apple, Google, Broadcom, Microsoft, Cisco, CrowdStrike, and Palo Alto Networks, per The Motley Fool</em>), runs on a deliberately constrained Opus 4.7. </p><p>That is a safety decision I think is correct on the merits, and it is simultaneously a self-imposed ceiling on revenue from the company&#8217;s most powerful capability. </p><p>Add the <strong>Pentagon dispute,</strong> where Anthropic sued the US government over a designation it viewed as a threat to its revenue, with CFO Krishna Rao testifying that the matter risked cutting 2026 revenue by multiple billions of dollars and where Amodei later publicly apologized for how the company handled the failed talks, and a legal overhang whose verified component is the roughly<strong> $1.5 billion authors&#8217; copyright settlement</strong> (<em>a larger figure naming the founder personally appears in a single analyst account and is not independently confirmed</em>), and you have a company whose brand safety and its revenue ceiling are the same wall.</p><p><strong>The customer-concentration paradox.</strong> Recall Claude Code&#8217;s billion-dollar ramp. Perera&#8217;s sharpest observation is that the company&#8217;s fastest-growing product may cannibalize its largest revenue source, because the same agentic coding capability enterprises buy <strong>directly can displace the API consumption </strong>those enterprises previously paid for. Growth in one column can quietly erode another. We cannot see the net effect, because the filing is confidential.</p><p>That phrase keeps recurring, and that is the point. Almost every load-bearing question, the real margin, the realized price per token, the quality of the revenue, the accounting for the <strong>SpaceX ramp</strong>, the net effect of Claude Code, resolves only when the public S-1 lands. </p><p>Until then, the bull and the bear are arguing about a black box.</p><div><hr></div><h2>Who should care, and why</h2><p>Strip away the spectacle and ask what actually changes downstream. Four things.</p><p><strong>For Nvidia and the silicon market, Anthropic is the existence proof.</strong> The most important fact in this report for the long-run structure of the industry is that a frontier-class model is being trained and served at scale on Trainium and TPU, not just on Nvidia. </p><p>The near-term risk to Nvidia is not revenue, since demand still dwarfs supply, but the long-run margin structure that depends on hyperscalers having no realistic alternative. </p><p>As previous sections showed, at rack scale, on a cost-per-workload basis, and on the bandwidth metric that actually governs inference, the alternative now exists. <strong>Every chip team</strong> at Amazon, Google, and Broadcom is using Anthropic as their proof of concept, and that is worth more to them than the revenue.</p><p><strong>For the circular-financing thesis, the IPO is the disclosure event the skeptics have awaited.</strong> A public listing forces the first concrete, audited window into a frontier lab&#8217;s financials. For two years the bears and bulls have argued about revenue quality with no primary data. </p><p>The S-1, once public, will show how Anthropic accounts for hyperscaler-funded revenue, how it books the SpaceX ramp, and what its real, unsubsidized unit economics, including the realized revenue per token that section VII could not pin down, actually look like. </p><p>This is the rare case where bull and bear should want the same thing: the numbers. If they are as good as the run-rate suggests, the bubble talk deflates. If they are not, better to know now.</p><p><strong>For enterprise buyers, the public-company transition changes the vendor relationship.</strong> Public companies optimize for quarterly margins in ways private ones do not. </p><p>The inference-cost deflation that has made Claude cheaper every year was partly funded by patient private capital. A public Anthropic, answerable to shareholders, may price differently, and may be less willing to pass the full token-cost decline through to customers. </p><p>For anyone building production systems on Claude, that is a planning input, not a panic, and one more argument for the multi-provider architectures that open-weight alternatives like DeepSeek and Llama keep making viable.</p><p><strong>For the private markets and the broader economy, the drain is unclogging, for better and worse.</strong> Three trillion-dollar IPOs in a hundred days will pull enormous capital into public AI equities and force index providers to confront new inclusion rules for companies this large arriving this fast. </p><blockquote><p><em>If the debuts go well, they validate the cycle and pull more capital in. </em></p><p><em>If they go poorly, three of the largest IPOs in history repricing in quick succession is exactly the event that turns a capex bubble into a capex correction, with the roundtripping amplifying the move down just as it amplified it up. </em></p></blockquote><p>The labor question rides alongside: tech layoffs passed 115,000 through May 2026, with Meta, Amazon, and Snap citing AI, even as the <strong>Yale Budget Lab</strong> found no significant change yet in the occupational mix of high-exposure jobs. The same plumbing runs in both directions, and so does the narrative.</p><blockquote><p><em>&#8220;What I see is this smooth exponential line. And that march has just been constant.&#8221;</em></p></blockquote><p><strong>Dario Amodei</strong> &#183; Anthropic CEO, at Davos 2026, on why he discounts the cycle of hype and bubble talk (Rest of World)</p><p>Set against that, Nvidia&#8217;s Huang, who has said publicly he disagrees with almost everything Amodei says, dismisses the doomier predictions as the product of a CEO <em>God complex.</em> T</p><p>wo of the most important people in the industry cannot agree on whether it is reshaping labor, let alone whether it is a bubble. The<strong> IPOs will not settle that</strong>. They will only price it.</p><div><hr></div><h2>The bottom line</h2><p>Here is what I actually think, stated plainly, with the byline caveat from the top still standing.</p><p>Anthropic is, by the public evidence, the best-positioned of the three companies going public this summer. It has the cleanest revenue mix, the leanest cost structure, the <strong>most credible margin-expansion story</strong>, and a genuinely differentiated three-silicon strategy that is reshaping the hardware layer beneath the entire industry. </p><p>The physics say a seventy-seven-percent gross margin is plausible rather than fanciful; the comps of previous parts say <strong>a trillion-dollar valuation is mid-pack rather than mad</strong>; the insider behavior at the tender offer and the speed of the run-rate point the same way. If forced to rank the three debuts on fundamentals rather than spectacle, Anthropic would be first.</p><p>And the entire case rests on three things we cannot yet verify and one we can. We <strong>cannot verify the real gross margin</strong>, the realized price per token, or the accounting behind the Q2 profitability claim, because the filing is confidential. </p><p>What we can verify is that the company is being valued at over a trillion dollars on exactly those unverified figures, inside a capital structure that critics, with a strong historical analogy, compare to the vendor financing that deepened the last great technology crash.</p><p>That is<strong> not a contradiction</strong>. It is the trade. The bull is betting the black box is full of seventy-seven-percent-margin, organically demanded, durably embedded enterprise revenue, with a cost-to-serve falling faster than price. </p><p>The bear is betting it is full of forty-five-percent-margin revenue, propped by a circular capital loop, with open-weight competition dragging price down to meet cost, in a demand environment that is just starting to flinch. </p><p><strong>The public S-1,</strong> fifteen days before the roadshow, opens the box. Everything before then, including the trillion-dollar valuation the market has already assigned, is a wager placed in the dark.</p><p><em><strong>The vertical is real. The loop is real. The physics is real. The only honest position, until the numbers are public, is to hold all three in view at once and refuse to pretend the box is open when it is still shut.</strong></em></p><div><hr></div><h2>Disclosures, statements, and the safety architecture</h2><p>What follows is the verifiable record behind the analysis: what was actually filed and said, on the record, by whom, and when. None of it is the confidential S-1&#8217;s financials, which remain sealed. Where a claim rests on a single source, it is marked.</p><h3>The filing, precisely</h3><p>Anthropic confirmed on June 1, 2026 that it had confidentially submitted a <strong>draft Form S-1 to the SEC</strong>, in an announcement made under Rule 135 of the Securities Act, a rule that by design states only that a filing exists: the number of shares and the offering price are explicitly undetermined, and the offering remains subject to market conditions. </p><p>Because the submission is confidential, Anthropic has disclosed no audited revenue, no margin, and no risk factors; <strong>under SEC rules</strong> for emerging growth companies those become public only about fifteen days before a roadshow. </p><p>The filing came four days after a cluster of disclosures on May 28, 2026: the close of a <em>$65 billion Series H at a $965 billion post-money valuation</em>, confirmation that run-rate revenue had crossed $47 billion earlier in May, and the release of <strong>Claude Opus 4.8. </strong>Multiple outlets place the listing target in an October 2026 window, above $1 trillion if markets cooperate.</p><p>One revealing side event: in May 2026 Anthropic warned about unauthorized transfers of its shares, naming several platforms selling unapproved, SPV-backed pre-IPO tokens and cautioning that such instruments may carry limited or no legal value. </p><p><strong>Tokenized Anthropic </strong>and OpenAI pre-IPO products reportedly fell 34 to 40 percent within days, per Bitcoin.com, a vivid illustration of demand for liquidity running far ahead of authorized supply, the same pressure visible in the earlier employee tender.</p><h3>What the executives said, on the record</h3><p>The single most important primary statement is Amodei&#8217;s own. At the Code with <strong>Claude </strong>developer conference in San Francisco on May 6, 2026, he said the company had planned for roughly tenfold annual growth but instead saw, in his words, <strong>eighty-fold annualized growth</strong> in the first quarter, which he gave as the direct cause of the company&#8217;s compute shortages, promising to pass that capacity to developers as fast as it could be brought online, per CNBC.</p><p><em>&#8220;In Q1 2026, we saw 80x annualized growth per year in revenue and usage.&#8221;</em></p><p><strong>Dario Amodei</strong> &#183; Anthropic CEO, Code with Claude, San Francisco, May 6, 2026 (CNBC)</p><p>That exuberance has a hard floor, and Amodei has named it precisely. On Dwarkesh Patel&#8217;s podcast in March 2026 he walked through the arithmetic of his own ruin: <strong>if he committed to a trillion dollars</strong> a year of compute in 2027 and revenue arrived even at $800 billion rather than the trillion he is extrapolating, then in his phrase there is &#8220;<em>no force on earth</em>&#8221; that could stop the company from going bankrupt. </p><p>It is the clearest admission any frontier-lab chief executive has made that the whole edifice is a bet on a growth rate continuing, and that the bet is existential. He has also said publicly that the industry may be near the end of the exponential.</p><p>The operator behind the IPO is CFO Krishna Rao, who joined in 2024 as the company <strong>closed its Series D at roughly $250 million in run-rate revenue</strong>, and who previously guided Airbnb&#8217;s IPO. Rao calls compute the lifeblood of the business and says he spends 30 to 40 percent of his time on it. </p><p>He has named the three risks that would push Anthropic toward the bottom of its growth cone rather than the top: enterprise diffusion failing to keep pace with model capability, scaling laws unexpectedly flattening, and <strong>competition eroding margins</strong>, per his interview with YourStory. </p><p>In a court filing around March 2026 Rao stated under oath that the company had brought in revenue exceeding $5 billion to date, the figure critics such as<strong> Ed Zitron </strong>use to argue the later profitability claim was flattered by the timing of the SpaceX compute discount.</p><blockquote><p><em>&#8220;The compute that we procure is the lifeblood of our business.&#8221;</em></p></blockquote><p><strong>Krishna Rao</strong> &#183; Anthropic CFO, who previously led Airbnb&#8217;s IPO (YourStory)</p><h3>Talent, culture, and the organization</h3><p>Anthropic&#8217;s defining operational claim is talent retention under siege. When Meta made aggressive offers across the frontier labs, Anthropic reportedly lost only two researchers where rivals lost dozens, a result Rao attributes to a culture the company describes as talent density over talent mass. </p><p><strong>All seven co-founders remain</strong>, as does the vast majority of the first thirty employees; every hire must clear a culture interview; and Amodei addresses the entire company every two weeks and takes unscripted questions, per YourStory. </p><p>In February 2026 Anthropic opened a <strong>Bengaluru office</strong>, calling India its second-largest market for Claude.</p><h3>The safety architecture, which is also a revenue constraint</h3><p>Anthropic governs releases through its <strong>Responsible Scaling Policy</strong>, first published in September 2023 and rewritten as Version 3.0, effective February 24, 2026, which introduced <strong>Frontier Safety Roadmaps</strong> and Risk Reports that quantify risk across deployed models. </p><p>The policy uses<em> AI Safety Levels</em> modeled on biosafety: <strong>ASL-2 </strong>is the current baseline; <strong>ASL-3</strong>, which Anthropic first activated alongside Claude Opus 4 in May 2025, adds hardened weight security and a narrow set of deployment limits aimed at CBRN misuse; <strong>ASL-4 is reserved</strong> for models posing major national-security risk or capable of autonomous AI research.</p><p> At Opus 4&#8217;s launch, chief scientist <strong>Jared Kaplan</strong> said the model gave novices a &#8220;significantly greater&#8221; uplift toward building biological weapons than a search engine or prior models, per TIME.</p><p>The clearest case of safety capping revenue is Claude Mythos. Announced as a preview on April 8, 2026, Mythos autonomously discovered, and wrote working exploits for, <strong>thousands of zero-day vulnerabilities</strong> across major operating systems and browsers, capability Anthropic judged too dangerous for general release, placing it at or near the ASL-3 cyber threshold per the <strong>Cloud Security Alliance.</strong> </p><p>The commercial vehicle, Claude Security under the Glasswing program, runs a deliberately constrained model and carries 90-day reporting commitments. </p><p>Anthropic has also published a Sabotage Risk Report for Opus 4.6 and, in February 2026, an internal <strong>Noncompliance Reporting and Anti-Retaliation Policy</strong> giving employees channels to flag potential violations.</p><p> Each of these is a decision that is defensible on its safety merits and simultaneously a self-imposed ceiling on the revenue the company&#8217;s most powerful capabilities could earn.</p><h3>The model record, and what Anthropic does not disclose</h3><p>The Claude lineage behind the revenue is precise and public at the capability level: </p><ul><li><p><strong>Opus 4.5</strong> (November 24, 2025) shipped a 200k-token context window and a 64k-token thinking budget, with up to 65 percent fewer tokens on long-horizon coding; </p></li><li><p><strong>Opus 4.6 </strong>(February 2026) added a 1M-token context in beta and led Terminal-Bench 2.0 and Humanity&#8217;s Last Exam; Sonnet 4.6 followed on February 17, 2026; </p></li><li><p><strong>Opus 4.7</strong> was independently rated the most EU-AI-Act-compliant model by the testing firm Aithos; </p></li><li><p>and <strong>Opus 4.8</strong> (May 28, 2026) carries a 1M-token context with cross-session memory for multi-day work. </p></li></ul><p>Critically, <strong>none of these system cards </strong>disclose the one thing an analyst most wants: parameter counts, layer counts, or whether the models are dense or mixture-of-experts. </p><p>Anthropic publishes capability and safety evaluations in exhaustive detail and keeps the architecture itself sealed, which is exactly why the <strong>inference unit-economics</strong> had to be built from silicon specifications and first principles rather than from any disclosed model size.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hZAe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hZAe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 424w, https://substackcdn.com/image/fetch/$s_!hZAe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 848w, https://substackcdn.com/image/fetch/$s_!hZAe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 1272w, https://substackcdn.com/image/fetch/$s_!hZAe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hZAe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png" width="1456" height="1837" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1837,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:302075,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201004624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hZAe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 424w, https://substackcdn.com/image/fetch/$s_!hZAe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 848w, https://substackcdn.com/image/fetch/$s_!hZAe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 1272w, https://substackcdn.com/image/fetch/$s_!hZAe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c38bec2-5425-4e51-9748-b29bba517da9_1747x2204.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>The data, at a glance</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_jsS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_jsS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 424w, https://substackcdn.com/image/fetch/$s_!_jsS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 848w, https://substackcdn.com/image/fetch/$s_!_jsS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 1272w, https://substackcdn.com/image/fetch/$s_!_jsS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_jsS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png" width="1456" height="1067" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1067,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:255577,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201004624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_jsS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 424w, https://substackcdn.com/image/fetch/$s_!_jsS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 848w, https://substackcdn.com/image/fetch/$s_!_jsS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 1272w, https://substackcdn.com/image/fetch/$s_!_jsS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d85271f-f124-4dcf-bf73-f7fc3961c6b3_2090x1531.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h5aL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h5aL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 424w, https://substackcdn.com/image/fetch/$s_!h5aL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 848w, https://substackcdn.com/image/fetch/$s_!h5aL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 1272w, https://substackcdn.com/image/fetch/$s_!h5aL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h5aL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png" width="1456" height="566" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:566,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:118065,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201004624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h5aL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 424w, https://substackcdn.com/image/fetch/$s_!h5aL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 848w, https://substackcdn.com/image/fetch/$s_!h5aL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 1272w, https://substackcdn.com/image/fetch/$s_!h5aL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F387bc208-2a32-40ed-99f3-925c787ed8c3_2090x813.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jo8a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jo8a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 424w, https://substackcdn.com/image/fetch/$s_!jo8a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 848w, https://substackcdn.com/image/fetch/$s_!jo8a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!jo8a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jo8a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png" width="1456" height="846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:846,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:230800,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/201004624?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jo8a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 424w, https://substackcdn.com/image/fetch/$s_!jo8a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 848w, https://substackcdn.com/image/fetch/$s_!jo8a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!jo8a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc390cf72-f89e-4955-bd8f-f0c39ce4a629_2090x1214.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Methodology.</strong> The cost-to-serve and gross-margin-bridge figures in section VII are illustrative models built from published silicon benchmarks and stated assumptions, <strong>not Anthropic disclosures</strong>; they are intended to show order of magnitude and mechanism, not to report the company&#8217;s actual numbers, which are confidential. </p><p>Revenue, valuation, and capacity figures throughout are reported, estimated, or projected by the cited third parties. Where sources conflict (for example, run-rate near $45B vs $47B, or Trainium3 availability dates), the range is given in text.</p><p><strong>Sourcing.</strong> <em>Reporting and analysis from CNBC, CNN, NBC News, Axios, Reuters, the Wall Street Journal (via AI Weekly and Sacra), Bloomberg, TechCrunch, Datacenter Dynamics, Yahoo Finance, Fortune, Benzinga, The Motley Fool, Futurum, Investing.com, and Business Standard; infrastructure, inference, and financial analysis from Sacra, PitchBook, Global Data Center Hub, Tech Insider, TradingKey, SaaStr, BlockEden, Tool Directory, IEEE ComSoc, IntuitionLabs, Introl, Inworld, GMI Cloud, Spheron, CloudRift, multiples.vc, and an arXiv study on token-price evolution; silicon specifications from Tom&#8217;s Hardware, Oplexa, Introl, and Awesome Agents; benchmark data from Nvidia InferenceMax; company statements from Anthropic, xAI, and Databricks; commentary from Ed Zitron, Derek Thompson, Shanaka Anslem Perera, and the named analysts (Rasgon / Bernstein, Ives / Wedbush, Cahn / Sequoia, Duberstein / Motley Fool, Patience / Futurum).</em></p><p><strong>Disclosure and limits.</strong> All financial figures are reported, estimated, or projected; none are drawn from a publicly available audited filing, because Anthropic&#8217;s S-1 remained confidential as of the filing date. Nothing here is investment advice. <em>This is analysis</em>, not a recommendation.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Software Frontier is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Blackwell Migration Question]]></title><description><![CDATA[When you should move Llama 3.3 70B inference from H100 to B200, when you should not, and what the real cost-per-token improvement is once you do.]]></description><link>https://www.thesoftwarefrontier.com/p/the-blackwell-migration-question</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/the-blackwell-migration-question</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Sun, 07 Jun 2026 11:32:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4tb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4tb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4tb9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!4tb9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!4tb9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!4tb9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4tb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png" width="1122" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2346590,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4tb9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!4tb9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!4tb9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!4tb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6758be5-f2fe-4087-b105-7ab352c95432_1122x1402.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Introduction</h2><p>A single Blackwell B200 running Llama 3.3 70B at NVFP4 can decode at approximately <strong>5.5 milliseconds per token at batch size 1</strong>, an 18-month-old H100 at FP8 cannot move below <strong>21.5 ms</strong>. The B200 floor is roughly <strong>4&#215; faster</strong> and the KV-cache budget grows by about <strong>18&#215;</strong>. </p><p>The numbers are not vendor marketing. They are <strong>bandwidth arithmetic: </strong>7.7 TB/s of HBM3e divided by a ~43 GB on-GPU footprint for the FP4 weights, the same first-principles derivation we used for the H100 floor in Issue #1, with two parameters changed.</p><p>The question that follows is not whether Blackwell is faster. It is whether the <strong>price-per-token</strong> improvement actually delivered to a deployment engineer justifies the migration cost, and the published vendor numbers do not answer it cleanly. </p><p>NVIDIA&#8217;s October 2025 announcement of SemiAnalysis InferenceMAX v1 claims <strong>&#8220;15&#215; lower cost per million tokens&#8221;</strong> for Blackwell vs Hopper. </p><p>The real cost-per-token improvement for like-for-like single-GPU Llama 3.3 70B inference, derived from the same InferenceMAX v1 data combined with public on-demand pricing, is closer to <strong>3&#215; on-demand and 8&#215; on spot</strong>, with the gap explained by rack-scale GB200 NVL72 comparisons, MoE workloads, and BF16-baseline framings that do not represent the H100 FP8 production deployment most readers are actually running.</p><p>This is Issue #2 of what is now called <strong>Inference.Engineering</strong>. Issue #1 derived the bandwidth-bound floor for Llama 3.3 70B FP8 on H100 SXM5, audited the public benchmark landscape, identified where the engine-vs-engine variance actually lives, and committed to running our own measurements. </p><p>The<strong> measurement work</strong> is in progress and ships separately. This issue addresses the question deployment engineers are asking <em>now</em>: should I migrate, and what do I actually get if I do.</p><p>The post does what<strong> Issue #1 did</strong>. It derives the physical bounds from the NVIDIA datasheet and the FP4 weight footprint. It places the bounds against empirical data from SemiAnalysis InferenceMAX v1 and NVIDIA&#8217;s MLPerf v4.1 submission. </p><p>It audits the public Blackwell benchmark claims against those bounds, reads the kernel-layer story underneath (NVFP4 vs MXFP4, the <strong>second-generation Transformer Engine</strong>, FlashAttention-3 on SM100 vs SM90, NVLink 5), works through the quantization-accuracy tradeoff using Red Hat AI&#8217;s published <strong>evaluation of NVFP4 on Llama 3.3 70B</strong>, and concludes with a migration decision matrix for the six most common production situations.</p><p><strong>A note on what we have and have not done.</strong> This post is analysis grounded in primary-source data. The bounds are calculator-checkable. The empirical numbers come from SemiAnalysis InferenceMAX v1 (October 2025), NVIDIA&#8217;s own MLPerf submission, Red Hat AI&#8217;s published NVFP4 evaluation, and the vLLM v0.12.0 Blackwell recipe page. </p><p>We have not yet run our <strong>own B200 benchmarks</strong>. When we do, this post will be updated and any deltas will be tracked in the errata page. If the migration recommendations below turn out to be wrong when measured directly, cite this post against us.</p><p><strong>Inference.Engineering</strong> is reader-supported. The paid subscription funds rented GPU time on H100, B200, and MI355X, which is how we plan to measure the configurations this issue discusses.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Key observations</h2><ol><li><p><strong>Decode floor on a single B200 for Llama 3.3 70B NVFP4 is ~5.5 ms/token at batch 1</strong>, a per-user throughput ceiling of ~180 tok/s/user. Derived from ~43 GB on-GPU footprint at NVFP4 (34 GB FP4 linear weights + ~4 GB BF16 embedding/lm_head + ~4 GB block-scale overhead at NVFP4&#8217;s 16-element block size) divided by 7.7 TB/s HBM3e bandwidth on the HGX B200. The GB200 variant at 8.0 TB/s reaches ~5.3 ms.</p></li><li><p><strong>The B200&#8217;s KV-cache budget after NVFP4 weights is ~135 GB on a single 180 GB HGX B200 GPU</strong>, versus ~7&#8211;8 GB on a single 80 GB H100 at FP8. The 18&#215; increase is the load-bearing fact, not the throughput number. Long-context workloads that hit the KV wall on H100 (Part 1.2 of Issue #1) move comfortably into single-GPU territory on B200.</p></li><li><p><strong>NVFP4 on Llama 3.3 70B is essentially lossless when properly calibrated.</strong> Red Hat AI&#8217;s published NVFP4 evaluation (February 2026) shows large models (70B&#8211;235B parameters) &#8220;consistently achieve ~99% recovery&#8221; of BF16 accuracy across task-level and aggregate benchmarks. This holds for Llama 3.3 70B specifically; the published RedHatAI/Llama-3.3-70B-Instruct-NVFP4 checkpoint exists with full reproduction recipes.</p></li><li><p><strong>NVFP4 &#8800; MXFP4.</strong> On Llama 3.3 70B with quantized KV cache, NVIDIA measures <strong>5% higher MMLU accuracy with NVFP4 vs MXFP4</strong> (December 2025), attributed to NVFP4&#8217;s finer block scaling (16-element blocks vs 32) and higher-precision E4M3 FP8 scaling factors vs MXFP4&#8217;s E8M0. The distinction matters: a benchmark reporting &#8220;FP4&#8221; without specifying which format does not generalize.</p></li><li><p><strong>SemiAnalysis InferenceMAX v1 reports B200 delivering ~10,000 TPS/GPU at 50 tok/s/user interactivity on Llama 3.3 70B</strong>, roughly 4&#215; higher per-GPU throughput than H200 at the same interactivity (NVIDIA blog, October 9, 2025). Note that the batch-1 <em>decode-floor</em> ratio vs H200 is smaller (~2.7&#215;, from 1.6&#215; bandwidth times 1.69&#215; NVFP4 footprint); the larger 4&#215; at production interactivity additionally captures the bigger batch sizes the B200&#8217;s KV headroom permits and the FP4 compute density that helps once batches are large. Floor and interactivity-point throughput are different metrics, and the gap between them is itself informative.</p></li><li><p><strong>NVIDIA&#8217;s &#8220;15&#215; lower cost per million tokens&#8221; headline is not the right number for the single-GPU H100 &#8594; B200 question.</strong> It applies to rack-scale GB200 NVL72 on MoE models compared to HGX H100 air-cooled clusters at BF16. For like-for-like single-GPU Llama 3.3 70B FP8 (H100) vs NVFP4 (B200) at 50 tok/s/user interactivity, the derived cost-per-million-tokens improvement using Spheron&#8217;s published rates is <strong>~3&#215; on-demand and ~8&#215; on spot</strong>.</p></li><li><p><strong>The B200&#8217;s compute-bandwidth ridge sits at 2,338 FLOPs/byte for FP4 dense</strong> (18 PFLOPS / 7.7 TB/s) on the HGX variant, versus 591 FLOPs/byte at FP8 on H100. The Blackwell ridge is roughly 4&#215; further out, meaning Llama 3.3 70B decode at AI &#8776; 1 FLOP/byte sits even further below the ceiling. <strong>Decode is more bandwidth-bound on B200, not less.</strong> The throughput improvement comes from the bandwidth itself, not from compute throughput.</p></li><li><p><strong>vLLM v0.12.0 is the current Blackwell-ready release.</strong> NVIDIA&#8217;s vLLM recipe page is direct on the precision choice: <em>&#8220;For Hopper, FP8 offers the best performance for most workloads. For Blackwell, NVFP4 provides additional memory savings and throughput gains, but may require tuning to maintain accuracy on certain tasks.&#8221;</em> The recipe also documents <code>kv-cache-dtype: fp8</code> and <code>max-num-batched-tokens: 8192</code> as the recommended Llama 3.3 70B Blackwell defaults.</p></li><li><p><strong>The B200&#8217;s 1,000W TDP requires infrastructure most data centers do not yet have.</strong> H100 SXM5 runs at 700W in air-cooled configurations. B200 at 1,000W in HGX form (or 1,200W in GB200) frequently requires liquid cooling or a substantial reduction in rack density. The migration cost includes infrastructure, not just hardware.</p></li><li><p><strong>The cross-vendor portability story is real and underappreciated.</strong> vLLM&#8217;s Triton attention backend, which achieved 100.7% of FlashAttention-3 performance on Hopper for long decode requests (Issue #1, Section 4.2), runs unchanged on Blackwell and AMD. <strong>The same Triton kernel that closes the gap to FA3 on H100 also closes the gap to FA4 on B200.</strong> A migration evaluation that compares only the NVIDIA-optimized stack systematically understates the AMD alternative on the workloads where Triton attention wins.</p></li><li><p><strong>The B200 supply situation matters for the timeline.</strong> Inworld reports B200 hardware orders backlogged through mid-2026 with ~3.6 million units in queue (April 2026 reference). Cloud rental is the practical migration path for most readers in 2026, not on-premise purchase. This makes the spot-price economics more relevant than the list-price comparisons NVIDIA&#8217;s blog posts emphasize.</p></li></ol><div><hr></div><h2>Part 1, The physical bounds on Blackwell</h2><p>Three numbers belong on every Llama 3.3 70B / B200 deployment engineer&#8217;s whiteboard: the decode latency floor under NVFP4, the KV-cache budget that the larger HBM3e capacity unlocks, and the compute roofline ridge that shifts under the second-generation Transformer Engine.</p><h3>1.1 The decode latency floor under NVFP4</h3><p>The bandwidth-bound floor derivation from Issue #1 transfers unchanged. Decode on a single B200 streams the full weight set from HBM3e to the SMs per token. </p><p>At batch 1, decode arithmetic intensity remains <strong>~1 FLOP per byte</strong> loaded (<em>Spector &amp; R&#233;; arXiv 2603.05931</em>). The H100 figures from Issue #1 become Blackwell figures by substituting the new weight footprint and the new bandwidth.</p><p>NVIDIA B200 datasheet figures, cross-verified against the official December 2024 Blackwell datasheet:</p><blockquote><p><em>Metric HGX B200 (per GPU) GB200 (per GPU) HBM3e bandwidth 7.7 TB/s 8.0 TB/s FP4 dense 18 PFLOPS 20 PFLOPS FP8/FP6 dense 9 PFLOPS 10 PFLOPS BF16/FP16 dense 5 PFLOPS 5 PFLOPS HBM3e capacity 180 GB 186 GB TDP 1,000 W up to 1,200 W NVLink generation 5 (1.8 TB/s) 5 (1.8 TB/s)</em></p></blockquote><p>(All <strong>Tensor Core figures</strong> are dense; sparse values are 2&#215; the dense.)</p><p>Llama 3.3 70B on-GPU footprint under NVFP4 decomposes as follows. NVFP4 quantizes <strong>linear-layer weights to 4 bits </strong>per parameter in 16-element blocks with one E4M3 FP8 scale per block. Embedding and lm_head remain in BF16 (the standard production path that Red Hat AI&#8217;s checkpoint uses, mirroring the FP8 convention from Issue #1):</p><pre><code><code>Linear FP4 weights:        68.45B params &#215; 0.5 bytes = 34.23 GB
Block-scale overhead:      68.45B params / 16 &#215; 1 byte = 4.28 GB
Embedding + lm_head BF16:  2.10B params &#215; 2 bytes = 4.20 GB
Runtime + activations + CUDA graphs: ~1 GB
                                              ---------
Total on-GPU footprint:                      ~43.7 GB
</code></code></pre><p>The lower bound on decode latency per token at batch 1 uses the <strong>per-token streaming footprint</strong> of ~42.7 GB (the FP4 linear weights, their block scales, and the BF16 lm_head, all of which stream from HBM every decode step). </p><p>The extra <strong>~1 GB of runtime </strong>and activation buffers in the ~43.7 GB total does not stream per token, so it enters the KV-budget subtraction in Part 1.2 but not the floor:</p><pre><code><code>HGX B200:  t_floor = 42.7 GB / 7.7 TB/s  &#8776; 5.5 ms/token
           v_ceiling = 1 / t_floor       &#8776; 180 tok/s/user

GB200:     t_floor = 42.7 GB / 8.0 TB/s  &#8776; 5.3 ms/token
           v_ceiling = 1 / t_floor       &#8776; 187 tok/s/user
</code></code></pre><p>Comparing to the H100 SXM5 / FP8 reference from Issue #1 (~21.5 ms / 46.5 tok/s/user), the Blackwell + NVFP4 combination delivers a roughly <strong>4&#215; decode-floor improvement</strong> at batch 1. The improvement decomposes into two contributions: bandwidth (7.7 vs 3.35 TB/s = 2.3&#215;) and streaming footprint (42.7 vs 72 GB = 1.69&#215;). </p><p>The footprint contribution is what makes NVFP4 valuable, separate from the hardware. Running<strong> B200 with FP8 weights</strong> instead of NVFP4 would cut the footprint contribution to ~1&#215; and recover only the 2.3&#215; bandwidth improvement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kuRA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kuRA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 424w, https://substackcdn.com/image/fetch/$s_!kuRA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 848w, https://substackcdn.com/image/fetch/$s_!kuRA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 1272w, https://substackcdn.com/image/fetch/$s_!kuRA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kuRA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png" width="1456" height="737" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:737,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191207,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kuRA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 424w, https://substackcdn.com/image/fetch/$s_!kuRA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 848w, https://substackcdn.com/image/fetch/$s_!kuRA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 1272w, https://substackcdn.com/image/fetch/$s_!kuRA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15155d3f-9812-4994-b5bb-3f8467d23cf8_2579x1305.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chart 1. The decode latency floor and the per-user throughput ceiling it implies, derived from each GPU&#8217;s HBM bandwidth divided by the Llama 3.3 70B weight footprint at the relevant precision. B200 NVFP4 is ~3.9x faster at the floor than H100 FP8. These are physical lower bounds; real systems sit slightly above them.</em></p><p><strong>Verify the floor yourself.</strong> The bound is checkable on any rented B200 in under ten minutes, using NVIDIA&#8217;s vLLM v0.12.0 Blackwell recipe as the launch baseline:</p><pre><code><code>docker pull vllm/vllm-openai:v0.12.0

docker run --gpus all -p 8000:8000 vllm/vllm-openai:v0.12.0 \
  --model nvidia/Llama-3.3-70B-Instruct-NVFP4 \
  --kv-cache-dtype fp8 \
  --max-num-batched-tokens 8192 \
  --gpu-memory-utilization 0.9
</code></code></pre><p>Then measure<strong> single-stream decode </strong>at concurrency 1:</p><pre><code><code>vllm bench serve \
  --model nvidia/Llama-3.3-70B-Instruct-NVFP4 \
  --dataset-name random --random-input-len 512 --random-output-len 512 \
  --max-concurrency 1 --num-prompts 8 \
  --percentile-metrics ttft,tpot,itl,e2el --ignore-eos
</code></code></pre><p>NVIDIA also publishes the canonical reproduction in its <code>dgxc-benchmarking</code> repository, which runs Llama 3.3 70B inference with <code>--dtype nvfp4</code> on <strong>B200/GB200</strong> and exposes TPOT directly when streaming is enabled (<code>STREAMING=true</code>); </p><p>the same harness runs the <strong>H100 baseline</strong> at <code>--dtype fp8</code>, making it the cleanest apples-to-apples generational comparison available without writing your own client.</p><p>Expected mean <strong>TPOT </strong>should land in the <strong>~6&#8211;8 ms range on HGX B200</strong>, at or just above the 5.5 ms floor, with the ~1&#8211;2 ms gap being engine overhead and kernel-launch latency. If you see TPOT materially below 5.5 ms at batch 1, the engine is running speculative decoding or sub-NVFP4 weights. </p><p>If materially above ~10 ms, the precision path is wrong (<em>the engine fell back to FP8 or BF16</em>) or the configuration is wrong (cold CUDA graphs, an unconfigured Transformer Engine path). Per-user throughput is <strong>1000 / TPOT_ms.</strong></p><p><strong>A caveat we will not paper over.</strong> Unlike Issue #1, where NVIDIA&#8217;s own NIM benchmark published the H100 throughput-vs-concurrency curve that empirically confirmed the<strong> KV wall</strong>, we have not located a published single-stream (batch-1) B200 TPOT measurement for Llama 3.3 70B NVFP4 to anchor the 5.5 ms floor directly. </p><p>The public <strong>B200 numbers</strong> (InferenceMAX, MLPerf, the TRT-LLM perf tables) are all aggregate-throughput or production-interactivity points at large batch, not batch-1 latency. The <strong>5.5 ms</strong> figure is therefore a bandwidth derivation, not yet an empirically confirmed measurement, and confirming it within 15% is the first specific claim<strong> Issue #3 will test</strong>. </p><p>Treat it as a physical lower bound that real systems approach from above, exactly as the H100 floor behaved before NIM data confirmed it.</p><h3>1.2 The KV-cache budget grows by an order of magnitude</h3><p>The KV-cache calculation transfers unchanged from Issue #1. Llama 3.3 70B uses Grouped-Query Attention with 8 KV heads, head_dim 128, across 80 layers. Per-token KV-cache footprint is ~327 KB at BF16 or ~164 KB at FP8.</p><p>After loading the ~43.7 GB NVFP4 weight footprint and reserving ~1 GB for runtime, the KV-cache budget on a single 180 GB HGX B200 is approximately <strong>135 GB</strong>, versus ~7&#8211;8 GB on a single 80 GB H100 at FP8:</p><p>KV precision Bytes/token KV tokens on H100 (~7&#8211;8 GB) KV tokens on B200 HGX (~135 GB) BF16 327 KB ~21,000&#8211;24,500 <strong>~413,000</strong> FP8 164 KB ~42,000&#8211;49,000 <strong>~825,000</strong></p><p>At avg_seq_len = 8,192 tokens (the vLLM V1 default chunked-prefill budget), <strong>single-H100 concurrency is ~3</strong>. Single-B200 concurrency is ~50 at the same configuration. At avg_seq_len = 32,768 (long-context agentic workloads), single-H100 supports less than one full request in memory; single-B200 supports ~12.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kMXr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kMXr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 424w, https://substackcdn.com/image/fetch/$s_!kMXr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 848w, https://substackcdn.com/image/fetch/$s_!kMXr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 1272w, https://substackcdn.com/image/fetch/$s_!kMXr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kMXr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:185879,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kMXr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 424w, https://substackcdn.com/image/fetch/$s_!kMXr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 848w, https://substackcdn.com/image/fetch/$s_!kMXr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 1272w, https://substackcdn.com/image/fetch/$s_!kMXr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F809e8b0b-8a18-4923-970f-6d1f7c8920e4_2325x1279.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chart 2. KV-cache budget remaining after weights load, single GPU. The B200&#8217;s ~135 GB is ~18x the H100&#8217;s ~7.5 GB. Note that the H200 already reaches ~67 GB (~9x), capturing half the step-change, which is why an existing H200 fleet has a weaker migration case than an H100 fleet (Part 6.1).</em></p><p>This is the load-bearing finding of the Blackwell migration question for long-context production: <strong>the workloads that required TP=2 or TP=4 on Hopper for KV headroom fit comfortably on a single B200</strong>. The migration changes which workloads are &#8220;single-GPU&#8221; deployments.</p><h3>1.3 The roofline shifts further out</h3><p>The B200 compute-bandwidth ridge moves to:</p><pre><code><code>AI_ridge (B200 FP4 HGX) = 18 PFLOPS / 7.7 TB/s  &#8776; 2,338 FLOPs/byte
AI_ridge (B200 FP8 HGX) =  9 PFLOPS / 7.7 TB/s  &#8776; 1,169 FLOPs/byte
AI_ridge (H100 FP8)     = 1,979 TFLOPS / 3.35 TB/s &#8776; 591 FLOPs/byte
</code></code></pre><p>The B200 FP4 ridge is roughly 4&#215; further out than the H100 FP8 ridge. Decode at batch 1 with AI &#8776; 1 sits at the same arithmetic intensity but achieves only ~7.7 TFLOPS on B200 (0.04% of FP4 peak), vs ~3.4 TFLOPS on H100 (0.17% of FP8 peak). </p><p><strong>The fraction of peak compute used by decode falls as the hardware improves</strong>, because the bound is bandwidth, not compute. The Blackwell FP4 compute density is largely irrelevant to batch-1 decode latency; it matters at higher batch and in prefill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TcVb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TcVb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 424w, https://substackcdn.com/image/fetch/$s_!TcVb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 848w, https://substackcdn.com/image/fetch/$s_!TcVb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!TcVb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TcVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png" width="1456" height="847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:847,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:265266,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TcVb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 424w, https://substackcdn.com/image/fetch/$s_!TcVb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 848w, https://substackcdn.com/image/fetch/$s_!TcVb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!TcVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2bfce12-ca13-4f59-b440-b851aeda00c5_2409x1402.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chart 3. The B200 FP4 compute-bandwidth ridge sits ~4x further right than the H100 FP8 ridge. Batch-1 decode at arithmetic intensity ~1 FLOP/byte uses an even smaller fraction of peak compute on Blackwell (0.04%) than on Hopper (0.17%): the throughput gain is bandwidth, not compute. Compute density only matters in the prefill regime (shaded).</em></p><p>Prefill on B200 at FP4, with arithmetic intensity in the <strong>2,000&#8211;10,000 FLOPs/byte range</strong>, runs comfortably in the compute-bound regime above the ridge. At 75% utilization on the FP4 ceiling, the per-GPU prefill throughput on Llama 3.3 70B reaches approximately:</p><pre><code><code>prefill_ceiling = 0.75 &#215; 18 PFLOPS / (2 &#215; 70.55 &#215; 10^9 FLOPs/token) &#8776; 96,000 tok/s
</code></code></pre><p>versus ~10,500 tok/s on H100 at FP8. <strong>A ~9&#215; prefill throughput improvement</strong>, which dominates the workloads where input length is much larger than output length (RAG, document QA, code understanding). </p><p>The bandwidth-bound decode improvement is &#8220;<em>only</em>&#8221; ~4&#215;; the compute-bound prefill improvement is much larger.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Part 2, Empirical verification from InferenceMAX v1 and MLPerf</h2><p>The Part 1 derivation predicts a ~4&#215; decode floor improvement and a ~9&#215; prefill ceiling improvement for Llama 3.3 70B going from H100 FP8 to B200 NVFP4. Three empirical sources test the prediction, and getting the comparison right requires understanding precisely how each was measured.</p><p><strong>SemiAnalysis InferenceMAX v1 (October 9, 2025)</strong> is the most rigorous public source, and its methodology deserves close reading because the headline numbers are easy to misquote. </p><p>InferenceMAX runs nightly on hundreds of chips via <strong>GitHub Actions, </strong>sweeping max-concurrency and parallelism to trace the full throughput-vs-interactivity <strong>Pareto frontier</strong> rather than reporting a single point. </p><p>For each run it uses random sequences (no prefix caching, to avoid the workload-dependent complexity prefix caching introduces), an infinite request rate with a capped max-concurrency, and three input/output sequence-length pairs chosen to represent distinct workload classes: <strong>1K in / 1K out (chat), 1K in / 8K out (reasoning), and 8K in / 1K out (summarization)</strong>, with each request&#8217;s input length randomized to 80&#8211;100% of nominal to mimic real traffic variance. </p><p>For Llama 3.3 70B specifically, the default engine is <strong>vLLM</strong> and the Blackwell precision is <strong>NVFP4</strong>; SGLang is the DeepSeek default and TRT-LLM is run where vendors submit configs.</p><p>The InferenceMAX v1 finding on Llama 3.3 70B is unambiguous: &#8220;When it comes to <strong>LLaMA 70B FP4</strong>, B200 significantly outperforms MI355X across all three workload types.&#8221; NVIDIA&#8217;s accompanying announcement quantifies the generational comparison: Blackwell delivers over 10,000 TPS per GPU at <strong>50 TPS/user interactivity</strong> on Llama 3.3 70B, 4&#215; higher per-GPU throughput than H200.</p><p>Three things about how this number is constructed, each of which a careless reader gets wrong. First, <strong>50 tok/s/user is a production interactivity floor, not the single-stream maximum.</strong> </p><p>A B200 at single-stream batch 1 reaches the ~180 tok/s/user ceiling from Part 1.1; the <strong>50 tok/s/user point </strong>sits at a higher concurrency where weight loads amortize across many users, which is exactly the throughput-vs-interactivity trade-off that defines the Pareto curve. </p><p>Second, <strong>the 4&#215; comparison is vs H200, not H100.</strong> H200&#8217;s 4.8 TB/s bandwidth is ~43% higher than H100&#8217;s 3.35 TB/s, so the B200-vs-H100 ratio is correspondingly larger than 4&#215;. Third, the comparison holds <strong>NVFP4 on B200 against FP8 on the Hopper part</strong>, so the 4&#215; already bundles the precision-footprint contribution; it is not a pure-hardware ratio.</p><p>Our derivation decomposes the <strong>B200-vs-H100 ratio</strong> cleanly: 2.3&#215; from bandwidth (<em>7.7 vs 3.35 TB/s</em>) times ~1.69&#215; from the NVFP4 streaming-footprint reduction (<em>42.7 vs 72 GB</em>) gives ~3.9&#215; at the bandwidth-bound decode floor. </p><p>The InferenceMAX 4&#215;-vs-H200 number, adjusted for the H200-to-H100 bandwidth gap, lands in the same region. The decomposition matters more than the point estimate: it tells a deployment engineer that running B200 at <strong>FP8 instead of NVFP4</strong> sacrifices the 1.69&#215; footprint term and recovers only the 2.3&#215; bandwidth term.</p><p><strong>MLPerf Inference v4.1</strong> is the second anchor. NVIDIA&#8217;s August 2024 submission with one B200 GPU on Llama 2 70B reported <strong>10,756 tokens/s server scenario and 11,264 tokens/s offline scenario</strong>, against a per-GPU H100 figure derived by dividing the eight-GPU H100 submission by eight, yielding a reported 4&#215; server / 3.7&#215; offline per-GPU increase. </p><p>Llama 2 70B and Llama 3.3 70B share the relevant architecture (<em>80 layers, hidden 8192, 64 Q heads, 8 KV heads in 8:1 GQA</em>), so the <em>ratio</em> transfers even though the absolute number is for Llama 2.</p><p>The <strong>three paths cluster </strong>around 4&#215;, though on deliberately different baselines that are worth stating precisely. InferenceMAX v1 (production interactivity, NVFP4-vs-FP8): ~4&#215; vs H200. </p><p><strong>MLPerf v4.1 </strong>(offline, peak throughput): ~3.7&#8211;4&#215; vs H100 per-GPU. First-principles (bandwidth-bound decode floor): ~3.9&#215; vs H100. The two H100-baselined numbers agree <strong>tightly at ~3.9&#215;; </strong>the InferenceMAX figure is vs the faster H200, so restated against H100 it would be somewhat <em>larger</em> than 4&#215;, meaning the three are mutually consistent rather than coincidentally equal. </p><p>Convergence of an independent nightly benchmark, a standardized industry benchmark, and a <strong>from-scratch derivation</strong> in the same band, with the baseline differences accounted for, is what separates a defensible figure from a vendor claim repeated.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gFbx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gFbx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 424w, https://substackcdn.com/image/fetch/$s_!gFbx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 848w, https://substackcdn.com/image/fetch/$s_!gFbx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 1272w, https://substackcdn.com/image/fetch/$s_!gFbx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gFbx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png" width="1456" height="839" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:839,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171308,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gFbx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 424w, https://substackcdn.com/image/fetch/$s_!gFbx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 848w, https://substackcdn.com/image/fetch/$s_!gFbx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 1272w, https://substackcdn.com/image/fetch/$s_!gFbx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406c05c0-5ca7-49c4-b5e2-2fd11bb9dd42_2193x1263.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chart 4. The throughput-improvement figure does not rest on any single source. InferenceMAX v1 (vs H200), MLPerf v4.1 (vs H100 per-GPU), and the first-principles bandwidth derivation (vs H100) all land in the 3.8-4x band.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Part 3, The cost-per-token economics</h2><p>Two factors determine the cost-per-token improvement: throughput-per-GPU (~4&#215;) and price-per-GPU-hour (varies by cloud, ~2&#8211;3&#215;). The product is the cost-per-token ratio.</p><h3>3.1 The real cost-per-million-tokens math</h3><p>Using Spheron&#8217;s published rates (consistent with the H100 numbers in Issue #1):</p><p>Hardware On-demand $/hr Spot $/hr Throughput at 50 tok/s/user Cost / 1M tokens (on-demand) Cost / 1M tokens (spot) H100 SXM5 (FP8) $2.64 $1.66 ~1,500 TPS $0.49 $0.31 H200 SXM5 (FP8) $4.62 $1.92 ~2,500 TPS $0.51 $0.21 B200 HGX (NVFP4) $6.03 $2.12 ~10,000 TPS <strong>$0.17</strong> <strong>$0.059</strong></p><p>All three per-hour rates are <strong>Spheron&#8217;s published figures</strong> as of 22 May 2026 (H100 $2.64/$1.66, H200 $4.62/$1.92, B200 $6.03/$2.12 on-demand/spot). H100 and H200 throughput at 50 tok/s/user is extrapolated from the SemiAnalysis H200-vs-B200 4&#215; ratio combined with the H100-to-H200 1.43&#215; bandwidth scaling; B200 throughput is the InferenceMAX v1 figure.</p><p>Note the <strong>counterintuitive H200 </strong>on-demand row: at $4.62/hr its cost-per-token ($0.51/M) is actually slightly <em>worse</em> than the H100&#8217;s ($0.49/M), because the ~43% throughput gain from the higher bandwidth does not fully offset the ~75% price premium. </p><p>The H200&#8217;s real advantages are its memory capacity (the KV-wall relief in Part 6.1) and its aggressive spot rate ($0.21/M), not its on-demand cost-per-token. This is exactly the kind of inversion that a vendor &#8220;1.4&#215; faster inference&#8221; headline hides: faster does not mean cheaper-per-token unless the price scales sublinearly with the throughput.</p><p><strong>The honest derived improvement, on-demand vs on-demand, is ~2.9&#215; cheaper per million tokens.</strong> On spot vs spot, where B200 spot pricing is currently aggressive (Spheron $2.12/hr is lower than H100 on-demand), the improvement reaches <strong>~8&#215; cheaper</strong>.</p><p>This is materially different from NVIDIA&#8217;s &#8220;15&#215; lower cost per million tokens&#8221; headline. The 15&#215; number is real, but it compares <strong>rack-scale GB200 NVL72 air-cooled to H100 HGX air-cooled</strong> on MoE workloads (GPT-MoE-1.8T projected throughput, per the NVIDIA datasheet), not single-GPU Llama 3.3 70B. NVIDIA&#8217;s announcement post is precise about this: the cost-per-million-tokens claim applies to &#8220;AI factory economics&#8221; at rack scale, not the single-GPU comparison most readers are actually evaluating.</p><p>The 3&#215; to 8&#215; range is what a deployment engineer should plan around. The 15&#215; number is what a CFO will hear from a vendor presentation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p79B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p79B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 424w, https://substackcdn.com/image/fetch/$s_!p79B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 848w, https://substackcdn.com/image/fetch/$s_!p79B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 1272w, https://substackcdn.com/image/fetch/$s_!p79B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p79B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png" width="1456" height="844" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:844,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198647,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p79B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 424w, https://substackcdn.com/image/fetch/$s_!p79B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 848w, https://substackcdn.com/image/fetch/$s_!p79B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 1272w, https://substackcdn.com/image/fetch/$s_!p79B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f47707-f7c6-4b28-a69e-f74577eae968_2279x1321.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chart 5. Cost per million output tokens at 50 tok/s/user, from Spheron&#8217;s published per-hour rates times InferenceMAX v1 throughput. The honest single-GPU improvement is ~2.9x on-demand and ~8x on spot, well short of NVIDIA&#8217;s 15x headline, which is a rack-scale GB200 NVL72 MoE-at-BF16 comparison.</em></p><h3>3.2 The migration cost the price-per-token comparison hides</h3><p>Three categories of migration cost do not appear in the $/M-tokens calculation but determine whether the migration actually saves money.</p><p><strong>Infrastructure.</strong> B200 HGX runs at 1,000W per GPU vs H100 SXM5&#8217;s 700W. GB200 in the NVL72 configuration runs at up to 1,200W per GPU. Rack density falls accordingly, and air-cooling becomes marginal at B200&#8217;s power level. Liquid cooling is the production path NVIDIA assumes. Data centers without liquid cooling either run fewer GPUs per rack (reducing the effective $/hr improvement) or deploy in a different facility (capital expenditure not in the per-hour rate). For cloud renters the infrastructure cost is bundled into the per-hour price; for on-premise buyers it is not, and it can easily exceed the GPU hardware cost over a deployment lifetime.</p><p><strong>Software maturity.</strong> vLLM v0.12.0 is the current Blackwell-ready release as of the Llama 3.3 70B recipe page. NVFP4 support landed first in TensorRT-LLM (full); vLLM has shipped what NVIDIA describes as &#8220;early NVFP4 support&#8221; with the second-generation Transformer Engine path; SGLang has it on the roadmap. Production deployment in 2026 means accepting a less-mature software stack than Hopper&#8217;s, with the kernel and scheduler optimizations of Issue #1 (FlashInfer integration, Triton attention, FA3-vs-FA4 selection, CUDA graph capture) still being landed across the three engines for the new architecture. The Hopper stack benefits from 18 additional months of production hardening that Blackwell will need time to accumulate.</p><p><strong>Supply.</strong> Hardware order backlogs through mid-2026 mean on-premise B200 purchases compete with hyperscaler allocations. Cloud rental is the practical path, and cloud pricing on B200 is more volatile than on H100. Spheron&#8217;s $2.12/hr spot rate is real but not guaranteed across providers or time. The H100 ecosystem is mature enough that a one-year reserved instance commits to a known price; B200 commits are quoted but the secondary-market spread is wider.</p><h3>3.3 A worked migration example</h3><p>Take the Issue #1 worked example: a chat product at 50 requests/second peak sustained, 800 input tokens, 400 output tokens. Decode dominates; the output token rate is 50 &#215; 400 = 20,000 tok/s. On H100 FP8 at production interactivity, a single GPU sustained ~1,500 TPS, requiring 14 H100s and costing ~$27,000/month on-demand or ~$17,000/month at spot.</p><p>On B200 NVFP4 at the same interactivity, a single GPU sustains ~10,000 TPS, so the same workload needs <strong>~2 B200 GPUs</strong>. Cost: $6.03/hr &#215; 2 GPUs &#215; 730 hr/month = <strong>~$8,800/month on-demand</strong>, or ~$3,100/month on spot. The on-demand savings vs H100 are roughly $18,000/month; the spot savings are roughly $14,000/month, depending on which side of the comparison gets spot pricing.</p><p><strong>Three caveats</strong> sharpen the picture. First, the 2-GPU B200 deployment has dramatically more KV headroom (~270 GB aggregate budget vs ~16 GB on 2 H100s), so the same hardware can absorb longer sequences or higher concurrency before scaling out further. </p><p>Second, prefill (40,000 in-tok/s required) needs only <strong>one B200 GPU&#8217;s worth of prefill capacity </strong>(~96,000 tok/s ceiling vs the workload&#8217;s 40,000), so the deployment is decode-bound everywhere. </p><p>Third, the autoscaling math improves: 2 GPUs is a less granular floor than 14, but the per-GPU economics make <strong>off-peak headroom</strong> less costly. A peak-to-average ratio of 2&#215; on H100 means paying for 28 GPU-hours per peak-hour-equivalent of demand; on B200 it means paying for 4. </p><p>The autoscaling discontinuities matter less when each GPU is doing more work.</p><h3>3.4 What the per-hour rate actually pays for</h3><p>The single most important fact about inference TCO is structural, and SemiAnalysis states it directly in the InferenceMAX v1 analysis: <strong>colocation rent and electricity together are typically less than 20% of total cost of ownership.</strong> </p><p>The dominant term is the GPU vendor&#8217;s gross margin. In SemiAnalysis&#8217;s words, some vendors charge &#8220;up to 75% gross margins (i.e. a 4&#215; markup over cost of goods sold), while others less than 50% gross margins (i.e. less than 2&#215; cost of goods sold).&#8221;</p><p>This reframes the migration question. A naive analysis treats the B200&#8217;s higher power draw (1,000W vs 700W) as a major cost penalty. It is not: if a B200 delivers <strong>20% fewer tokens per provisioned megawatt</strong> than some alternative, that translates to less than 4% of TCO (20% of the under-20% energy share). </p><p>The migration economics are dominated by the price you pay for the silicon, which is set by vendor margin and supply, not by the power bill. </p><p>This is why the <strong>spot-vs-on-demand spread </strong>(a ~3&#215; swing in the per-hour rate) dwarfs every efficiency consideration in the cost-per-token math: the per-hour rate is mostly margin, and margin is what moves between spot and on-demand.</p><p>The corollary for a buyer: the highest-leverage variable in <strong>Blackwell migration economics</strong> is procurement, not engineering. Securing B200 capacity at the $2.12/hr spot rate rather than the $6.03/hr on-demand rate is a larger cost-per-token lever than any kernel optimization, any precision choice, or any batching strategy. </p><p>The engineering determines the throughput; the contract determines most of the cost.</p><h3>3.5 Power efficiency: the megawatt view</h3><p>For power-constrained deployments (the binding constraint for many AI data centers in 2026), throughput per provisioned megawatt is the relevant metric rather than throughput per GPU. </p><p><strong>SemiAnalysis InferenceMAX v1</strong> measured this directly, though the published Llama-vs-Blackwell power numbers are for gpt-oss 120B rather than Llama 3.3 70B, so they should be read as a Blackwell-generation indicator rather than a Llama-specific figure.</p><p>On <strong>gpt-oss 120B FP4</strong>, an HGX H100 processes ~900,000 tok/s per all-in provisioned megawatt; an HGX B200 processes ~2.8 million tok/s per megawatt, a ~3&#215; generational power-efficiency gain. At a higher interactivity level of<strong> ~180 tok/s/user</strong>, the B200 advantage widens to ~7&#215;, because the H100 falls off its efficiency curve faster at high interactivity than the B200 does.</p><p> (<em>Provisioned megawatt here means all-in utility power including cooling and electrical-distribution overhead, not just GPU TDP, which is the honest denominator for a data-center operator.</em>)</p><p>The <strong>~3&#215; power-efficiency improvement</strong> roughly tracks the ~4&#215; throughput improvement, which is expected: the B200&#8217;s TDP (1,000W) is ~1.43&#215; the H100&#8217;s (700W), and 4&#215; throughput / 1.43&#215; power &#8776; 2.8&#215; efficiency. </p><p>For a Llama 3.3 70B deployment specifically, the power-efficiency improvement should land in the same 3&#215; range by the same arithmetic, but we flag that the published megawatt figures are gpt-oss numbers and the <strong>Llama-specific power measurement</strong> is one of the things Issue #3 will report directly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PJzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PJzh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 424w, https://substackcdn.com/image/fetch/$s_!PJzh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 848w, https://substackcdn.com/image/fetch/$s_!PJzh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 1272w, https://substackcdn.com/image/fetch/$s_!PJzh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PJzh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png" width="1456" height="781" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:781,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:174161,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/199710189?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PJzh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 424w, https://substackcdn.com/image/fetch/$s_!PJzh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 848w, https://substackcdn.com/image/fetch/$s_!PJzh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 1272w, https://substackcdn.com/image/fetch/$s_!PJzh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa538b84b-fbb5-4585-9067-dfe8682492e2_2332x1251.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chart 6. Throughput per provisioned megawatt, H100 vs B200, on gpt-oss 120B FP4 (the published InferenceMAX figures are for gpt-oss, not Llama 3.3 70B, and are shown here as a Blackwell-generation indicator). The ~3x gain at production interactivity widens to ~7x at high interactivity because the H100 falls off its efficiency curve faster.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p>
      <p>
          <a href="https://www.thesoftwarefrontier.com/p/the-blackwell-migration-question">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How Systems Really Fail, Part IV]]></title><description><![CDATA[The complexity problem: why no one designed the system, why no one fully understands it, and why it works anyway.]]></description><link>https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iv</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iv</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Wed, 03 Jun 2026 16:26:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FgTX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FgTX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FgTX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 424w, https://substackcdn.com/image/fetch/$s_!FgTX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 848w, https://substackcdn.com/image/fetch/$s_!FgTX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 1272w, https://substackcdn.com/image/fetch/$s_!FgTX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FgTX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png" width="1118" height="1407" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1407,&quot;width&quot;:1118,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2815007,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FgTX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 424w, https://substackcdn.com/image/fetch/$s_!FgTX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 848w, https://substackcdn.com/image/fetch/$s_!FgTX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 1272w, https://substackcdn.com/image/fetch/$s_!FgTX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd34f5d-0905-4eea-b838-8eb361e2567b_1118x1407.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The System Has No Architect</h2><p>The <strong>first essay</strong> argued that distributed systems fail in the spaces between their components.  The second argued that the system you observe is a delayed, partial projection of a system that has already moved on. </p><p>The third argued that the <strong>control loops</strong> you close on that projection cannot stabilise the system you have. </p><p>Each was a<strong> structural failure</strong> (composition, observation, control) and each was localisable: you could point to where the failure lived. This essay is about the failure that is not localised anywhere.</p><p>The first three essays assumed there is a system to fail. Call it S, the object engineers <em>compose</em>, <em>observe</em>, and <em>control</em>. The composition fails because interfaces hide state. The observation fails because dashboards project S into a representable space and discard the rest.<strong> The control fails</strong> because the loop cannot reach the parts of S that matter. </p><p>In all three cases the failures are gaps between S and the operator&#8217;s representation of it. The argument of this essay is that, past a certain scale, <strong>S is not the object the operators think it is.</strong></p><p>Production distributed systems at scale are complex systems in the technical sense the term carries in the work of <em>Perrow, Cilliers, Snowden, Leveson, and Dekker</em>. Their behaviour is not the sum of their parts. </p><p>Their <strong>failure modes are emergent</strong>, properties of the whole that no component possesses in isolation. They have no architect. They cannot be modelled in their entirety by any individual. </p><p>And they sit, by construction, near the edge of failure, because the same <em>competitive pressure</em> that makes them efficient drives them toward the boundary of safe operation.</p><p>The three earlier failures are manifestations of this. The gaps between components cannot be closed because nobody knows where the gaps are. The dashboards <strong>cannot be made complete </strong>because the system is dimensionally larger than any representation. </p><p>The control loops do not close because the plant is not a plant in the textbook sense; it is an emergent process whose dynamics are not contained in any single component&#8217;s specification.</p><blockquote><p><em>Past a certain scale, the system is not the object the operators think it is. And complex systems do not yield to the methods that produced reliable software at small scale.</em></p></blockquote><p>Four incidents, mechanically reconstructed. </p><ul><li><p>The<strong> 2003 Northeast Blackout,</strong> where a race condition in one utility&#8217;s alarm system propagated, through coupling no one had mapped, into a cascade that affected fifty-five million people. </p></li><li><p>The <strong>AWS S3 outage of February 2017</strong>, where one mistyped command exposed a dependency graph no individual had seen end to end. </p></li><li><p>The <strong>Cloudflare WAF outage of July 2019</strong>, where one regular expression, deployed globally in seconds, took down a large fraction of the internet&#8217;s HTTPS. </p></li></ul><p>And, because the thesis is that these failures are structural rather than historical, a fourth: the <strong>Cloudflare outage of November 2025</strong>, where the same company repeated a structurally identical failure six years later for reasons unrelated to the specific bug. </p><p>Four emergent modes: cascade through coupling, concentration through scale, worst case from interaction, and the recurrence that proves the pattern is not an accident.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What kind of object is a production system?</h2><p>The canonical work is Charles Perrow&#8217;s <em>Normal Accidents</em> (1984), written after Three Mile Island to characterise the systems in which accidents become <strong>statistically inevitable</strong>. </p><p>His framework has <strong>two axes</strong>. Interactive complexity is how many ways the components can affect each other, including ways the designers did not anticipate. </p><p>Coupling is how tightly they are connected in time, whether a failure must propagate immediately or whether there is slack to absorb it.<strong> </strong></p><p><strong>Loosely-coupled</strong>, linear systems (assembly lines, road networks) fail in expected, containable ways. </p><p>Complex, <strong>tightly-coupled systems</strong> (nuclear plants, refineries, the financial system, the internet) fail in ways their operators did not anticipate, and the failures propagate before anyone can intervene.</p><p>Perrow&#8217;s claim is sharp: complex tightly-coupled systems are not made safe by adding safety features. Past a threshold, features add interactions, which add failure modes. The system has accidents as a normal property of operation, not a deviation from it. </p><p>As he restated it in 2012, a <strong>normal accident</strong> is one where everyone tries hard to play safe, but unexpected interaction of two or more failures (interactive complexity) causes a cascade (tight coupling).</p><p>Production distributed systems lie at the far end of both axes. The <em>interactive complexity</em> is enormous: every service has dozens of dependencies, each version-skewed against the others, interacting through coupling paths invisible in the architecture diagrams. </p><p>The coupling is tight: cache TTLs in seconds, retry budgets in tens of milliseconds, timeouts tuned down over years until they barely accommodate the steady state. There is no buffer left.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QiRC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QiRC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 424w, https://substackcdn.com/image/fetch/$s_!QiRC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 848w, https://substackcdn.com/image/fetch/$s_!QiRC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!QiRC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QiRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png" width="1456" height="930" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:930,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:161254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QiRC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 424w, https://substackcdn.com/image/fetch/$s_!QiRC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 848w, https://substackcdn.com/image/fetch/$s_!QiRC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!QiRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5142ec7-ae70-407c-8168-7d084832d99d_1728x1104.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 1, Perrow&#8217;s two-axis taxonomy. Systems in the upper-right quadrant produce accidents as a normal property of operation. Latency optimisation and dependency growth push production distributed systems monotonically toward the extreme corner.</em></p><p><strong>Three frameworks</strong> sharpen the point. Cilliers distinguished the complicated (<em>many parts, knowable structure, holdable in one head</em>) from the complex (<em>interactions producing behaviours not present in any part and not predictable from the specifications</em>). </p><p><strong>Snowden&#8217;s Cynefin</strong> adds the prescription: in complex contexts cause and effect are clear only in retrospect, so operators must probe, sense, and respond rather than analyse and execute. </p><p><strong>Leveson&#8217;s STAMP </strong>reframes accidents as failures of control over the interactions between components, not failures of the components themselves. </p><p>The compressed claim: the methods that produce reliable software at small scale cannot transfer to large scale, because the object they were built to control is no longer the object that exists.</p><div><hr></div><h2>Cascade: the Northeast Blackout, 14 August 2003</h2><p>At 12:15 EDT, the <strong>state estimator at MISO</strong>, the reliability coordinator for much of the Midwest and Ontario, began diverging from its measurements.</p><p> A state estimator infers load and voltage on every line from noisier telemetry every few minutes; when it converges the operator has a coherent picture of the grid, and when it does not the operator is blind to anything not directly measured. </p><p>An analyst traced the divergence to a tripped Indiana line, fixed the topology by hand, then forgot to re-enable the estimator&#8217;s automatic trigger. </p><p>From 12:37 until 16:04, the window in which the cascade silently assembled itself, MISO&#8217;s contingency analysis was effectively offline: operators could no longer answer &#8220;<em>what happens if line X trips?</em>&#8221; because they had no current model of where the lines were.</p><p>At 13:31 EDT, FirstEnergy&#8217;s Eastlake Unit 5 tripped while carrying 612 MW and 400 MVAr of reactive power. The lost generation should have been absorbed; the lost reactive support depressed voltage across northern Ohio. </p><p>At 14:14 EDT, the alarm processor of GE&#8217;s XA/21 system at <strong>FirstEnergy&#8217;s Akron </strong>control centre deadlocked. The control room was entirely alarm-driven: operators responded to alarms rather than watching the mimic.</p><p> A latent race condition, a deadlock under high event-queue depth, silently stopped the primary alarm server. No error was raised. The backup took over, inherited the same growing queue, and deadlocked too. </p><p>From then until well after the cascade ended, operators believed they were watching a current, stable grid. They were watching a <strong>stale snapshot </strong>from before the cascade started, with no signal it was stale.</p><blockquote><p><em>For three and a half hours the operators were looking at a stale snapshot with no signal that it was stale. The dashboard was not wrong. It was describing a system that no longer existed.</em></p></blockquote><p>At 15:05, 15:32, and 15:41 EDT, three northeast Ohio lines sagged into trees and tripped. Each loss pushed its load onto the survivors, which carried more current, heated, expanded, sagged, and contacted more vegetation. </p><p>The cascade is a <strong>positive-feedback loop</strong> in continuous time: the same physics that produces normal operation produces accelerating failure once a threshold is crossed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bod4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bod4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 424w, https://substackcdn.com/image/fetch/$s_!Bod4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 848w, https://substackcdn.com/image/fetch/$s_!Bod4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 1272w, https://substackcdn.com/image/fetch/$s_!Bod4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bod4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86454,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Bod4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 424w, https://substackcdn.com/image/fetch/$s_!Bod4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 848w, https://substackcdn.com/image/fetch/$s_!Bod4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 1272w, https://substackcdn.com/image/fetch/$s_!Bod4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2132200c-2323-4b23-b4a5-20e0c83176bd_1728x864.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 2. The cascade assembles slowly inside a 3.5-hour blind window, then accelerates. The transition is sharp: before 16:05:57 the event was confined to Ohio and recoverable by load-shedding; after it, the cascade propagated at the speed of protective-relay action.</em></p><p>At 16:05:57 EDT the <strong>Sammis-Star line </strong>tripped, not from a tree but from over-current. That was the transition point. After it the cascade became uncontrolled, propagating across the interconnection in milliseconds to seconds per trip. </p><p>Within eight minutes, lines tripped across Ohio, Michigan, Pennsylvania, New York, and Ontario; the <strong>Eastern Interconnection</strong> separated into islands; generators tripped as frequencies diverged from 60 Hz. By 16:13, roughly 508 units at 265 plants were offline and fifty-five million people had lost power. </p><p>The <strong>US-Canada Task Force</strong> estimated four to ten billion dollars in losses and named four causes: two operational (unmaintained vegetation, failure to shed load in time) and two observational (no effective contingency analysis, failure of the monitoring tools).</p><p>The interesting feature is not the bug. The continental cascade was contingent on the interaction of <strong>three unrelated things:</strong> trees in Ohio, an alarm system that worked correctly except under one event-ordering pattern, and a grid coupled tightly enough that a loss in Ohio reached Ontario in eleven minutes. </p><p>None was dangerous in isolation; the danger was <strong>emergent </strong>from the combination. No component was outside its specified parameters when the cascade began. </p><p>In Leveson&#8217;s terms, the regional control structure had not been designed to enforce the constraint that no single utility&#8217;s blindness shall propagate beyond its control area, and the cascade would have happened the same way had the <strong>XA/21 bug</strong> been a different bug producing the same blindness in the same window.</p><div><hr></div><h2>AWS S3, 28 February 2017</h2><p>At 9:37 AM PST, an authorised S3 engineer ran a routine playbook to remove a few servers from the billing subsystem. One parameter was wrong, and the command removed a much larger set. </p><p>A familiar story so far: a <strong>fat-finger event</strong>, an under-validated tool, a blast radius beyond intent. The interesting part is what happened next. </p><p>The removed servers also supported the index subsystem <em>(metadata and location for every object, required for GET, LIST, PUT, DELETE</em>) and the placement subsystem (which depends on the index). </p><p>Both dropped below the capacity they needed and entered a state requiring a full restart.</p><p>Here the <strong>structural problem </strong>surfaced. AWS later wrote that the full restart, relied on since launch, had not been run on the index or placement subsystems in their larger regions for many years. <strong>S3 in us-east-1</strong> launched in 2006, and the metadata had since grown by orders of magnitude. </p><p>The restart procedure, designed at a far smaller scale, took dramatically longer than expected, because each system coming back had to validate a metadata store far larger than the procedure assumed, and the validation scaled non-linearly. Roughly <strong>four hours of impact.</strong></p><p>What failed during those four hours is the substantive part. </p><p>S3 had quietly become a<strong> hidden dependency</strong> for a remarkable fraction of the public internet: Slack, Quora, Trello, Imgur, Medium, Coursera, GitHub release artefacts, Docker Hub, Adobe Creative Cloud, parts of Zillow and Expedia, each having independently chosen S3, each apparently unaware how many others had. </p><p>The cumulative effect was a single point of failure for a non-trivial percentage of the public internet that no organisation had ever ratified. </p><p><strong>The cutting detail</strong>: AWS&#8217;s own Service Health Dashboard depended on S3 to host its status icons, so it could not visually update to reflect the outage of the service it depended on. The icons stayed green because the red ones could not load.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XT65!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XT65!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 424w, https://substackcdn.com/image/fetch/$s_!XT65!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 848w, https://substackcdn.com/image/fetch/$s_!XT65!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!XT65!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XT65!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png" width="1456" height="870" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:870,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172168,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XT65!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 424w, https://substackcdn.com/image/fetch/$s_!XT65!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 848w, https://substackcdn.com/image/fetch/$s_!XT65!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!XT65!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b8bf19-c9a0-454c-9c38-02f537bc75dc_1728x1032.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 3. The concentration paradox. Each spoke is an independent, individually-rational decision to use the cheapest reliable object store. Nobody ratified the convergence and nobody can see it. The self-loop is the recovery-dependency cycle: the status page for S3 was itself served from S3.</em></p><p>The shape here is not cascade. The failure was <strong>localised to one region</strong> of one service. What made it catastrophic was concentration: an enormous number of independent systems had converged on the same choice without anyone designing the convergence. </p><p>None had chosen to share fate; they had each chosen, separately, the cheapest reliable object store, and that was S3 in us-east-1. The shared fate was <strong>emergent </strong>from the aggregation of independent decisions. </p><p>Network science calls the mechanism <strong>preferential attachment</strong>: independent decisions under similar constraints converge on a few providers, and the providers become single points of failure for the aggregate without anyone designing it.</p><blockquote><p><em>The most reliable service in a category becomes the largest single point of failure for that category, precisely because it is the most reliable. The convergence is rational at the individual level and catastrophic at the aggregate level, and no one can intervene against it because no one can see how many others made the same choice.</em></p></blockquote><p>This is emergence of a different kind from cascade. The blackout&#8217;s was <strong>dynamic</strong>, failures propagating along time-coupled paths in minutes.</p><p> S3&#8217;s was <strong>structural</strong>, dependencies accreting along static paths nobody maintained a record of, over a decade. Both are failures of the whole, in the precise sense that no subsystem was responsible. </p><p>What made the <strong>blast radius</strong> continental was the way thousands of independent decisions had made S3 a chokepoint no individual fully understood. </p><p>AWS&#8217;s fix, <em>beyond safer commands</em>, was to partition the index subsystem into cells so a future restart brings back one cell at a time. </p><p>In <strong>Perrow&#8217;s terms</strong>, that is an explicit attempt to reduce coupling and reintroduce slack between subsystems whose tight coupling had silently emerged from organic growth.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Worst case from interaction: Cloudflare WAF, 2 July 2019</h2><p>At 13:42 UTC, a Cloudflare engineer deployed a minor change to the <strong>WAF Managed Rules</strong>, a new rule meant to improve detection of inline JavaScript used in cross-site-scripting attacks. </p><p>It went out via <strong>Quicksilver</strong>, which propagates configuration to every edge server globally in seconds, by design, so emergency security responses do not wait for a gradual rollout. </p><p>Three minutes later the first page fired. CPU on every Cloudflare edge worldwide had spiked to 100%. Cloudflare&#8217;s network, by 2019 fronting roughly <strong>ten percent of the world&#8217;s HTTPS</strong>, could not process new requests. </p><p>Customer sites returned <strong>502s</strong>; Cloudflare&#8217;s own dashboard, API, and internal tools, all routed through the same edge, went unreachable. At its worst, traffic dropped 82%.</p><p>The rule&#8217;s structural problem was a trailing pattern of the shape <code>.*(?:.*=.*)</code>. A backtracking regex engine handles <code>.*</code> greedily: it matches as much as possible, then, if the rest fails, gives back one character at a time and retries. </p><p>With several unanchored <code>.*</code> constructs in sequence, the number of match positions grows combinatorially in the input length. Against an input that almost matches but diverges late, a pattern of the form <code>.*.*=.*</code> with no equals sign explores on the order of n-choose-2 partition points: </p><p>quadratic, O(n&#178;), for this shape, and exponential, O(2&#8319;), in pathological cases like <code>(a+)+</code>. Quadratic and cubic blow-ups are equally lethal at millions of requests per second.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MhSm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MhSm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 424w, https://substackcdn.com/image/fetch/$s_!MhSm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 848w, https://substackcdn.com/image/fetch/$s_!MhSm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 1272w, https://substackcdn.com/image/fetch/$s_!MhSm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MhSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png" width="1456" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95476,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MhSm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 424w, https://substackcdn.com/image/fetch/$s_!MhSm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 848w, https://substackcdn.com/image/fetch/$s_!MhSm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 1272w, https://substackcdn.com/image/fetch/$s_!MhSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8965ae9e-a4f7-408e-8f15-036887e5642c_1728x912.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><em>Figure 4. Why one regex took down ten percent of the internet&#8217;s HTTPS. PCRE&#8217;s backtracking engine offers no complexity guarantee, so on inputs the test author never wrote, the same rule that was fast in the suite explored a quadratic-to-exponential number of paths. RE2&#8217;s DFA does one state transition per character: linear, regardless of pattern shape.</em></p><p>This pathology, <strong>catastrophic backtracking</strong>, is a known property of backtracking engines (<em>PCRE, Perl, Python&#8217;s re, JavaScript&#8217;s RegExp</em>) on inputs they were not tested against. </p><p>Cloudflare&#8217;s Lua WAF used PCRE because <strong>PCRE </strong>ships with Lua, and PCRE has no complexity guarantee: it attempts every backtrack until it matches or exhausts the search. </p><p>The rule had passed the test suite. It had even been deployed in &#8220;<em>simulate</em>&#8221; mode, where the rule runs against real traffic but blocks nothing, explicitly to catch this, but simulate mode still executes the regex on each request and the CPU cost was identical. </p><p>Two factors made it worse: the WAF Managed Rules pipeline bypassed Cloudflare&#8217;s normal staged rollout (<em>a deliberate speed-against-safety trade for emergency patches</em>), and a<strong> CPU-time safeguard</strong> that would have caught a runaway regex had been removed by mistake during an earlier refactoring whose explicit goal was to reduce CPU consumption.</p><p>The<strong> recovery was constrained</strong> by the same property that caused the failure: the engineers who needed the kill switch could not reach the control panel, because it runs behind Cloudflare&#8217;s own Access product, which routes through the edge. </p><p>They used a rarely-exercised bypass, diagnosed it by 14:02, and killed the rulesets at 14:09. Total impact: about <strong>twenty-seven minutes</strong>, during which Discord, Feedly, Coinbase, and a large share of global HTTPS returned 502s, an aggregate impact orders of magnitude larger than the duration suggests, because Cloudflare had, like S3, become public infrastructure.</p><p>The form is worst case from interaction. The system has performance regimes not exercised by any input used in development or testing, exposed only by realistic input at scale. </p><p>The regex did not fail under any tested input; the engine did not fail in any benchmark; the pipeline functioned as designed. The fault was emergent from the joint behaviour of a regex, an engine, an input distribution, and a deployment process, each correct in isolation. </p><p>This is what <strong>Hollnagel </strong>calls the underspecification problem: a component&#8217;s spec covers anticipated inputs, the system at scale sees inputs no one anticipated, and the behaviour under those is emergent from the implementation, not contained in the spec. </p><p><strong>Cloudflare&#8217;s fix</strong>, beyond restoring the safeguard and staging rollouts, was to migrate from PCRE&#8217;s backtracking to an engine based on a deterministic finite automaton, which guarantees linear time regardless of pattern shape because every input character causes exactly one state transition. </p><p>That is the move <strong>Perrow </strong>recommended in 1984: where possible, reduce the interactive complexity rather than defend against its consequences.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Recurrence: Cloudflare again, 18 November 2025</h2><p>If the <strong>three preceding incidents</strong> were merely history, a sceptic could argue the field has since learned its lessons. </p><p>The strongest evidence against that reading is that the same company, having written one of the <strong>most-cited post-mortems</strong> in the industry about its 2019 outage, produced a structurally identical failure six years later, for reasons again unrelated to the specific bug.</p><p>On 18 November 2025 at 11:05 UTC, Cloudflare deployed a correct permissions change to a <strong>ClickHouse cluster</strong>, granting users explicit access to metadata for shard tables in a schema called r0. </p><p>The problem was a buried assumption elsewhere. A query feeding the Bot Management system listed a table&#8217;s columns and had always, by assumption, returned only the default database&#8217;s columns. </p><p>After the change, it also returned the r0 schema&#8217;s columns, roughly doubling the rows. That output fed directly into a &#8220;<em>feature file,</em>&#8221; the configuration the <strong>Bot Management model </strong>consumes to score every request as bot or human.</p><p>The feature file, normally stable around sixty features, more than doubled to over two hundred. It is regenerated every few minutes and propagated globally, by design, so the system can react to new bot behaviour. </p><p>The <strong>core proxy</strong> preallocates memory for these features and enforces a hard limit of two hundred. When the bloated file hit production it exceeded the limit, and the Rust code did not handle the error gracefully. </p><p>It panicked: <code>thread fl2_worker_thread panicked, called unwrap on an Err value</code>. Every request through the Bot Management path returned a 5xx. </p><p>The blast radius again included Cloudflare&#8217;s own products and downstream a large slice of the consumer internet: <em>ChatGPT, X, Spotify, Canva, Discord</em>. <strong>Matthew Prince</strong> called it the worst outage since 2019.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Euy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Euy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 424w, https://substackcdn.com/image/fetch/$s_!0Euy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 848w, https://substackcdn.com/image/fetch/$s_!0Euy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 1272w, https://substackcdn.com/image/fetch/$s_!0Euy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Euy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png" width="1456" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130263,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0Euy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 424w, https://substackcdn.com/image/fetch/$s_!0Euy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 848w, https://substackcdn.com/image/fetch/$s_!0Euy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 1272w, https://substackcdn.com/image/fetch/$s_!0Euy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652c5550-e5fa-4bda-823c-3dc49600272d_1728x816.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 5, Six years apart, the same shape. A correct local change meets a buried assumption (worst case from interaction); a fast-global-propagation pipeline turns one bad artefact into a worldwide event in minutes (the amplifier); and concentration makes the blast radius the consumer internet.</em></p><p>Read against the three earlier incidents, the recurrence is almost eerie. It is worst case from interaction, in the 2019 sense: a query that <strong>behaved one way for years</strong> behaved differently under a correct change, on an input nobody had specified. </p><p>It is concentration, in the 2017 sense, and it landed only weeks after a major AWS us-east-1 outage on 20 October 2025. And the amplifier is the same amplifier as 2019: the fast global propagation path, the very mechanism that gives the <strong>system its responsiveness</strong>, is what turned one bad artefact into a worldwide event in minutes. </p><p>The deepest point is the one a casual reader misses. Cloudflare did learn the 2019 lesson; they migrated regex engines, added staged rollout, restored safeguards. </p><p>None of it prevented 2025, because the 2019 lesson was about regular expressions and the 2025 failure was about a <strong>database permission</strong>, a buried assumption, a hard-coded limit, and an unwrap that should have been a fallback. The two share no component. They share a structure.</p><blockquote><p><em>The 2019 fix did not prevent 2025, because the two incidents share no component. They share a structure. You cannot patch a structure by patching the part that happened to express it last time.</em></p></blockquote><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The emergent forms, named</h2><p>The incidents are distinct shapes of emergence. Cascade (2003): tight coupling, a <strong>fault propagating faster</strong> than operators can intervene; the reach is a property of the topology, not of any line or processor. </p><p>Concentration (2017, and again 2025): a structural property nobody designed, accumulated through years of independent decisions; the blast radius of a<strong> foundational service&#8217;s failure</strong> is a property of how many systems converged on it, and it grows silently because no organisation can see across all the adoptions. </p><p>Worst case from interaction (2019): regimes not exercised by the inputs the system was tested against, <strong>exposed by the inputs</strong> it actually sees; the failure is in no component&#8217;s specification because no specification covers all realistic inputs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f0jk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f0jk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 424w, https://substackcdn.com/image/fetch/$s_!f0jk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 848w, https://substackcdn.com/image/fetch/$s_!f0jk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 1272w, https://substackcdn.com/image/fetch/$s_!f0jk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f0jk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png" width="1456" height="607" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:607,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91232,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f0jk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 424w, https://substackcdn.com/image/fetch/$s_!f0jk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 848w, https://substackcdn.com/image/fetch/$s_!f0jk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 1272w, https://substackcdn.com/image/fetch/$s_!f0jk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ddfc78-3722-4789-8209-cd2afd1e0529_1728x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 6 &#8212; Three shapes of emergence. In production they compose: concentration creates the conditions for cascade; a worst-case interaction triggers a cascade through tightly-coupled subsystems. November 2025 was all three at once.</em></p><p>The three compose in production. Concentration creates the conditions for cascade: when many systems share fate, a fault in the shared component propagates instantly. </p><p>Worst-case interactions trigger cascades through tightly-coupled subsystems: the regex spike that takes down the edge takes down the dashboard the operators need to<strong> push the kill switch</strong>. </p><p>The deeper claim is that the three failures of Parts I, II, and III are themselves emergent properties of the same kind of system: </p><ol><li><p><em>composition gaps appear at interfaces nobody designed end to end; </em></p></li><li><p><em>observation failures appear because the system&#8217;s behaviour is dimensionally larger than any representation, with the dimensions that matter most during novel failures being exactly the ones the projection discarded; </em></p></li><li><p><em>control failures appear because the loops close on a plant whose dynamics are not contained in any single component.</em></p></li></ol><h2>the projection model</h2><p>It is worth making the claim precise, because precision turns a metaphor into a tool. </p><p>Let S be the system as it actually is: the full state, every dependency, every cached value, every in-flight retry, every input it will ever see. S lives in an enormous, <strong>high-dimensional space</strong>, and no human or dashboard holds it. </p><p>What everyone works with is a representation R, obtained by a projection (call it pi) that maps the system into something small enough to fit in a diagram, a metrics store, or one engineer&#8217;s head.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F39-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F39-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 424w, https://substackcdn.com/image/fetch/$s_!F39-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 848w, https://substackcdn.com/image/fetch/$s_!F39-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 1272w, https://substackcdn.com/image/fetch/$s_!F39-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F39-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135043,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F39-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 424w, https://substackcdn.com/image/fetch/$s_!F39-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 848w, https://substackcdn.com/image/fetch/$s_!F39-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 1272w, https://substackcdn.com/image/fetch/$s_!F39-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bcd7644-15db-4908-a176-15dd2e6cf8e9_1728x864.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 7, The unifying picture. Every artefact an operator touches is a point in R. The system lives in S. In the steady state the two agree, because the system spends most of its time in a regime pi captures. An incident is precisely the event of S moving into the part of itself that pi threw away.</em></p><p><strong>The four failures</strong> are four ways pi betrays you. Composition is a failure at the seams of pi: each subsystem is built against its own local projection of its neighbours, and where two such projections meet, the assumptions need not agree (<em>the 2025 query is a perfect specimen</em>). </p><p><strong>Observation</strong> is the claim that pi loses, preferentially, the dimensions that carry the most signal during a novel failure, because a dashboard is built from the dimensions that mattered in past incidents and a novel incident is by definition one whose decisive dimension was not salient before. </p><p><strong>Control</strong> is the observation that the loop closes on R, not S: it can be perfectly stable on R and diverging on S, and the operator sees stability until the divergence reaches a dimension pi still tracks. </p><p><strong>Emergence</strong> is the statement that the dimension of S vastly exceeds that of any R a human or tool can hold, and that no enrichment of R closes the gap, because every dimension you add to the dashboard expands the interaction surface of the system you are charting. </p><p>That is the formal <strong>residue of Perrow</strong>: adding observation is adding components, adding components is adding interactions, and the system you can fully observe is, for that reason, not the system you have.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The system has no architect</h2><p>What follows, and what engineers trained on smaller systems underestimate, is that production distributed systems at scale have no architect. This is <strong>not about staffing</strong>. It is structural. </p><p>The system is the accumulated artefact of thousands of independent decisions by hundreds of engineers over years, most of whom have left, none charged with maintaining a coherent end-to-end model. </p><p>The architecture diagrams capture, at best, the model of one engineer, on one day, of the slice they were looking at. The whole system is not in any document because it is not in any individual&#8217;s head.</p><p>This is the <strong>Conway&#8217;s Law observation</strong>, after Mel Conway&#8217;s 1968 paper that organisations design systems mirroring their communication structure. The deeper version is Daniel Dennett&#8217;s phrase: competence without comprehension. </p><p>The system serves traffic, accepts payments, delivers content, without any individual comprehending the full mechanism. The competence is real; the comprehension exists nowhere. There is a parallel from political economy. </p><p><strong>Hayek&#8217;s 1945 paper</strong> argued against central planning on epistemic grounds: the knowledge to coordinate a complex economy does not exist in any single mind, but is distributed across millions of agents holding local, tacit knowledge that cannot be efficiently aggregated. </p><p>The argument transfers directly. Conway, Dennett, and Hayek point at the same fact from three lineages, which suggests it is real and not an artefact of one discipline.</p><p>This is<strong> hard for engineers</strong> to accept in proportion to how good they are. The instinct that produced their career, that one can read the code and understand the system, works up to about the size of a single service team. </p><p>Past that it stops, and the engineer who insists on retaining the model loses the ability to operate the system. The mature posture is not to know the system but to navigate it: <strong>Charity Majors</strong> describes moving from understanding systems to interrogating them; the resilience-engineering school calls it coping with complexity, the operator inside the system rather than above it. </p><p>In a <strong>complicated system</strong> you learn the system and then operate it. In a complex system you operate the system and learn what you can, knowing some of what you learn will be obsolete by the time you have learned it.</p><p>The competent on-call engineer at scale is therefore not the one who knows the most, but the one with the best discipline for forming hypotheses, sizing interventions, observing responses, and updating beliefs. </p><p>That discipline is what decides whether an incident lasts twenty minutes or twenty hours.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Drift into failure</h2><p>There is a phenomenon, named by Sidney Dekker in <em>Drift into Failure</em> (2011) and rooted in <strong>Jens Rasmussen&#8217;s 1997 paper</strong>, that explains how complex systems reach the boundary of safe operation without any single decision being responsible. </p><p>A system operates in a state space bounded by three pressures, each a gradient. Economic pressure pushes toward higher throughput at lower cost. Workload pressure pushes toward simpler procedures and less manual intervention. </p><p>The third is <strong>the boundary</strong> of functionally acceptable performance, the safety boundary, beyond which catastrophic failure is statistically expected.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zQGk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zQGk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 424w, https://substackcdn.com/image/fetch/$s_!zQGk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 848w, https://substackcdn.com/image/fetch/$s_!zQGk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!zQGk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zQGk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:164174,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zQGk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 424w, https://substackcdn.com/image/fetch/$s_!zQGk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 848w, https://substackcdn.com/image/fetch/$s_!zQGk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!zQGk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c17537b-5af8-4dc8-8551-6ab27cc844b0_1728x1056.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 8: Rasmussen&#8217;s state space. Two boundaries (economic, workload) are quantified, visible, and rewarded. The third, safety, is unmarked and gives no warning at the crossing, because the crossing is statistical, not deterministic. Each locally-rational optimisation removes slack and nudges the operating point along the cost gradient.</em></p><p>The three pressures are <strong>not balanced</strong>. Economic and workload pressure act continuously and visibly: quantified in dashboards, named in reviews, the subject of every planning cycle. The safety boundary is invisible. </p><p>The system gives no warning at the crossing, because the crossing is statistical: a <strong>system past the boundary </strong>does not fail immediately, it fails with elevated probability per unit time, empirically indistinguishable from operating safely until it fails. </p><p>The result is a <strong>steady migration</strong> toward the safety boundary, driven by the visible pressures, the boundary unobserved until it is crossed.</p><p>Applied to production systems: every optimisation that reduces latency or cost is a step toward the boundary. Every timeout tightened for P99, every retry budget cut, every <em>cache TTL shortened</em>, every connection pool sized closer to peak. </p><p>Each is <strong>locally rational</strong>, and the cumulative effect is to remove slack. Slack absorbs perturbations; a system with no slack is tightly coupled, the condition under which interactive complexity becomes accidents. The drift is not a decision to operate unsafely. </p><p>It is many decisions to operate slightly more efficiently, and at no point did anyone authorise the trajectory. </p><p><strong>Per Bak&#8217;s self-organized criticality (1987) </strong>showed that systems under continuous driving organise themselves to a critical point, where a small perturbation can produce an avalanche of any size, with sizes following a power law (<em>the two-dimensional exponent is commonly quoted near 1.2, though it is non-universal and contested; the heavy tail is robust regardless</em>). </p><p>Carlson and Doyle&#8217;s <strong>Highly Optimized Tolerance (1999)</strong> is more directly applicable: systems explicitly optimised for robustness against expected disturbances become fragile against unexpected ones, producing power-law failures without any external driving. </p><p>They are critical because they were engineered to be, the optimisation having consumed every margin against the perturbations the optimiser did anticipate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0lM8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0lM8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 424w, https://substackcdn.com/image/fetch/$s_!0lM8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 848w, https://substackcdn.com/image/fetch/$s_!0lM8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 1272w, https://substackcdn.com/image/fetch/$s_!0lM8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0lM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88371,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/190603006?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0lM8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 424w, https://substackcdn.com/image/fetch/$s_!0lM8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 848w, https://substackcdn.com/image/fetch/$s_!0lM8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 1272w, https://substackcdn.com/image/fetch/$s_!0lM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1b494-bd8f-44c6-a36c-6346fc322a9b_1728x864.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 9. Why &#8220;that could never happen at our scale&#8221; is a category error. Optimised systems produce power-law failure sizes, not the thin-tailed distribution intuition assumes. The catastrophic outage is not an outlier off the curve. It is a point on the curve, in the tail the optimisation built.</em></p><p>The implication is <strong>uncomfortable</strong>. The reliability of a mature system is not a function of how careful its operators are. </p><p>It is a function of how much slack they have preserved against the cost pressure that would remove it. </p><p><strong>A team that fights</strong> to keep slack, holding <em>redundant capacity</em>, leaving timeouts loose, refusing to push retry budgets to the minimum, is doing the most important reliability work, and it is the work least visible in the metrics. </p><p>This is also why incidents cluster: with margin, small perturbations are absorbed; at the boundary, the same perturbations cascade. </p><p>Incident frequency is <strong>perturbation frequency</strong> times the probability the system is currently at the boundary, and that probability rises with drift, and drift is monotonic without deliberate effort against it. </p><p>The system gets less safe over time even as no one decides to make it less safe.</p><blockquote><p><em>Drift is the boundary approaching. Cascade is what happens when the boundary is crossed. The system gets less safe over time even as no one decides to make it less safe.</em></p></blockquote><div><hr></div><h2>What operations looks like under emergence</h2><p>The practices that work here are the <strong>post-Perrow tradition</strong> of resilience and site-reliability engineering, tied together by the recognition that no model is reliable and that operations must proceed by probe-and-respond. </p><p><strong>Chaos engineering</strong>, deliberately injecting failures into production, rests on the premise that behaviour under failure cannot be predicted from the components but only discovered by observation, so the system must be perturbed deliberately, with bounded blast radius and operators present.</p><p>Error budgets make <em>Rasmussen&#8217;s invisible boundary</em> visible in the same units as the economic pressure on the other side: define a <strong>service-level objective</strong>, track consumed unavailability as a budget, and slow releases when it is exhausted. </p><p>The arithmetic is sobering:</p><ul><li><p><em>99.9 percent availability allows about 43.8 minutes of downtime per month.</em></p></li><li><p><em>99.95 percent allows about 21.9 minutes; a single cascade exhausts it.</em></p></li><li><p><em>99.99 percent allows about 4.38 minutes; a 27-minute Cloudflare-style event blows two quarters of budget.</em></p></li><li><p><em>99.999 percent allows about 26 seconds per month, essentially no human-in-the-loop budget at all.</em></p></li></ul><p>The budget is the boundary, denominated in minutes, which is why high-availability targets and aggressive release velocity are in genuine, not rhetorical, tension. </p><p><strong>Blameless post-mortems </strong>are a technical practice as much as a cultural one: the information value of a post-mortem is proportional to the accuracy of the reporting, and accuracy is proportional to the safety the reporter feels. </p><p><strong>Ron Westrum&#8217;s</strong> typology (pathological, bureaucratic, generative) formalises this: only generative cultures, where bad news is welcomed because it is operationally valuable, produce the post-mortems complex systems need. </p><p><strong>Game days </strong>and failure injection are variants of one principle: behaviour under stress cannot be modelled, it must be observed, and the observation must be staged before the real failure, because in the real failure operators cannot slow down to learn.</p><p>What unites these is the <strong>acceptance of irreducibility</strong>: the model is incomplete by construction and is updated by observation under controlled perturbation, not by deduction from specification. Operations becomes an empirical discipline, closer to experimental science than to mechanical engineering. </p><p>The practitioners who absorb this invest in observability (<em>not because dashboards reveal the truth, but because they are the only handle on a system you cannot model</em>), in chaos engineering (because the alternative is discovering breakages during real incidents), and in slack (because they have read enough post-mortems to know which systems fail catastrophically). </p><p>The ones who have <strong>not make the opposite choices</strong> and look reasonable doing it: eliminate slack to cut cost, reduce observability to cut noise, avoid chaos engineering because it occasionally causes outages. </p><p>They discover, eventually, that they have built a system both more efficient and more catastrophic when it fails, in proportion to the savings.</p><h3>Operators as the homeostatic mechanism</h3><p>There is a way to name what operators are, structurally, that systems biology names directly. </p><p>In an organism, homeostasis <strong>maintains internal state </strong>against perturbation: temperature, glucose, pressure, pH within a fraction of a unit despite continuous challenge. </p><p>The mechanisms are <strong>not centralised</strong>; they are distributed across hundreds of overlapping negative-feedback loops, none responsible for the overall stability. </p><p><em>No part of the body</em> is in charge of being alive; being alive is what the parts, in aggregate, are doing.</p><p>The operator function is the homeostatic mechanism in this precise sense. Operators are the <strong>negative-feedback loop </strong>that prevents Rasmussen drift from becoming Rasmussen crossing, the slack reintroduced when cost-cutting removes it elsewhere, the compensating force against every gradient that would otherwise push the system over the boundary. </p><p>The<strong> system is stable </strong>not because the engineering is good but because operators continuously absorb the perturbations the engineering does not address. </p><p>The on-call engineer <strong>reverting a deployment</strong> at 03:47 UTC is not interrupting normal operation. They are participating in it. The reverting is what the system is doing, through them, to keep itself alive.</p><blockquote><p><em>The systems do not work. The operators work, and the systems usually fail only when the operators lose the ability to see, infer, intervene, or comprehend.</em></p></blockquote><p>This is structural and testable. Remove the operators and the system enters its statistically expected failure regime within hours to days. </p><p>With<strong> competent operators present</strong>, it runs, degraded but functional, for years against perturbations that would individually crash it. </p><p>The competence is in the loop, not in the system. Yet organisations reward the visible artefacts (<em>clean architectures, well-factored code, comprehensive tests, capacity plans</em>) and underinvest in the invisible work of compensating, absorbing, and quietly maintaining slack, treating it as a cost centre rather than the production function it is. </p><p>The engineering <strong>does not produce reliability.</strong> Reliability is the output of the engineering acted on by the operators, in a loop the organisation rarely acknowledges. </p><p>This also explains why, beyond a threshold, more automation worsens outcomes.<strong> Lisanne Bainbridge&#8217;s 1983 paper</strong> &#8220;<em>Ironies of Automation</em>&#8221; catalogued it: automating the routine cases removes the operators&#8217; opportunity to maintain situational awareness, the very faculty they need when the automation fails on a case it was not designed for. </p><p>The gains accrue early and visibly; the costs accrue late and on the days that matter most. </p><p>The discipline that follows is to treat operators as the load-bearing element, not the engineering: build the observability they need to interrogate the system,<strong> build the chaos practice </strong>they need to keep their model current, and do not automate them out of the loop; automate the routine inside their loop, so they keep the situational awareness they will need when the automation fails.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Closing the series</h2><p>Four essays. Four structural failures. </p><p><strong>Composition:</strong> distributed systems fail in the spaces between their components, because no individual designed both sides of the interfaces. </p><p><strong>Observation:</strong> the system you see is a delayed, partial, aggregated projection, and the moments when projection and system disagree are the moments that matter most. </p><p><strong>Control:</strong> the loops you close on the projection cannot stabilise the system, because the plant moves faster than the controller can sample, the actuator is in the blast radius, or the feedback path passes through the failure. </p><p><strong>Emergence:</strong> the system is bigger than any of these admits. It has no architect. It sits at the boundary by construction, because the pressure that makes it efficient drives it there, and its failure modes are properties of the whole that no model in any individual head can predict.</p><p>These are not exceptional. They are the structural conditions under which production systems at scale operate. </p><p>The systems do not work because they were engineered to work; they work because the operators, from the SRE on call at 03:47 UTC to the architect <strong>drawing dependency graphs</strong> in a Confluence document nobody updates, are continuously compensating for the gaps the engineering left open. </p><p>What this means for the engineer is twofold. </p><p><strong>The technical</strong>: the practices that increase survivability (slack, observability, chaos engineering, error budgets, blameless post-mortems, out-of-band control, recovery-dependency mapping, drift monitoring) are expensive, and they are what separates systems that fail gracefully from systems that fail catastrophically. </p><p><strong>The epistemic:</strong> the appropriate posture is structural humility, knowing the system is bigger than the model, the model is incomplete by construction, and any incident might be the one that reveals a regime nobody had characterised.</p><p>The pager will go off again. The <strong>dashboards </strong>will be lying again. The interventions will assume conditions that have ceased to hold. The system will have drifted, since the last incident, slightly closer to the boundary. </p><p>The work is the same work, performed by the same kind of people, against systems that none of them <strong>designed </strong>and none of them fully understand. </p><p>The interesting thing is that this works at all. The accidents are kept rare by humans doing a job whose structural conditions make it nearly impossible, and <em>doing it well enough</em> that the rest of the profession can pretend the systems work on their own. They do not. They never have. </p><p>The <strong>serious engineer&#8217;s contribution</strong>, past a certain seniority, is to understand this and act accordingly: to design systems that respect what the operators have to do, build the tools that make their job possible, and write the practices down so the next generation does not learn them from incidents. </p><p>The job is hard. It is also the <strong>most important job</strong> in the engineering function. The systems do not work without it. They never will.</p><div><hr></div><h2>One more thing&#8230;.</h2><p>I wrote a<strong> deep CUDA guide </strong>from exactly this perspective: not isolated tricks, but how to reason about the GPU as a coupled dynamical system whose performance regimes and failure modes (<em>occupancy collapse, memory-bandwidth thrashing, warp divergence, pipeline stalls, register spilling, bank conflicts, tensor-core underutilisation</em>) are structurally the same kinds of seam failures the four essays of this series have described. </p><p>If the framework resonates, the<strong> guide is where it lands in code.</strong></p><p><strong>[Read the CUDA Guide on Gumroad &#8594; <a href="https://lorenzobrada.gumroad.com/l/cuda_mastery">CUDA Mastery</a>]</strong></p><p><em>This is the final essay in the series How Systems Really Fail. The four parts are best read in order, but each can stand alone.</em></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Llama 3.3 70B Benchmark Problem]]></title><description><![CDATA[What a single H100 SXM5 can and cannot do with Llama 3.3 70B at FP8, a first-principles audit of vLLM, SGLang, and TensorRT-LLM, with the deployment decisions that follow]]></description><link>https://www.thesoftwarefrontier.com/p/the-llama-33-70b-benchmark-problem</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/the-llama-33-70b-benchmark-problem</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Thu, 28 May 2026 22:52:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JCws!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JCws!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JCws!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!JCws!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!JCws!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!JCws!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JCws!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png" width="1122" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1920887,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/198570949?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JCws!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!JCws!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!JCws!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!JCws!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b71596-8082-40e1-9897-7ca514525a1b_1122x1402.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction</h2>
      <p>
          <a href="https://www.thesoftwarefrontier.com/p/the-llama-33-70b-benchmark-problem">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How Systems Really Fail, Part III]]></title><description><![CDATA[The control problem: why the loop you close cannot stabilise the system you have, why every remediation has a half-life, and what it means to act on a system whose state you cannot see.]]></description><link>https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iii</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iii</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Wed, 27 May 2026 21:21:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HYBy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HYBy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HYBy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!HYBy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!HYBy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!HYBy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HYBy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png" width="1402" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2286644,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thesoftwarefrontier.com/i/198570858?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HYBy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!HYBy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!HYBy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!HYBy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98fccdc-1c43-4e0f-a7b9-4379bd28ab22_1402x1122.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Intro</h2><p>The <a href="https://open.substack.com/pub/softwarefrontier/p/how-systems-really-fail-part-i?r=3c7w5a&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">first essay</a> argued that distributed systems fail in the spaces between their components, and that those spaces are structurally opaque. <a href="https://open.substack.com/pub/softwarefrontier/p/how-systems-really-fail-part-ii?r=3c7w5a&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">The second</a> argued that the <strong>system you observe</strong> is not the system that exists, that aggregation destroys signal, and that the operator&#8217;s dashboard is a delayed, partial, instrumented projection of a system that has already moved on.</p><p>This one is about what happens next.</p><p>Once you have accepted that the <strong>system is opaque</strong> and that your view of it is incomplete, you still have to act. The pager has gone off. The error rate has climbed from a green 0.02% to a red 12%. Customers are tweeting. Your manager is on the call. </p><p> The runbook has three pages and none of them describe this. You have ninety seconds before the next escalation tier joins, and you have to decide whether to roll back, fail over, shed load, drain a region, or do nothing and let the system <strong>find its own equilibrium</strong>.</p><p>This essay is about that decision. Not the politics of incident response, not the cultural question of blameless post-mortems, but the structural problem underneath: you are closing a control loop on a system whose state you <strong>cannot fully observe</strong>, whose composition you do not fully control, and whose response to your inputs is, in the regime where you most need to act, nonlinear, delayed, and frequently the opposite of what you expected.</p><p><strong>Classical control theory</strong> has names for all of this. The combination is called control under uncertainty, and the bounds it places on what an operator can achieve are not soft. They are mathematical. </p><p>They are the reason a competent on-call engineer with a complete runbook and a working dashboard can still make an outage worse, not through error, but by executing the <strong>textbook intervention </strong>against a system that has, by the time the intervention lands, already entered a regime where the textbook does not apply.</p><p>Three incidents, mechanically reconstructed: <em>Knight Capital&#8217;s forty-five-minute, four-hundred-and-forty-million-dollar loss in 2012</em>, where a human control loop sampling at the speed of decision could not stabilise a software loop running at the speed of order entry;<em> the Facebook BGP withdrawal of October 2021</em>, where the control plane that needed to repair the network had been routed through the network it had just withdrawn from; and the <em>AWS Kinesis outage of November 2020</em>, where the remediation that would have ended the failure could not proceed because it depended on the very subsystem the failure had taken down.</p><p>The pattern beneath all three is the same. The system entered a regime in which the available control inputs were <strong>either too slow</strong>, structurally unable to reach the failing component, or themselves dependent on the failure being already fixed. </p><p>The operators were <strong>not negligent</strong>. They were operating inside a loop whose closure conditions had been silently violated, and the loop did what control loops do when their closure conditions fail: it stopped controlling.</p><p>The interesting question, again, is why this is structural.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The control loop, mechanically</h2><p>A control loop is a four-stage cycle: a <em>plant</em> whose state evolves over time, a <em>sensor</em> producing measurements, a <em>controller</em> computing corrective inputs against a setpoint, an <em>actuator</em> applying those inputs. </p><p>The plant&#8217;s new state is measured, and the cycle repeats.</p><p>In a textbook loop, all four stages are coupled tightly enough that the system can be analysed as a single dynamical system. The classical results, like <strong>Nyquist stability, Bode gain and phase margins, Lyapunov functions, Kalman observers,</strong> assume this coupling. </p><p>Given a plant with known dynamics, a sensor with bounded noise, a controller with a known transfer function, and an actuator with bounded authority, they tell you whether the closed loop is stable and how it responds to disturbances.</p><p>A production distributed system violates every one of these assumptions.</p><p>The plant is <strong>not one system</strong>; it is a composition of subsystems each with their own dynamics, coupled through interfaces that hide most of the relevant state. </p><p>The sensor is the <strong>observability pipeline</strong> of Part II, with tens of seconds of phase lag and aggregation that destroys precisely the signal the controller needs. </p><p>The controller is split across at least three actors at different sampling rates: <strong>automated systems</strong> (autoscalers, load balancers, schedulers) running at the speed of metric collection; on-call humans running at the speed of cognition under stress; incident commanders running slower still. </p><p>The actuator is whatever combination of <strong>API calls</strong>, configuration pushes, deployment rollbacks, and SSH sessions the operator can bring to bear, each with its own latency, blast radius, and probability of producing the opposite of what was intended.</p><p>The result is a control loop whose stability margin is set by the slowest, noisiest, most delayed component in the chain. In the steady state, this is fine: the loop has <strong>plenty of margin</strong> and corrections are small. In an incident, the margin evaporates, and the loop&#8217;s behaviour is determined by parts of the system no one had thought to characterise.</p><p>There is a precise name for this in control theory. The formal definitions are Kalman&#8217;s (1960): a system is <em>observable</em> if its internal state can be reconstructed from a<strong> finite history of outputs</strong>; <em>controllable</em> if any state can be reached from any other state in finite time by an admissible input sequence. </p><p>In a healthy production system, both hold approximately. In an incident, one or both fails. Observability fails when the failure mode is invisible to the metrics, as in <strong>Slack&#8217;s autoscaler chasing CPU</strong> while threads waited on a degraded network. Controllability fails when the action that would fix the problem is no longer reachable, as we are about to see in three different forms.</p><p>When both fail at once, the operator is, in the precise technical sense, no longer controlling the system. They are watching it. Interventions may correlate with eventual recovery, but the causal chain from action to outcome has been severed.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>When the human loop is too slow: Knight Capital, 1 August 2012</h2><p>The canonical case for control-loop timescale mismatch is not a distributed-systems outage in the conventional sense. </p><p>It is a <strong>financial one</strong>, and the reason it belongs here is that it isolates, more cleanly than any web-scale incident, what happens when the human control loop runs orders of magnitude slower than the software loop it is supposed to govern.</p><p>Knight Capital Americas was, on the morning of 1 August 2012, the largest U.S. retail market-maker, market-making roughly 17% of NASDAQ-listed and 16% of <strong>NYSE-listed stocks</strong>. Its core function was posting bid and ask quotes on thousands of stocks, capturing the spread, managing inventory.</p><p>The platform that did this was <strong>SMARS</strong>, the Smart Market Access Routing System, running for over a decade.</p><p>On 31 July, NYSE was about to launch the Retail Liquidity Program (RLP). Knight had updated SMARS to support RLP order types. </p><p>The update repurposed a flag that since 2003 had activated a piece of dormant code called <code>Power Peg</code>: an old test algorithm, originally designed to buy high and sell low in order to exercise other trading algorithms in a controlled environment, that Knight had stopped using years earlier but never removed from production. </p><p>In 2005, a separate refactor had moved the <strong>cumulative-quantity counter</strong> (the routine that tracked how many shares of a parent order had been filled and was responsible for stopping further child orders once an order was complete) to an earlier point in the SMARS workflow. </p><p>The move disconnected the counter from <strong>Power Peg</strong>, and Knight never retested Power Peg afterwards. In the new RLP code, the flag&#8217;s meaning was repointed at the RLP handler. The deployment was rolled out manually to eight production servers between 27 July and 1 August. Seven of them received the new code. One did not.</p><p>At 9:30 AM Eastern, the U.S. equities market opened. Parent orders flowed into SMARS to be split into child orders and sent to the exchanges. On the <strong>seven correctly-deployed servers</strong>, child orders were generated, sent to NYSE, and matched against the RLP. </p><p>On the eighth, the repurposed flag was being set on incoming RLP-eligible orders, but the code interpreting it was still the old Power Peg algorithm, now without the cumulative-quantity counter that would have throttled it. </p><p>Each parent order on the <strong>eighth server</strong> generated child orders continuously, with no signal back from the fill-confirmation path to indicate the order had been satisfied.</p><p>Over the next forty-five minutes, the eighth server sent more than four million orders into the market in response to 212 customer orders, executing across 154 symbols and ultimately <em>moving 397 million shares</em>. It bought at the offer and sold at the bid hundreds of times per second. Each round trip lost the spread. </p><p>By <strong>contemporary reporting</strong>, Knight&#8217;s losses accumulated at roughly $10M per minute.</p><p>From the perspective of every component except the broken one, the system was behaving correctly. The exchanges were filling the orders. The risk system was receiving the fills. The position-keeping system was updating. </p><p>Knight&#8217;s internal monitoring had generated 97 emails containing &#8220;<em>Power Peg disabled</em>&#8221; between 8:01 and 8:24 AM EST, before the market opened,  but these were not designed as alerts and no one acted on them.</p><p>What did not happen, for forty-five minutes, was anyone stopping the eighth server.</p><p>The reasons map cleanly onto the structure of the control loop. After roughly <strong>twenty minutes of diagnosis</strong> without documented incident-response procedures, engineers reached the conclusion that the issue lay in the new code and reverted SMARS to its previous version on all eight servers. </p><p>This was the opposite of the correct action: the previous version was the one in which the Power Peg flag still activated the broken Power Peg path. The rollback propagated the failure contained on one server onto all of them.</p><p>Eventually the call was made to halt SMARS entirely. By the time the system was actually stopped, at approximately 10:15 AM, Knight had taken positions of approximately $7.65B (net long $3.5B in 80 stocks, net short $3.15B in 74). </p><p>Once unwound, the realised loss was reported by Knight at ~$440M; the SEC&#8217;s enforcement order placed the figure above $460M. </p><p>The firm did not survive in its prior form. By mid-December, less than five months later, Knight had agreed to a <strong>merger with Getco</strong>; the deal closed in July 2013, and the combined entity (KCG Holdings) was itself acquired by Virtu in 2017.</p><p>The point is the loop. SMARS was running an automated control loop generating orders at machine speed, executing against the market, receiving fills, generating more orders. </p><p>The human control loop above it, monitoring positions, raising alerts, halting the system on threshold breaches, was nominally coupled to SMARS through <strong>dashboards and risk limits</strong>.</p><p>In an incident, they decoupled. The position-monitoring metric had a collection interval on the order of a minute. The decision cycle for incident response was five to ten minutes per hypothesis-test iteration. </p><p>The order-generation cycle was <em>milliseconds</em>. The two loops differed by roughly four orders of magnitude. The faster loop accumulated four hundred million dollars of damage in the time the slower one ran three diagnostic iterations.</p><p>This is the structural form. Nyquist&#8217;s sampling argument applies with full force: a control loop sampling at interval $T$ cannot react to disturbances faster than $2T$. Knight&#8217;s human loop sampled at minutes; the plant disturbance was milliseconds. The loop was, by sampling theory, blind to its own plant. </p><p>The crisis simply could not be controlled by the available control structure, regardless of operator competence.</p><p>The lesson the industry encoded after Knight was not that humans should react faster, they obviously cannot, but that any control loop running at machine speed must have a <strong>kill switch at machine speed</strong>: pre-trade risk checks in the order path, position limits enforced before order submission, circuit breakers triggered on order velocity. </p><p>The slow human loop sits above all of this and decides when to <em>re-enable</em> after the automated kill. It does not, anymore, try to be the kill itself.</p><p>The <strong>principle generalises.</strong> Any system whose failure mode propagates faster than the slowest control loop authorised to stop it is, in the precise technical sense, uncontrollable along that axis. </p><p>The mitigation is not faster humans; it is a fast-enough automated cutoff with a slow-enough human override. </p><p>This is the operational meaning of what Marc Brooker calls <em>autonomic behaviour</em>: the component must be capable of saving itself, on millisecond timescales, against failures the<strong> human loop </strong>is structurally too slow to address.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iii?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iii?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h2>When the control plane cannot reach itself: Facebook, 4 October 2021</h2><p>The second structural form of control-loop failure is <em>reachability</em>. The diagnosis is correct, the action is <strong>well-understood</strong>, the human loop is fast enough, but the action cannot be applied because the path from controller to actuator runs through the system that has failed.</p><p><strong>At 15:39 UTC on 4 October 2021</strong>, an engineer at what was then still called Facebook executed a routine maintenance command intended to assess backbone capacity. The command was issued through an audit tool whose job was to reject any change that would take too much of the backbone offline at once. </p><p>A bug in the audit tool failed to catch this one. The command withdrew the <strong>BGP </strong>advertisements for every prefix Facebook announced to the rest of the Internet.</p><p>BGP is the <strong>inter-domain routing protocol </strong>that lets autonomous systems tell the rest of the Internet which prefixes they own and how to reach them. </p><p>When Facebook stopped announcing its prefixes, BGP speakers across the Internet, operating standard route-withdrawal semantics, on the order of seconds, removed Facebook&#8217;s routes from their forwarding tables. </p><p>By <strong>Cloudflare&#8217;s </strong>measurements, public resolvers&#8217; cached records for facebook.com had expired by 15:50 UTC. From the outside, Facebook ceased to exist.</p><p>This is, on its own, a recoverable outage. Re-announcing the prefixes is a single configuration push. The question was whether engineers could get that push to the routers.</p><p>They could not.</p><p>The configuration management system ran on Facebook&#8217;s internal network. Facebook&#8217;s authoritative DNS servers, hosted at smaller facilities, had a safety rule: if they could not reach the main data centres, they treated themselves as unhealthy and withdrew their own BGP advertisements. </p><p>When the backbone went down, every DNS server independently concluded that it was isolated and pulled its routes. <strong>Facebook&#8217;s DNS </strong>therefore disappeared from the public Internet as a second-order consequence of the backbone failure. </p><p>And it disappeared from the inside as well, because the same authoritative DNS resolved the <strong>hostnames </strong>of the internal tools engineers would have used to undo the change.</p><p>It got worse. Many internal tools and services engineers would have used to coordinate the response, parts of <strong>Facebook&#8217;s authentication </strong>and communication infrastructure, also depended on the broken backbone or on the now-unreachable DNS. </p><p>Engineers reportedly could not log into internal tools; conference rooms whose locks were on the <strong>same network</strong> would not open; routine communication channels among responders failed.</p><p>It got worse again. Physical access to the data centres was gated by a card-access system whose backend ran on the same internal network. Engineers attempting to physically enter buildings or reach server cages directly found their badges no longer opened the doors. </p><p>Press reports during the incident described engineers using an industrial angle grinder to cut through a <strong>server-cage bar</strong> at the Santa Clara data centre; Facebook later disputed the specifics, acknowledging only that &#8220;<em>some physical barriers had to be worked around.</em>&#8221; </p><p>Either way, a team had to be physically dispatched to a data centre to restore service.</p><p>The total outage was approximately six hours; BGP advertisements resumed shortly before 21:00 UTC. The technical fix could have been completed in minutes if it had been reachable. </p><p><strong>The duration</strong> was determined by the time required to physically reach a console inside the same dependency loop as the failure, restore enough of the internal network to allow remote actions, and only then perform the fix that was, in itself, trivial.</p><p>This is the second structural form: the action that would resolve the failure lies in the <em>unreachable set</em> induced by the failure itself. </p><p>Control theory has a name for the dual notion, a state that cannot be reached from the current state by any admissible input is <em>uncontrollable</em> from that state,  but the <strong>network-engineering </strong>name is more vivid: the control plane was <em>in-band</em>. </p><p>The configuration changes that would repair the data plane had to travel through the data plane.</p><p>The principle Facebook subsequently invested in is <em>out-of-band control</em>. The control plane must reach its actuators by a path that does not depend on the system being controlled. </p><p>In dependency-graph terms, the directed graph of &#8220;<em>X depends on Y to function</em>&#8221; must contain no cycle that passes through the control surfaces of the production system. </p><p>If it does, there exists a failure mode in which those surfaces are no longer accessible, and the system can only be recovered by an<strong> out-of-band action: </strong>physical access, a separate management network, or a kept-current break-glass procedure that shares no infrastructure with normal operations.</p><p>The cost of maintaining true out-of-band control is non-trivial: a second network, separately operated, credentialed, monitored, exercised. </p><p>The<strong> path of least resistance</strong> is always to let the control plane drift back in-band, because in-band is cheaper, easier to operate, and works fine until the day it does not. </p><p>There is a related principle from safety-critical systems, sometimes called <em>recovery independence</em>, that any component whose failure can render the system inoperable must have a recovery path that does not require that component to be operating. </p><p><strong>NASA flight rules</strong> have a version of this. Nuclear plant operating procedures have a version. Most production software systems do not.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Software Frontier&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Software Frontier</span></a></p><div><hr></div><h2>When recovery depends on the failure being fixed: AWS Kinesis, 25 November 2020</h2><p>The third structural form is the case where the path to recovery passes through the failure itself.</p><p>On 25 November 2020, the Wednesday before American Thanksgiving,  AWS engineers added capacity to the <strong>Amazon Kinesis Data Streams</strong> front-end fleet in us-east-1 between 02:44 and 03:47 PST. </p><p>The first customer-impacting alarms fired at approximately 05:15 PST, with Kinesis error rates climbing through the morning. Kinesis is AWS&#8217;s high-throughput event ingestion service; it underpins <strong>CloudWatch metrics,</strong> AWS Lambda&#8217;s logging path, Cognito&#8217;s analytics path, and a large catalogue of downstream services. </p><p>When Kinesis became unhealthy in us-east-1, a substantial fraction of AWS itself became unhealthy with it.</p><p>The Kinesis front-end fleet handles authentication, throttling, and request routing to the appropriate back-end clusters that own the actual stream shards. </p><p>Each front-end server maintains in memory a <em>shard-map</em>: a cache containing membership data and shard ownership for the back-end clusters. To populate this cache, each<strong> front-end server</strong> creates an OS thread per peer in the front-end fleet, and exchanges shard information over those threads. </p><p>As AWS noted in its post-mortem, fully learning about a newly added fleet member can take up to an hour. The new capacity pushed the per-server thread count past a <strong>configured OS limit</strong>. When this limit was reached, front-end servers could not create the additional threads needed to complete the shard-map cache. </p><p>Cache construction failed, leaving servers with &#8220;<em>useless shard-maps</em>&#8221; (AWS&#8217;s phrase) that prevented them from routing requests to the correct back-end clusters. <strong>Errors began propagating</strong> to downstream callers, and the failure spread across the fleet as more servers crossed the threshold.</p><p>The remediation was familiar: stop the scaling, remove the additional capacity, and restart the fleet. The constraint was that on coming back up, each front-end server had to rebuild its shard-map by communicating with every other<strong> front-end server,</strong> and the resources needed to populate the cache competed with the resources needed to serve requests. </p><p>AWS could only bring servers back in small groups, a few hundred per hour, verifying stability between batches. The first servers re-entered traffic at 10:07 AM PST; Kinesis fully returned to normal at 10:23 PM PST: roughly 17 hours after the first alarms.</p><p>The duration of the <strong>Kinesis </strong>impairment is not the most interesting part. The most interesting part is what was failing while Kinesis was failing.</p><p><strong>CloudWatch</strong> ingested metric data via Kinesis. With Kinesis impaired, its ability to ingest fresh metrics was degraded, so the dashboards customers and AWS engineers used to monitor their systems went dark or stale at exactly the moment they were needed. </p><p>Lambda invocations require publishing metric data to CloudWatch as part of the invocation; as CloudWatch metrics degraded, Lambda&#8217;s local metric agents exhausted their buffers and invocations began to fail. </p><p>Cognito uses Kinesis Data Streams to collect and analyze API access patterns; the path is documented as best-effort, with web servers buffering locally, but as the impairment dragged on, <strong>Cognito web servers </strong>exhausted those buffers and customer authentication started failing. </p><p>AWS&#8217;s own Service Health Dashboard, which would normally have communicated the outage to customers, was itself impaired in its ability to post updates.</p><p>This is the structural form: the path to recovery passed through the failure. The on-call engineers responding to the <strong>Kinesis outage</strong> needed monitoring to verify their interventions were working, and the monitoring depended on Kinesis. </p><p>Customers needed status updates to understand what was happening, and the status page depended on Kinesis. In <strong>dependency-graph terms</strong>, the <em>recovery dependency graph</em> contained a back-edge: a cycle in which X depends on Y to recover, and Y depends on X to function.</p><p>AWS&#8217;s documented mitigations: moving to larger CPU and memory servers (<em>so the fleet needs fewer machines and therefore fewer per-server threads</em>), accelerating the cellularisation of the front-end fleet so any single instance no longer needs a <strong>thread per peer </strong>across the whole fleet, and separating large internal consumers like CloudWatch onto their own partitioned front-end fleets. </p><p>The architectural changes are the substantive ones. Larger servers patch the specific trigger; cellularisation and partitioning defend against the general class of failure in which fleet-wide state synchronisation scales worse than the fleet itself.</p><p>The general principle, restated for the third time:</p><blockquote><p><em>The path from a failed state back to a healthy state must not depend on the failed component being healthy.</em></p></blockquote><p>This is <strong>harder to enforce</strong> than it sounds. Almost every production system has some path of this shape, somewhere. The deployment system that pushes the fix often depends on the very services the fix is repairing. The monitoring that verifies the fix worked depends on the metrics pipeline. </p><p>The communication tools the on-call team uses to coordinate the response depend on internal services that may be in the blast radius of the failure. The discipline is to <strong>identify these back-edges</strong> and either break them or document the manual workaround.</p><p>The <em>recovery dependency graph</em> is distinct from the runtime dependency graph, and almost always more pessimistic. </p><p>A system can have a clean runtime graph and a <strong>deeply cyclic recovery graph</strong>, because the runtime graph captures what depends on what during normal operation, where slow paths, retry loops, fallback caches, and degraded-mode handoffs are all tolerable, while the recovery graph captures what depends on what when something is broken. </p><p>In recovery, those<strong> tolerances vanish</strong>. The path from failed to healthy must be fast and reliable, and a cycle in that path means it may not exist at all.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The three failure modes, named</h2><p>The three incidents above are not three instances of the same failure. They are three different ways the control loop loses authority over the plant, each with a precise structural cause.</p><p><strong>Knight Capital is </strong><em><strong>timescale decoupling</strong></em><strong>.</strong> The plant ran at milliseconds; the controller ran at minutes. By the Nyquist sampling argument, the controller could not, in principle, react to disturbances at the plant&#8217;s natural frequency. The control structure was, mathematically, the wrong shape for the plant.</p><p><strong>Facebook BGP is </strong><em><strong>unreachable actuator</strong></em><strong>.</strong> The diagnosis was correct and the intervention was correct, but the actuator was in the failure&#8217;s blast radius. There was no admissible input from the controller&#8217;s current state to the recovery state, because the path between them passed through the failed component. The recovery state was, in the formal sense, <em>unreachable</em> from where the operators were standing.</p><p><strong>Kinesis is </strong><em><strong>recovery dependency cycle</strong></em><strong>.</strong> The controller could reach the actuator and the actuator could apply the intervention. But the verification path, knowing whether the intervention had worked, passed through the failure itself. The loop could be opened by the operators but not closed by feedback, which forced recovery to proceed at the speed of careful, blind, incremental probing.</p><p>The three failure modes compose. In a sufficiently bad incident, all three are active simultaneously: the <strong>plant </strong>moves <strong>faster than the controller</strong> can sample, the actuator is partially unreachable, and the feedback path that does reach the controller is itself degraded. </p><p>The control system has lost authority along three axes at once, and the operator is acting through the gaps.</p><p>The deeper claim, the one <strong>Parts I and II </strong>have been building toward, is that these regimes are not exceptional. They are what production distributed systems enter during incidents, by construction of how those systems are composed and observed.</p><p>The healthy operating envelope is the region in which the control loop has <strong>enough bandwidth</strong>, enough reach, and enough feedback to keep the plant on a setpoint. </p><p>Outside that envelope, one or more of those conditions fails, and the operator is no longer controlling the system, they are nudging it and waiting for the system either to find its own equilibrium or to deteriorate further.</p><p>The job of the operator in this regime is <strong>not to control</strong>. It is to <em>survive</em>: keep blast radius bounded, avoid actions that worsen the failure, preserve the option of recovery, and wait for conditions in which control becomes possible again. </p><p>The aviation discipline of <em>aviate, navigate, communicate</em> captures it: maintain altitude first, <strong>locate yourself second</strong>, talk to people third. Reversing that order is how you crash.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Software Frontier&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Software Frontier</span></a></p><div><hr></div><h2>The OODA loop, and why it fails</h2><p>The framework that incident responders most commonly use, often without naming it, is the OODA loop: <strong>Observe, Orient, Decide, Act</strong>. </p><p>The name and the framework are due to John Boyd, a U.S. Air Force colonel and fighter pilot who began formulating the ideas in the 1950s and 60s as an instructor at the <em>USAF Fighter Weapons School</em> and refined them through a series of briefings in the 1970s and 1980s, most prominently <em>Patterns of Conflict</em> (1986). </p><p>The central claim, which <strong>Boyd&#8217;s briefings</strong> emphasised, is that in adversarial situations, the actor whose decision cycle runs faster than the adversary&#8217;s wins, because they are operating inside the adversary&#8217;s decision cycle: by the time the slower actor has decided what to do, the faster actor has already changed the situation, invalidating the slower actor&#8217;s decision.</p><p>The framework migrated from military doctrine into business strategy, into emergency response, and eventually into software incident response, where it is used to describe the cycle an <strong>on-call engineer</strong> runs during an outage: observe the system, orient the observation against a model, decide on an intervention, act, and observe the result.</p><p>The framework is useful. It is also, in the production-systems context, frequently misapplied, and the way it is misapplied tells you something about why incidents go badly.</p><p>The original Boyd argument applies when the situation is adversarial and roughly symmetric: two actors with<strong> comparable OODA speeds,</strong> where being faster gives you the advantage. The situation an on-call engineer faces is not adversarial in this sense. There is no opponent making decisions. </p><p>The system is not trying to beat them. It is, instead, evolving according to dynamics (<em>autoscaler decisions, retry storms, cache decays, queue accumulations</em>) that have their own timescales, and those timescales are not necessarily compatible with the engineer&#8217;s OODA loop at all.</p><p>In an incident, three OODA loops are running simultaneously, and they do not all have the same period. <strong>The engineer&#8217;s loop</strong> runs at the speed of human cognition under stress: roughly thirty seconds to a few minutes per cycle, slower if multiple humans need to confer. </p><p>The automated control loop (<em>autoscalers, load balancers, schedulers</em>) runs at the speed of metric collection, typically seconds to tens of seconds. The <strong>plant&#8217;s own dynamics</strong>: connection pool exhaustion, queue overflow, cache regeneration; they all run at whatever rate the underlying physics dictate, which can be anywhere from milliseconds (<em>TCP retransmits, GC pauses</em>) to many minutes (<em>cache warming, replication catch-up</em>).</p><p>In Knight Capital&#8217;s case, the engineer&#8217;s loop ran at minutes against a plant operating at milliseconds. In Boyd&#8217;s terms, the plant was hopelessly <em>inside</em> the <strong>engineer&#8217;s decision cycle</strong>: every observation the engineers made was already obsolete by the time they oriented to it, and every action they took landed against a system that had moved orders of magnitude further during the action&#8217;s flight time.</p><p>The reverse case is also possible and is, in some ways, more insidious. An <strong>engineer&#8217;s OODA loop</strong> running <em>faster</em> than the plant&#8217;s natural recovery dynamics produces a different pathology: the engineer observes that the intervention has not yet worked, orients to that as a failure, decides on a new intervention, and acts, before the original intervention has had time to take effect. </p><p>The result is a stack of interventions in flight against a system that is already converging from the first one, with the later interventions arriving as disturbances against the recovery.</p><p>This is the operational form of what control theorists call <em>over-control</em>. The classical example is the shower with a <em>slow-responding mixer</em>: the user adjusts hot, observes no change, adjusts more, observes no change, then receives the full delayed effect of both adjustments and is scalded. </p><p>The loop is too fast for the plant. The mitigation, both in the shower and in production systems, is to wait, to <strong>extend the OODA cycle</strong> until it matches the plant&#8217;s natural response time, even though waiting feels, in the moment, like inaction.</p><p>The discipline this requires is hard. An on-call engineer under pressure does not feel that waiting is the correct action. The reflex, encouraged by the culture of incident response and reinforced by the stress of an outage in progress, is to act.<strong> To do something</strong>. To try the next thing on the runbook. </p><p>The structural argument against this reflex is not that the engineer is wrong to want to help; it is that, in a system with delayed feedback and partial observability, the cost of acting too quickly can exceed the cost of waiting one more OODA cycle for the previous action to land.</p><p>The principle from control theory is: <em>the loop&#8217;s cycle time should be at least the plant&#8217;s settling time</em>. If you act faster than the plant settles, you are stacking interventions against a<strong> system that has not yet responded</strong> to the previous one, and the resulting trajectory is not the sum of the interventions&#8217; intended effects. </p><p>It is the response of a non-linear system to a sequence of disturbances, which is, almost always, worse than the response to any single intervention applied alone.</p><p>The mature on-call discipline, encoded in the better runbooks and the better incident command training, is to <em>act, then wait the settling time, then observe, then decide whether to act again</em>. The settling time is the half-life of the previous action, and <strong>it is system-specific</strong>: deployment rollbacks settle in minutes; cache invalidations settle in seconds; configuration pushes can take longer than either, depending on the propagation path. </p><p>Knowing the settling time of every action available during an incident is a kind of operational knowledge that does not usually live in the runbook, because it <strong>does not exist outside the system</strong> being operated. It lives in the heads of the engineers who have been on-call for that system long enough to have learned it from incidents.</p><p>This is, partly, why senior on-call engineers are so much more effective in incidents than junior ones, even when the junior engineers have the same runbook access and the same training. The<em> senior engineers </em>have an internal model of the plant&#8217;s settling times for each available action, and they pace the OODA loop to match. </p><p>The junior engineers, lacking the model, run the OODA loop at the <strong>natural speed of human cognition</strong> under stress, which is too fast for most production systems and produces the over-control pathology.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:201922174,&quot;userName&quot;:&quot;Lorenzo Bradanini&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div><hr></div><h2>The illusion of the runbook</h2><p>Every mature on-call function has runbooks. They are written after incidents, <em>refined over months</em> and years, kept in wikis and indexed by alert. </p><p>The good ones describe, for each known failure mode, the diagnostic steps to confirm it, the intervention to apply, and the verification to perform. The discipline of writing them is one of the visible practices of a mature operations culture.</p><p>The runbook is also, for a specific category of incident, a trap.</p><p>The trap has two forms. The first is that runbooks are written against past incidents. <em>They encode the diagnoses</em> that worked, the interventions that helped, the verifications that confirmed recovery. </p><p>They are, in the language of Part II, an <strong>artefact of monitoring </strong>rather than observability: comprehensive against known failure modes, useless against novel ones. The first time the runbook fails to describe the incident in front of you is the moment you discover this, and the discovery is rarely well-timed.</p><p>The second form is subtler. The runbook describes interventions and assumes those interventions will work the way they did last time. But the system has been changing since the runbook was written. </p><p>The intervention that worked last quarter may now have different downstream effects, because the components it touches have been migrated, the <strong>dependencies have shifted</strong>, the version of the underlying service has rolled forward. </p><p>The runbook, in effect, captures the system as it was; the engineer is operating the system as it is. The two diverge silently, and the divergence is invisible until the runbook produces an action whose effect surprises everyone.</p><p>There is a <strong>specific failure pattern </strong>this produces, common enough to have its own folklore: the engineer follows the runbook, the runbook prescribes restarting the X service, the X service restarts, and the system gets worse rather than better. </p><p>The reason, on inspection, is usually that the X service has acquired new dependencies since the runbook was written, and restarting it now drops more state than it used to, with consequences the runbook author did not anticipate. </p><p>The runbook is not wrong, in the sense that the steps it describes are the steps that worked. The <strong>runbook is out of date</strong>, in the sense that the system those steps were designed for is no longer the system the engineer is operating.</p><p>The mitigation is not to delete runbooks. They are too useful to discard, and the failure modes they handle correctly are far more common than the ones they handle wrongly. </p><p>The mitigation is to use runbooks as <em>hypotheses</em>, not as <em>procedures</em>: the runbook describes what worked last time, which is evidence about what might work this time, but the <strong>engineer must independently verify</strong>, in real time, that the conditions the runbook assumes still hold. The runbook says &#8220;<em>restart X</em>&#8221;; the engineer asks <em>&#8220;is restarting X still safe given the system as it currently is?</em>&#8221; before doing it.</p><p>This is hard to do under the pressure of an active incident, and it is one of the practical reasons that senior on-call engineers are <strong>more cautious </strong>about runbook execution than junior engineers, not less. The juniors, trusting the document, execute the steps. </p><p>The seniors, knowing how the document was written and how the system has changed since, pause to verify before each step. The juniors finish the runbook faster. The seniors finish the incident faster.</p><p>A related, <strong>sharper principle</strong>: the value of a runbook decays with the rate of system change. In a system that does not change, a runbook is durable: the same steps work indefinitely. In a system that changes weekly, with new deployments, new dependencies, new configurations, the half-life of a runbook is on the order of months (at best). </p><p><strong>A two-year-old runbook</strong> in a fast-moving system is closer to historical fiction than to operational guidance. It still has value, but the value is in the model it encodes of how someone once thought about the system, not in the steps it prescribes.</p><div><hr></div><h2>The blast radius principle</h2><p>The third structural property of action in distributed systems, after timescale and reachability, is <em>blast radius</em>: the set of components affected by a given intervention, and the bound on the damage if the intervention is wrong.</p><p>Every available action has a <strong>blast radius</strong>. Restarting a single instance has a small radius, that instance, briefly, plus whatever state it held. Rolling back a deployment has a larger radius, the entire fleet running that deployment, plus the load that flips back to the previous version, plus the downstream effects of running the older code. </p><p>Failing over a region has a radius that may include every customer routed to that region, every dependent service that has to repoint, and every cache that has to be rebuilt. <strong>Dropping a load balancer</strong> has a radius that can encompass the entire service.</p><p>The blast radius principle says: <em>act with the minimum blast radius that can plausibly resolve the failure</em>. If the failure is in one instance, restart the instance, not the fleet. If the failure is in one region, fail over that region, not the global topology. The reason is not just damage control. It is information. </p><p>A <strong>small-radius action</strong> either resolves the failure or does not, and either outcome is informative: it succeeded, which suggests the failure was localised; or it did not, which rules out a hypothesis and constrains the next action.</p><p>A large-radius action, by contrast, may resolve the failure without telling you which part of the action was responsible. If you fail over a region and <strong>the symptoms clear,</strong> you do not know whether the failure was in the region you abandoned, in the load on the region you moved to, or in the path between them. </p><p>You have ended the incident without learning anything that would prevent the next one. The blast radius was excessive for the diagnostic value returned.</p><p>The principle generalises into a hierarchy of interventions, ordered roughly by radius:</p><p>The smallest interventions are read-only: looking at logs, querying metrics, <strong>running diagnostic commands</strong>. These have effectively zero blast radius and are always safe to do first. Most outages benefit from more reading than the operators in the moment feel they have time for.</p><p>The next tier is single-instance: restarting one process, draining one node, removing one server from rotation. These have blast radius limited to the instance, and they are <strong>reversible within seconds</strong>. They are the appropriate first active intervention for almost any failure that has a candidate localised cause.</p><p>The next tier is<strong> service-level:</strong> rolling restart of a fleet, configuration push, deployment rollback. These have blast radius across the service, take longer to apply, and are harder to reverse. They are appropriate when <em>single-instance interventions</em> have ruled out localised causes, or when the failure is observed broadly enough that localising it is itself wasting time.</p><p>The largest interventions are infrastructure-level: regional failover, load shedding at the edge, traffic routing changes, emergency capacity additions. These have <strong>very large blast radii</strong>, and their consequences are often partly unobservable until well after the action. </p><p>They are appropriate only when smaller interventions have failed or are known to be insufficient, and they should be made with the explicit understanding that the system after the intervention will be a different system from the one before, with new failure modes that no one has yet characterised.</p><p>The principle, in compressed form: <em>the appropriate blast radius scales with the certainty of the diagnosis</em>. When you are confident in the cause, you can use a targeted, low-radius intervention. </p><p>When you are uncertain, you have two choices: invest more time in diagnosis to raise the certainty, or accept the higher blast radius of a less-targeted intervention. There is <strong>no third option</strong>. </p><p>Acting with high blast radius on low certainty is how outages turn into multi-region cascades.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The conservation of risk</h2><p>There is a principle, with versions in the safety-engineering tradition, that goes roughly: <em>the total risk in a complex system tends to be conserved; safety interventions move risk around as much as they reduce it</em>. The folk version is &#8220;what gets safer somewhere gets more dangerous somewhere else.&#8221; </p><p>The more precise versions belong to the risk-homeostasis and risk-compensation literature, most prominently <strong>Gerald Wilde&#8217;s</strong> <em>Theory of Risk Homeostasis</em> (1982), with related work by John Adams, which argues that visible safety improvements are partly absorbed by behavioural adjustments, with the residual risk migrating elsewhere in the system rather than disappearing.</p><p>This applies to incident response with peculiar force. Each intervention an operator makes during an incident is a <strong>safety action</strong>: an attempt to reduce immediate risk. </p><ul><li><p>The intervention, almost always, succeeds at reducing the visible component of the failure. </p></li><li><p>The error rate drops. </p></li><li><p>The dashboards green up. </p></li><li><p>The customers stop tweeting. </p></li><li><p>The intervention has, by every visible measure, worked.</p></li></ul><p>What is harder to see, and what is rarely measured in real time, is what the intervention did to the invisible component. </p><p><strong>Rolling back a deployment</strong> ends the immediate incident but leaves the older code running, which may have its own known issues that the deployment was meant to fix. </p><p>Failing over a region resolves the local failure but loads the target region beyond its tested capacity, potentially priming a second incident. </p><p><strong>Adding capacity </strong>to a saturated service unblocks the immediate queue but increases the surface area for the failure mode that caused the saturation, if the underlying cause has not been addressed.</p><p>The pattern is not unique to software. Aviation has a long literature on accident patterns that begin with a successful response to a minor problem and end with a major accident triggered by the response itself. <strong>Healthcare</strong> has the same literature. </p><p>The general structural shape is: the intervention that resolves Failure A creates the conditions for Failure B, which is rarer, less familiar, and less recoverable. </p><p>The system has been moved from a known failure regime into an unknown one, and the <strong>unknown regime</strong> has its own failures that the operators have not yet learned to recognise.</p><p>The discipline this asks of an on-call function is, again, hard to maintain under pressure. It is the discipline of asking, after every intervention: <em>what did this just change about the system, and what new failure modes have I introduced?</em> </p><p>It is the discipline of treating recovery as a state that itself needs to be monitored, because the <em>post-recovery system</em> is not the same system as the pre-incident system, and its failure characteristics are not yet known.</p><p>In practice, this means that the <em>end</em> of an incident is not when the symptoms clear. The end of an incident is when the system has been observed in its <strong>new configuration</strong> long enough to be confident that the interventions did not introduce a worse failure than the one they resolved. </p><p>This is usually hours, sometimes days, longer than the time the dashboards take to go green. The on-call function that closes incidents at the moment of <strong>symptom resolution</strong> is, structurally, accepting an invisible risk in exchange for ending the call earlier. </p><p>The function that watches the recovered system through at least one full traffic cycle is paying a cost in operator time for the option of catching the second-order failure before it becomes a second incident.</p><div><hr></div><h2>The operator as Bayesian, under pressure</h2><p>Underneath all of the above is a single epistemic structure. </p><p>The operator, during an incident, is performing inference: from observed symptoms, against a prior model of the system, to a posterior estimate of what is wrong and what to do about it. </p><p>The <strong>framework is Bayesian </strong>whether the operator names it that way or not, and the failure modes are the failure modes of Bayesian inference under conditions hostile to it.</p><p>The prior model, what the operator believes the system is, before any incident-specific evidence, is the simulation <strong>Richard Cook </strong>described and that <em>Part II</em> referenced. </p><p>The likelihood, what the operator expects to observe under each candidate hypothesis, is implicit, drawn from training and prior incidents.</p><p>The posterior, what the operator believes after seeing the symptoms, is the <strong>working diagnosis</strong>. The decision follows from the posterior and from the operator&#8217;s loss function over possible outcomes.</p><p>Each step has its failure mode. The prior can be wrong, as in the Cloudflare oscillation in Part I, where the prior placed most of the probability mass on <strong>external attack</strong> and left almost none for gradual rollout against a regeneration cycle. </p><p>The likelihood can be wrong, as in the Slack autoscaler in Part II, where the prior model said high load implies high CPU, and the actual system was producing <strong>high load with low CPU</strong> because the threads were waiting on a degraded network. </p><p>The posterior, conditioned on a wrong likelihood, will be wrong in the same direction.</p><p>The decision, conditioned on a wrong posterior, will be wrong. And,<em> this is the cruellest part</em>, the operator will get feedback from the decision, observe its outcome, and update the model. </p><p>If the <strong>wrong decision happened</strong>, by chance or by partial compensation from other parts of the system, to be followed by recovery, the operator will incorporate that outcome as evidence that the wrong model was right.</p><p> The next time a similar incident occurs, the operator will reach for the same wrong intervention, with higher confidence, because last time it appeared to work.</p><p>This is the <em>correlated false positive</em> problem in operational learning. The operator&#8217;s model is updated by outcomes that are partially decoupled from interventions, but the<strong> decoupling </strong>is not visible to the operator. Recoveries that happen for reasons unrelated to the intervention reinforce belief in the intervention. </p><p>The model drifts, not toward the system&#8217;s actual dynamics, but toward whatever pattern of intervention-and-recovery the operator has happened to experience.</p><p>The mitigation requires explicit discipline, and most on-call functions do not maintain it. The discipline is to ask, after every incident: <em>did the intervention actually cause the recovery, or did the system recover for some other reason that I happened to be present for?</em> </p><p>The blameless <strong>post-mortem culture</strong> is, partly, an attempt to create the conditions in which this question can be honestly asked. It often is not.</p><p>There is a deeper version of the same problem, which is that the operator&#8217;s model is <strong>updated by outcomes</strong> the operator can observe, and the outcomes the operator can observe are filtered by the same observability stack whose limits Part II discussed. </p><p>The model drifts toward whatever the dashboards can see. Failure modes invisible to the dashboards remain invisible to the model, and the operator becomes progressively <strong>more confident</strong> in a model that captures only the observable subspace of the system&#8217;s actual behaviour. </p><p>The model is calibrated, but on a projection that has discarded the dimensions that matter most during novel failures.</p><p>This is, finally, why the systems that recover quickly from incidents are not the systems with the best runbooks or the <strong>best automation.</strong> </p><p>They are the systems whose operators have maintained an active distinction between the model and the system:<em> </em></p><blockquote><p><em>who treat their model as a hypothesis under continuous test</em></p><p><em>who notice when the system surprises them and update accordingly</em></p><p><em>and who are willing, in the middle of an incident</em>, </p></blockquote><p>to admit that the model they have been operating under for years may not apply to the situation in front of them.</p><p>The discipline is <strong>epistemic humility</strong> under pressure. It is the rarest thing in operations, and it is the one that compounds.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iii/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-iii/comments"><span>Leave a comment</span></a></p><div><hr></div><h2>The discipline of acting under uncertainty</h2><p>The compressed form of this essay, the operational counterpart to Part I&#8217;s <em>what does this depend on that I cannot see</em>, and Part II&#8217;s <em>what is this metric not telling me</em>, is also a question, asked of every intervention before it is applied:</p><p><em>What does this assume about the system, and what happens if that assumption is wrong?</em></p><p>Every action has assumed conditions. Restarting an instance assumes the instance is the<strong> source of the failure</strong>. Rolling back a deployment assumes the previous version is healthier than the current one. </p><p>Failing over assumes the target region can absorb the load. Adding capacity assumes the <strong>bottleneck is capacity</strong>. Each assumption is, before the action, a hypothesis. Each becomes, after the action, a commitment the operator has to live with.</p><p>The discipline is to know, for every available intervention, what assumption it embeds, and to verify that assumption, before applying the intervention. </p><p>The verification can be imperfect; perfect verification is incompatible with the timescale of an outage. </p><p>But the question must be asked, because the alternative is acting on a hypothesis the operator has not consciously formed, and being surprised by the system&#8217;s response in a direction the operator was not prepared for.</p><p>The questions to ask, before any <strong>non-trivial intervention:</strong></p><ul><li><p>What does this action assume about the system?</p></li><li><p>What is the blast radius if the assumption is wrong?</p></li><li><p>What is the smallest intervention that would resolve this if my diagnosis is correct?</p></li><li><p>How will I know whether the action worked, and how long do I need to wait before that signal is reliable?</p></li></ul><p>If this action fails, what state does it leave the system in, and is the next action still reachable from there?</p><p>The discipline is <strong>not to avoid acting</strong>. It is to size the intervention to the certainty of the diagnosis, allow the system time to settle, verify the assumption before escalating, and preserve the possibility of recovery after every step.</p><p>This is what separates<strong> short incidents </strong>from catastrophic ones. Not faster reactions, better dashboards, or thicker runbooks, but the ability to treat every intervention as a probe: an action that changes the system while also revealing something about it.</p><p>During an incident, the system is operating in a regime nobody has fully characterised. The <strong>operator&#8217;s job</strong> is not to force it back through sheer intervention. The job is to keep the system in a state where understanding is still possible, learn from each action, and navigate toward a recoverable regime without collapsing the remaining options.</p><p>This is on-call: control under uncertainty.</p><p>The loops are delayed. The observations are partial. The interventions have non-linear effects. The system being repaired is one no single engineer fully understands.</p><p>At 03:47 UTC, the operator is performing the function the entire architecture <strong>silently assumes</strong> someone will perform, while the architecture itself makes performing it nearly impossible.</p><p>The systems mostly do not work. The operators work, and the systems usually fail only when the operators lose the ability to see, infer, or intervene safely.</p><p><em>The pager will go off again</em>. The dashboards will be wrong again. The runbook will be stale again.</p><p>The work is the same work:</p><p>act carefully, <strong>preserve reversibility,</strong> make the assumption explicit, and already know the next move before committing to the current one.</p><div><hr></div><h2>One more thing&#8230;</h2><p>The structural argument across this series is that distributed systems fail at the seams: composition, <strong>observation</strong>, and control are each independent sources of failure modes no single component owns and no single engineer fully sees.</p><p>The same argument applies, in concentrated form, to GPU programming.</p><p>A<strong> modern CUDA kernel </strong>is itself a tiny distributed system: dozens of streaming multiprocessors, thousands of warps, multiple memory hierarchies, delayed observation through performance counters, and sharply non-linear control through launch configuration and synchronization.</p><p><strong>Correctness is necessary</strong>. Performance lives in how composition, observation, and control interact under the workload you actually have, not the one your benchmark measured.</p><p>I wrote a <strong>deep CUDA guide</strong> from exactly this perspective: not isolated tricks, but how to reason about the GPU as a coupled dynamical system whose performance regimes and failure modes (<em>occupancy collapse, memory-bandwidth thrashing, warp divergence, pipeline stalls</em>) are structurally the same kinds of seam failures this series has been describing all along.</p><p><a href="https://lorenzobrada.gumroad.com/l/cuda_mastery">Read the CUDA Guide on Gumroad</a></p><p></p>]]></content:encoded></item><item><title><![CDATA[How Systems Really Fail, Part II]]></title><description><![CDATA[The observer problem: why your dashboards lie, why aggregation destroys the signal, and the unbridgeable gap between the system and your model of it.]]></description><link>https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-ii</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-ii</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Tue, 19 May 2026 09:51:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SjgH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SjgH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SjgH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!SjgH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!SjgH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!SjgH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SjgH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3562838,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/197191625?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SjgH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!SjgH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!SjgH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!SjgH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f753274-d624-4ee3-8c62-d59c194f83f0_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Intro</h2><p>The first essay in this series argued that distributed systems fail in the spaces <em>between</em> their components, and that those spaces are structurally opaque. This one argues something more uncomfortable.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Software Frontier! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Even if you accept that the system is opaque, you still have to operate it. You still have to debug it at <strong>03:47 UTC</strong>. You still have to decide, in the next ninety seconds, whether to roll back, fail over, shed load, or page someone more senior.</p><p>To do any of that, you have to <strong>see</strong> the system.</p><p>This is the second structural problem, the one most production engineers learn about the hard way, usually during an incident that lasted longer than it should have because the dashboards stayed green until they didn&#8217;t.</p><p>The system you observe is <strong>not the system that exists</strong>. It is a <em>projection</em> of the system into a low-dimensional representation, built out of metrics, logs, traces, and the mental model that lives in the operator&#8217;s head.</p><p>The projection is incomplete by construction. It is <em>delayed</em> by the time it takes to collect, aggregate, and render. It is <em>biased</em> by what someone decided to instrument three years ago. And it is <em>aggregated</em>, often violently, in ways that destroy precisely the signal needed to recover from an incident.</p><p>This essay is about that gap. Not the gap between the system as designed and the system as composed (Part I), but the gap between the system as composed and the system as <strong>perceived</strong>. The two gaps are different, and they compound.</p><p>Three incidents, mechanically reconstructed: <strong>Slack&#8217;s autoscaler</strong> chasing metrics that had decoupled from the network failure underneath, while the dashboards that would have shown the decoupling failed at the same time as the system; </p><p><strong>GitHub&#8217;s 43-second partition</strong> and the 24-hour reconciliation that followed; <strong>Roblox&#8217;s 73-hour outage</strong>, where the monitoring stack failed at the same time as the system it monitored, and engineers spent two days debugging a fully dark cluster.</p><p>The pattern beneath all three is the same: the operator&#8217;s view of the system, and the system itself, were two different things. The interesting question is <em>why this is structural</em>, not accidental.</p><div><hr></div><h2>The observer problem, mechanically</h2><p>The canonical incident for this material is the <strong>Slack outage of 4 January 2021</strong>, the first business day after the holiday break, documented in detail in Slack&#8217;s post-mortem by Laura Nolan.</p><p>Slack runs on AWS, with services running in dedicated VPCs (Virtual Private Clouds) connected by <strong>AWS Transit Gateways</strong> (TGWs). TGWs are managed by AWS and intended to scale transparently. Slack&#8217;s traffic pattern is unusual: the platform is quiet over the holidays and then ramps to one of its biggest days of the year on the first Monday back, when clients reconnect with cold caches and pull down more data than usual.</p><p>On 4 January, the TGWs <strong>did not scale fast enough</strong> for that ramp. Around 6:00 AM PST, one of them began dropping packets. The packet loss caused widespread degradation in internal calls across Slack&#8217;s services, but the symptom was not yet visible to users.</p><p>Slack&#8217;s web tier autoscales on two signals: <strong>CPU utilisation</strong> and <strong>utilisation of available Apache worker threads</strong>. Here is where the failure begins. As packets dropped on the TGW, threads in the web tier spent more time waiting on slow or stalled backend calls. </p><p>Waiting threads do not burn CPU. So as the system became less able to serve users, <em>CPU utilisation actually dropped</em>. The autoscaler, looking at CPU, concluded the fleet was over-provisioned and <strong>downscaled</strong> the web tier.</p><p>Then the mini-peak at 7:00 AM PST arrived. Load increased against the now-smaller fleet on a degraded network. Apache worker thread utilisation climbed sharply, threads were waiting longer, and more of them were in use, and the thread-utilisation signal triggered aggressive <strong>upscaling</strong>. Slack attempted to add <strong>1,200 servers between 7:01 and 7:15 AM PST</strong>.</p><p>The scale-up failed. New instances are configured by an internal service Slack calls <code>provision-service</code>, which talks to other Slack systems and to AWS APIs over the same degraded network. Under the sudden load of 1,200 simultaneous provisioning requests, with elevated latency on every dependency call, <code>provision-service</code> hit two resource ceilings: <strong>the Linux open files limit</strong> and an <strong>AWS quota limit</strong>. </p><p>Most of the 1,200 instances were created but never fully provisioned. They counted against the autoscaling-group size limit, blocking further scale-up, but they did not serve traffic.</p><p>And then the second layer of the observer problem revealed itself. Slack&#8217;s dashboarding and alerting service had <strong>failed during the early stages of triage</strong>. The reason was structural: the monitoring stack ran in a different VPC from its backend databases, and the same TGW that was dropping packets sat on the path between them. <em>The failure that was breaking the web tier had also blinded the engineers trying to diagnose it.</em></p><p>For roughly the next hour, incident responders worked without dashboards. They had logs, <strong>command-line tools,</strong> and the ability to query metrics backends directly, but none of the pre-built queries that turn raw metrics into actionable views. </p><p>Some engineers were SSHed into production instances when the autoscaler deprovisioned them mid-investigation, abruptly ending their sessions. <code>provision-service</code> recovered around 8:15 AM PST; serving capacity reached a degraded-but-functional state by 9:15 AM PST; full recovery, after AWS engineers manually scaled TGW capacity, completed at <strong>10:40 AM PST</strong>.</p><p>The whole sequence is the observer problem in compounded form. The autoscaler responded first to a metric (<strong>CPU</strong>) that did not represent the system state, then to a metric (<strong>thread utilisation</strong>) that drove the wrong action under the conditions. </p><p>The control loop did exactly what it was designed to do; the <em>signals</em> it was acting on had decoupled from the <em>reality</em> of the network underneath. </p><p>And the observation surface that operators would normally have used to see this decoupling was itself, by architectural coincidence, a casualty of the same failure.</p><p>This is the <strong>observer problem</strong> in its operational form, and it has three structural sources, each worth pulling apart.</p><div><hr></div><h2>Instrumentation lag</h2><p>Every observability pipeline introduces delay between an event occurring in the system and that event being visible on a dashboard. The delay has multiple stages.</p><p>First, <strong>emission delay</strong>: the event happens, but the code that emits the metric or log runs after the event, and the emission itself takes some time, usually buffered behind a batching layer with a flush deadline (StatsD typical: 10s; OpenTelemetry batch span processor: 5s default, max queue 2048). Second, <strong>collection delay</strong>: the emitted data is scraped or pushed to a collector at fixed intervals (Prometheus default scrape interval: <strong>15s</strong>, with <code>scrape_timeout</code> typically <strong>10s</strong>). </p><p>Third, <strong>aggregation delay</strong>: the collector pre-computes summary statistics, often on a window ending some seconds in the past to allow late-arriving data. Fourth, <strong>render delay</strong>: the dashboard queries the storage layer and renders, typically on a 30s to 60s refresh.</p><p>End-to-end delay in a well-tuned production pipeline is typically <strong>15 to 60 seconds</strong>. In many real pipelines it is several minutes.</p><p>This is not a defect. It is the cost of producing observations that are coherent across thousands of hosts. The delay is the price paid for the metric being <em>computable</em> at all.</p><p>But the delay has a consequence that classical control theory makes precise. Any closed-loop control system whose feedback path introduces delay <code>&#964;</code> experiences a <strong>phase lag</strong> of <code>&#969;&#964;</code> radians at frequency <code>&#969;</code>. </p><p>The <strong>Nyquist stability criterion</strong> says, in essence, that a feedback loop becomes unstable when its total phase lag approaches 180&#176; at the frequency where the loop gain is unity; with even modest controller gain, sufficient phase lag turns negative feedback into positive feedback and the loop oscillates.</p><p>Concretely: for an autoscaler with a minute-scale measurement-to-action delay attempting to track load that varies on similar timescales, phase lag approaches the stability boundary. Aggressive scaling policies tip the loop into oscillation; this manifests operationally as the autoscaler <strong>over-provisioning, then over-scaling-down, then over-provisioning again</strong>, never settling. </p><p>Slack&#8217;s post-mortem describes a variant of this pattern: an initial downscale on CPU, followed by an aggressive upscale on <strong>thread utilisation</strong>, against a network problem the loop could not see at all.</p><p>The Shannon-Nyquist sampling theorem provides the converse bound: a control loop sampling at interval <code>T</code> cannot observe, and therefore cannot react to, disturbances faster than <code>2T</code>. A 15-second<strong> Prometheus scrape interval </strong>is structurally blind to load dynamics on timescales below 30 seconds. The information about those dynamics has been <strong>aliased</strong> into the lower-frequency band, where it appears as noise.</p><p>Marc Brooker has written about this directly in the context of AWS load balancing: a control loop with delay longer than the time constant of the thing it controls <em>cannot stabilise that thing.</em> It can only chase it. </p><p>The Slack autoscaler chasing a CPU metric that had decoupled from real load (because waiting threads do not burn CPU) was operating in exactly this regime.</p><p>The mitigation is not to make the metrics faster, though that helps. The mitigation is to design control loops that <strong>do not depend on global metrics</strong>: rate-limiting at the boundary, admission control based on <strong>local queue depth</strong> observable in <code>O(1)</code> from inside the affected process, fallback to last-known-good rather than reactive scaling. </p><p>Local observations made by the component itself have zero collection delay because they bypass the pipeline entirely. Global observations always carry the pipeline&#8217;s phase lag.</p><p>This is the structural argument for <strong>autonomic</strong> behaviour at the component level. Components that defend themselves locally (with circuit breakers, backpressure signals propagated synchronously to upstream callers, and load-shedding triggered by their own queue depth) do not depend on a delayed control loop to survive. </p><p>Components that wait for the autoscaler to rescue them are operating inside a feedback loop whose stability margin is, almost always, narrower than anyone has measured.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Aggregation destroys the signal</h2><p>Every metric you look at on a production dashboard is an aggregate. A counter has been summed across hosts. A latency value has been percentiled across requests. A gauge has been averaged or maxed across a time window.</p><p>Aggregation is mathematically necessary; you cannot stare at every individual request. It is also, almost always, the thing that hides the failure.</p><p>The pathology is most visible in <strong>latency aggregation</strong>, and the canonical analysis is Gil Tene&#8217;s <em>How NOT to Measure Latency</em> (2015). The argument is worth deriving mechanically, because the conclusion is counter-intuitive and the mechanism is not.</p><p>Consider a load generator configured to issue requests at a rate of <code>R</code> per second; one request every <code>1/R</code> seconds. The generator records, for each response, the time elapsed between <em>send</em> and <em>receipt</em>. Call this <code>service_time</code>. The reported P99 is the 99th percentile of the <code>service_time</code> distribution across some number of samples.</p><p>Now suppose the <strong>system stalls completely</strong> for <code>T</code> seconds, then recovers. During the stall, no responses arrive. The generator, in its naive form, has two possible behaviours.</p><p>In the <em>coordinated</em> form, the generator waits for each response before sending the next. During the <code>T</code>-second stall, exactly one request is in flight; its <code>service_time</code> is recorded as <code>T</code>. The other <code>R&#183;T</code> requests that <em>should have been sent during the stall</em> are never sent. They do not appear in the histogram at all.</p><p>In the <em>uncoordinated</em> form, the generator sends on schedule regardless of whether responses arrive. During the stall, <code>R&#183;T</code> requests pile up in the kernel&#8217;s socket buffer or in the generator&#8217;s own queue. When the system recovers, those requests are drained; each one&#8217;s <code>service_time</code> is measured from the moment it was <em>sent</em>, not the moment it was <em>scheduled to be sent</em>.</p><p>The bias is statistical. Let <code>F_observed(t)</code> be the empirical CDF of <code>service_time</code> the generator records, and <code>F_true(t)</code> the CDF of latency that a real user (arriving according to a <strong>Poisson process</strong> at rate <code>R</code>) would experience. </p><p>In the coordinated form, the missing samples should have been drawn from the slowest part of the latency distribution; their absence systematically truncates the right tail of <code>F_observed</code>. The quantile function <code>Q_observed(0.99) = F_observed&#8315;&#185;(0.99)</code> is, by construction, a lower bound on <code>Q_true(0.99)</code>, with the gap widening as <code>T</code> grows.</p><p>The user who clicked at time <code>t</code> and got a response at time <code>t + T + &#949;</code> experienced a latency of <code>T + &#949;</code>. The histogram has either zero entries near <code>T + &#949;</code> (coordinated form) or entries clustered near <code>&#949;</code> (uncoordinated form). In neither case does the percentile reflect what the user felt.</p><p>The correction <strong>Tene proposes</strong> (HdrHistogram&#8217;s <code>recordValueWithExpectedInterval</code>) is to <em>synthesise</em> the missing samples: for each measured <code>service_time</code> exceeding the expected interval <code>1/R</code>, insert additional samples at <code>service_time &#8722; 1/R</code>, <code>service_time &#8722; 2/R</code>, ..., down to <code>1/R</code>. </p><p>These synthetic samples represent the users who would have arrived during the stall and would have experienced progressively shorter waits.</p><p>The implementation, in essence:</p><pre><code><code>void recordValueWithExpectedInterval(long value, long expectedInterval) {
    recordValue(value);
    if (expectedInterval &lt;= 0 || value &lt;= expectedInterval) return;
    long missingValue = value - expectedInterval;
    while (missingValue &gt;= expectedInterval) {
        recordValue(missingValue);
        missingValue -= expectedInterval;
    }
}</code></code></pre><p>Six lines. One additional method call per recorded measurement. The result, when applied to real traces, is routinely an order-of-magnitude shift in the tail. A system reporting P99 = 200 ms under uncorrected measurement reports P99 = 2 to 4 seconds under coordinated-omission correction. </p><p>The dashboard was lying by a <strong>factor of ten</strong>, not by accident, but by <em>construction</em> of how percentiles are computed from a fixed-rate sampler against a non-stationary service-time distribution.</p><p>The same pathology appears, in different shapes, throughout the metric stack. Server-side latency histograms measure only requests the server got to process. Requests rejected at the <strong>load balancer</strong>, dropped at the TCP layer, or held in the kernel accept queue do not appear. </p><p>The server&#8217;s P99 can be excellent while the <em>connection</em> P99 (which the user actually experiences) is catastrophic. The <strong>Slack incident</strong> is exactly this: the web tier was reporting acceptable internal latencies for the requests it was handling, because the requests <em>not</em> being handled were not in the denominator. Survivorship bias, in observation form.</p><p>The same problem appears in <strong>averaging</strong>. A service that handles two classes of request, 99% of them fast and 1% of them slow, will show a mean latency dominated by the fast class. If the slow class gets ten times slower during an incident, the mean barely moves. The average is structurally insensitive to the tail, which is where outages live.</p><p>Percentiles are better than averages, but only if computed correctly, and only if the percentile you care about is in the data. </p><p>P99 across a million requests has ten thousand data points and is statistically reliable. P99 across a thousand requests has ten data points and is statistical noise. P99.9 across a million requests has a thousand data points, marginal. P99.99 across a million requests has a hundred data points, useless. </p><p>The deeper into the tail, the more samples needed to stabilise it, and the deeper into the tail is exactly where the interesting failures live.</p><p>The reason failures live in the tail is itself a queueing-theoretic result. For an <strong>M/M/1 queue</strong> (Poisson arrivals at rate <code>&#955;</code>, exponential service times at rate <code>&#956;</code>, single server) with utilisation <code>&#961; = &#955;/&#956;</code>, the expected waiting time in the system is <code>1/(&#956;(1&#8722;&#961;))</code>. As <code>&#961; &#8594; 1</code>, this <strong>diverges hyperbolically</strong>; the variance of waiting time grows even faster, as <code>1/(1&#8722;&#961;)&#178;</code>. </p><p>The practical consequence is that high-percentile latencies blow up far faster than utilisation increases: a service running near saturation has a P99 that is many multiples of its mean, and the ratio worsens sharply as you approach full utilisation. </p><p>Tails are not a measurement artefact; they are the <strong>physics of contention</strong>, and they are precisely what averages and low-resolution percentiles destroy.</p><p>The problem compounds when percentiles are themselves aggregated. The P99 of a service that is the union of ten hosts is <strong>not</strong> the average of those hosts&#8217; P99s, nor their maximum, nor any function of them; it is a quantile of the underlying merged distribution, which is unrecoverable once each host has been independently percentiled. </p><p>Many monitoring systems do exactly this aggregation, producing a number labelled &#8220;P99&#8221; that is mathematically meaningless. Theo Schlossnagle and the Circonus team have written extensively on this; the correct primitive is to store the <strong>full histogram</strong> and percentile <em>at query time</em>, after merging across hosts.</p><p>Three production-grade histogram primitives dominate:</p><ul><li><p><strong>HDR Histogram</strong> (Tene): fixed-precision logarithmic bucketing across many orders of magnitude (typically nanoseconds to hours at three significant digits), <code>O(1)</code> insert, mergeable across instances, widely used in the JVM ecosystem.</p></li><li><p><strong>t-digest</strong> (Dunning, 2013): centroid-based sketch with concentrated precision in the tails, useful when storage is constrained but tail accuracy matters; <code>O(log n)</code> insert in the worst case, mergeable with a controlled error bound.</p></li><li><p><strong>DDSketch</strong> (Masson, Rim, Lee, 2019): relative-error guarantee <code>&#945;</code>, log-bucketed similarly to HDR but with provable tail accuracy, <strong>fully mergeable without error accumulation</strong>; used by Datadog as its native primitive.</p></li></ul><p>All three solve the merge problem. None of them solve the <strong>storage</strong> problem: keeping a per-request histogram per dimension (customer, region, endpoint, version) at full cardinality costs roughly two orders of magnitude more than scalar metrics. Almost no organisation does it for everything.</p><p>Beyond latency, aggregation collapses <strong>cardinality</strong>. If a service is failing for one specific customer, on one specific endpoint, in one specific region, the aggregate error rate may show a 0.1% blip below any reasonable alerting threshold. The blip is the entire experience of that customer. Aggregation makes the rare invisible by averaging it against the common.</p><p>Charity Majors&#8217;s argument for <strong>high-cardinality observability</strong>, developed across her writing at Honeycomb and in <em>Observability Engineering</em> (O&#8217;Reilly, 2022, with Liz Fong-Jones and George Miranda), reduces to this: the questions that matter during an incident are almost always questions about specific slices of traffic, and any pre-aggregated metric has already destroyed the dimensions needed to slice on. </p><p>The <strong>pre-aggregation step</strong> is irreversible. Information theory enforces this; once you have computed the count of errors per minute, you cannot recover <em>which customers</em> produced those errors.</p><p>The cost of<strong> preserving cardinality</strong> is large; the cost of discarding it is invisible until the incident in which you need the dimension you discarded. The discipline is to know which dimensions are likely to matter, instrument those at full cardinality, accept that some incidents will be invisible until someone re-instruments after the fact.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>You can only see what you instrumented</h2><p>This is the<strong> third and most permanent</strong> of the three sources, and the hardest to mitigate, because it is a statement about the closure of the observable space.</p><p>Every metric, log line, and trace span in your system exists because some engineer, at some point, decided it would be useful. The decision was made under one model of how the <strong>system would fail</strong>. The decision was made before the migration that changed the failure modes. The decision was made by someone who has since left.</p><p>The <strong>observation space</strong> of a production system is, in effect, a fossil record of past concerns. It captures the questions someone thought to ask. The questions that nobody thought to ask are invisible, by definition, and they remain invisible until an incident forces someone to add the instrumentation in the middle of the firefight.</p><p>This is the operational meaning of Cindy Sridharan&#8217;s distinction (in <em>Distributed Systems Observability,</em> O&#8217;Reilly, 2018) between <strong>monitoring</strong> and <strong>observability</strong>. Monitoring is the practice of watching known failure modes by means of pre-defined metrics and alerts. </p><p><strong>Observability </strong>is the property of a system that allows you to ask questions about its state that you did not anticipate having to ask.</p><p>The two are different in kind. <strong>Monitoring </strong>is comprehensive at handling familiar failures and useless at handling novel ones. Observability is the opposite. A mature production environment requires both, but the second is much harder to achieve, because it requires preserving structured, high-cardinality data about every interesting event, in a form that can be queried after the fact along dimensions no one specified in advance.</p><p>The <strong>DynamoDB DNS</strong> race condition from <a href="https://open.substack.com/pub/softwarefrontier/p/how-systems-really-fail-part-i?r=3c7w5a&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">Part I</a> is a clean example of the limit. The plan generation system had monitoring: are the Enactors running, are they applying plans, is Route 53 returning valid responses? All of these were green throughout the incident. </p><p>The question that would have caught the failure, <em>is there a window during which one Enactor has applied an older plan after another Enactor has deleted it,</em> was a question nobody had thought to ask, because the failure mode it describes had never happened.</p><p>There was no monitoring for it, because there was no model of it. Observability, in Sridharan&#8217;s sense, might have caught it: if the raw event stream of Enactor operations, with full cardinality on plan version and Enactor identity, had been queryable, an engineer during the incident could have constructed the query that revealed the interleaving. Whether anyone would have thought to construct that query in the first ninety minutes of the outage is a separate question.</p><p>Ben Sigelman, who designed Google&#8217;s Dapper tracing system and later co-founded LightStep, has argued that the practical limit of observability is set by the <strong>cost of the questions you are not yet asking.</strong> Storing every span, log, and structured event at full cardinality is theoretically ideal and economically impossible. </p><p>Every organisation makes a choice about which dimensions to preserve, and that choice is, in retrospect, always slightly wrong, because the next incident is the one whose relevant dimension was sampled out.</p><p>The discipline is not to eliminate this gap, which cannot be done, but to <em>acknowledge</em> it: to recognise that your dashboards are a model, that the model is incomplete, and that the moments when the model and the system disagree are the moments that matter most.</p><div><hr></div><h2>The three frames of reference</h2><p>The DynamoDB cascade in Part I introduced, almost in passing, an idea worth making explicit. During the outage, the system existed in three simultaneously valid states, depending on whose vantage point you took: the data plane saw a healthy service, the control plane saw correctly-served DNS, the client saw nothing.</p><p>This is not a metaphor. It is structural, and it has a theoretical grounding. <strong>Lamport&#8217;s 1978 paper</strong> <em>Time, Clocks, and the Ordering of Events in a Distributed System</em> established that in a distributed system without a shared global clock, the only well-defined ordering between events is the <strong>happens-before</strong> relation <code>&#8594;</code>, defined transitively by causal message passing. Events that are not connected by <code>&#8594;</code> are <strong>concurrent</strong>, and concurrent events have no meaningful temporal ordering across observers; each observer may legitimately see them in a different sequence. Each observer constructs a partial order from the messages it has received, and the partial orders need not agree.</p><p>Any distributed system at scale has at least three such frames, and they almost never agree.</p><p><strong>The data plane frame</strong> is the view of the components doing the actual work. Storage nodes know whether they are reachable on their primary network interfaces and whether their disks are responding. Compute hosts know whether their workers are processing requests. From this frame, the system is described in terms of internal state: queue depths, lock contention, GC pauses, file descriptor counts.</p><p><strong>The control plane frame</strong> is the view of the systems that manage the data plane. Schedulers, load balancers, service discovery, deployment systems, autoscalers. The control plane sees the data plane through its own observations, typically lagged metrics and periodic health checks. From this frame, the system is described in terms of declarative goals and reconciliation: how many instances should be running, how many are running, what is the gap?</p><p><strong>The client frame</strong> is the view of whatever is trying to use the system. This includes external customers but also internal services that depend on the one in question. The client sees the system only through its responses: latency, error rate, correctness. From this frame, the system is described in terms of the service contract being honoured or not.</p><p>In a healthy system, all <strong>three frames</strong> produce consistent descriptions. The data plane is processing requests, the control plane sees that the data plane is processing requests, and the client receives correct responses. This consistency is what allows operators to use any one frame as a proxy for the other two.</p><p>In an unhealthy system, the frames diverge, and the <em>pattern of divergence</em> is diagnostic. <strong>Data plane healthy</strong>, client failing: the failure is in the path between them, usually DNS, routing, or load balancing. Control plane healthy, data plane degraded: the control plane is observing a stale or filtered view of the data plane. </p><p>All three frames disagreeing: the system has entered a regime its designers did not anticipate, and the on-call engineer is going to have a long night.</p><h3>Frame divergence, mechanically: GitHub, 21 October 2018</h3><p>The 2018 <strong>GitHub MySQL</strong> split-brain is the textbook case of frame divergence, and it is worth reconstructing because the mechanism turns on which observers were in which partition.</p><p>At 22:52 UTC on 21 October, routine maintenance to replace <strong>failing 100G optical equipment</strong> severed connectivity between GitHub&#8217;s US East Coast network hub and its primary US East Coast data centre. The break lasted <strong>43 seconds</strong>. Not enough for a human to react. More than enough for everything that follows.</p><p>GitHub ran MySQL in a topology managed by <strong>Orchestrator</strong>, an open-source replication-topology manager that, in GitHub&#8217;s configuration, uses <strong>Raft consensus</strong> among its own nodes to decide when to promote replicas. The primary was in US East. </p><p>Replicas existed in <strong>US West </strong>and in a public-cloud region. Orchestrator nodes were distributed across all three. Crucially, Orchestrator&#8217;s automated failover was configured to promote across regional boundaries.</p><p>The Raft protocol requires a <strong>strict majority</strong> for any decision: for a cluster of <code>n</code> nodes, <code>&#8970;n/2&#8971; + 1</code> must agree. When the East Coast data centre dropped off the network, the Orchestrator nodes inside it were partitioned with it. The remaining nodes (US West plus US East public cloud) retained a quorum. </p><p>From their frame, the primary had failed; the only action under Raft&#8217;s liveness assumption was to elect a new leader and promote. Within seconds of the partition forming, the Orchestrator quorum began the <strong>leadership deselection process</strong>, opened a new Raft term, and promoted a US West MySQL replica to primary. Application traffic in the unaffected regions began flowing to it.</p><p>This is, in the language of CAP, the choice MySQL replication and Orchestrator had been configured to make: <strong>availability over consistency</strong>. When the network partitioned, the system preserved availability (writes continued to be accepted somewhere) at the cost of consistency (writes accepted in one partition were unknown to the other). Daniel Abadi&#8217;s <strong>PACELC</strong> refinement (2010) makes the framing sharper: <em>if Partitioned, choose between Availability and Consistency; Else, choose between Latency and Consistency</em>. GitHub&#8217;s topology had chosen <code>PA/EL</code>: availability under partition, latency in the steady state. The cost of that choice was paid, in full, during the 43 seconds the partition was active and the 40 minutes that followed.</p><p>The partition healed 43 seconds later. From the East Coast frame, nothing had happened: the local MySQL primary had continued serving writes the whole time, because applications in East continued routing to it. From the West Coast frame, <em>it</em> was now the primary, and writes were flowing in. <strong>Both databases had accepted writes for the duration of the partition, neither aware of the other&#8217;s writes.</strong> </p><p>Cross-region MySQL replication carries some lag in steady state, which is the window during which writes acknowledged to clients on East had not yet reached West and were therefore not present on the newly-promoted West primary.</p><p>The trap closed in the next forty minutes. Once connectivity restored, GitHub&#8217;s application tier saw the new West Coast primary and began directing writes to it. For nearly <strong>40 minutes</strong>, the West Coast accepted writes that the East Coast primary did not see. Meanwhile, the East Coast primary contained the <strong>few seconds</strong> of writes from the partition window that had never been replicated to West.</p><p>When engineers locked deployment tooling and assessed state, they found two databases with divergent histories. Reconciling by failing back to East would discard the 40 minutes of West Coast writes. Failing forward on West would discard the East Coast partition-window writes. Neither was acceptable.</p><p>GitHub chose to <strong>fail forward</strong>, preserving the 40 minutes of West Coast writes at the cost of consistency: applications in the East Coast now had to make a cross-country round trip for every database call, adding cross-country latency to operations that had been designed to complete in local-region time. </p><p>The site was effectively degraded for <strong>24 hours and 11 minutes</strong> while data was restored from backups, replication was rebuilt, and the orphaned East Coast partition-window writes were manually reconciled from binary logs. As the post-mortem records: one of the busiest clusters in the partition window contained <strong>954 writes</strong> that had to be reconciled by hand.</p><p>From the East Coast control plane&#8217;s frame, the system had operated correctly: writes were accepted, replication was healthy locally, no monitoring fired. From the Orchestrator quorum&#8217;s frame, failover happened exactly as designed when the primary became unreachable. </p><p>From the <strong>data plane&#8217;s frame</strong>, two independent write histories existed during a window neither side observed in full. From the client frame, some writes had succeeded that, in a consistent universe, would have been rejected.</p><p>The 43 seconds of partition were the <strong>trigger</strong>. The frame divergence was the <strong>failure</strong>. The trigger was unavoidable; physical networks partition. </p><p>The deeper unavoidability was theoretical: the <strong>FLP impossibility result</strong> (Fischer, Lynch, Paterson, 1985) proves that no asynchronous deterministic consensus protocol can guarantee both safety and liveness in the presence of even a single crash failure. </p><p>Every real consensus system, including Raft, breaks this tie pragmatically, in Raft&#8217;s case, by leaning on timing assumptions to maintain liveness. Those timing assumptions are exactly what fail during a network partition; the algorithm has no choice but to make progress on the basis of local observations that, <em>during</em> the partition, were sufficient for a local quorum decision but <strong>insufficient to determine the global state</strong>.</p><p>GitHub&#8217;s subsequent <strong>re-architecture</strong> eliminated cross-region automatic failover precisely because no observation surface available in real time was sufficient to detect the divergence as it was happening. </p><p>They moved the consistency/availability tradeoff from automatic to <strong>human-in-the-loop</strong>, accepting longer mean-time-to-recovery in exchange for not making this specific decision wrong again.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The Heisenbug problem</h2><p>There is a class of bug in distributed systems that disappears when you try to observe it. The folklore name is <strong>Heisenbug</strong>, after the uncertainty principle; the technical name is <strong>observation-dependent failure</strong>.</p><p>These bugs exist because adding observation to a system changes the system. Logging a value takes time, which changes the timing of the surrounding code, which changes the order in which <strong>concurrent operations</strong> interleave, which changes whether the race condition fires. </p><p>Capturing a stack trace acquires locks, which changes contention, which changes which thread reaches the critical section first. The act of looking at the system alters what the system does.</p><p>This is, again, not a metaphor. Modern observability tooling routinely takes 1-5% of a service&#8217;s CPU and a measurable fraction of its memory.<strong> eBPF-based profilers</strong>, distributed tracing, log aggregation, all of them consume resources that come from the same pool the application uses to do its work. In the steady state, the cost is acceptable. </p><p>In the regime where the<strong> system is already saturated</strong>, adding observation can be the perturbation that pushes the system from a marginal state into a failure state.</p><p>The mitigation is not to remove observation, which would leave the system unobservable. The mitigation is to design observation to be <strong>low-overhead and load-shedding</strong>: when the system is saturated, observation is the first thing to drop, not the last. </p><p>Sampling rather than full capture, head-based sampling rather than tail-based, structured events written to local buffers rather than synchronous network calls.</p><p>The modern technical answer to this is <strong>eBPF</strong>: in-kernel observation programs verified for safety at load time and executed in response to kernel events. Because the aggregation happens in kernel space, written into <strong>perf event arrays</strong> or <strong>BPF ring buffers</strong> shared with user-space readers via mmap, the observation path bypasses the syscall boundary entirely. </p><p>The cost of recording an event collapses to a few cache-line writes, with no context switch and no allocator pressure on the application path. </p><p>The Linux kernel&#8217;s eBPF verifier statically proves termination and memory safety at program load time, which means an observation program cannot crash the kernel even if it has a bug; bpftrace, BCC, and <strong>Cilium&#8217;s Hubble</strong> all build on this substrate. </p><p>The implication for the Heisenbug problem is that, for many workloads, eBPF-based observation has overhead small enough that <strong>observing the system no longer meaningfully alters the system&#8217;s behaviour</strong>.</p><p>Each of these decisions trades observability for the ability to keep the system running while it is being observed. The trade is acceptable only if you have decided it deliberately. </p><p>In most systems, it has been decided by accident, by whatever the default configuration of the tracing library is, set by whichever engineer integrated it.</p><p>But the deepest version of the observation-disturbing-the-system problem is not about overhead. It is about <strong>circular dependency between the observation surface and the thing being observed</strong>. </p><p>When the monitoring system depends on the system it is monitoring, a failure in the monitored system blinds the <strong>monitoring system</strong>, and the operator loses access to the diagnostic data at precisely the moment they need it most. </p><p>There is no better illustration of this than the 73 hours that began at 13:37 PDT on 28 October 2021.</p><div><hr></div><h3>The Roblox outage, mechanically</h3><p>Roblox at the time ran more than <strong>18,000 servers</strong> and <strong>170,000 containers</strong> across its own data centres, orchestrated using the HashiCorp stack: <strong>Nomad</strong> for scheduling, <strong>Vault</strong> for secrets, and <strong>Consul</strong> for service discovery, health checks, session locking, and as a KV store. </p><p>Consul was the central nervous system. Every service depended on it to find its peers.</p><p>A <strong>single Consul cluster</strong> supported the entire backend: 5 voter nodes plus 5 non-voter read replicas. This was, as the post-mortem would later note, a single point of failure of a kind that violated every textbook lesson about blast-radius isolation. </p><p>In the months leading up to October, Roblox had upgraded from Consul 1.9 to 1.10 to take advantage of a new <strong>streaming feature</strong> designed to reduce CPU and network bandwidth on large clusters. The feature had been incrementally enabled across services without incident. </p><p>On 27 October at 14:00, the day before the outage, it was enabled on the <strong>traffic routing</strong> service, and the number of routing nodes was increased by 50% in anticipation of end-of-year traffic.</p><p>At <strong>13:37 PDT on 28 October</strong>, Vault performance began to degrade and a single Consul server began exhibiting high CPU load. Engineers began to investigate; users were not yet impacted. The first signal was unusual write latency on Consul&#8217;s underlying KV store: the <strong>50th percentile</strong>, normally <strong>under 300 ms</strong>, had climbed to <strong>2 seconds</strong>.</p><p>The cluster was failing for two reasons that interacted, neither of which engineers identified for days.</p><p>The first was the streaming feature itself. HashiCorp would later explain that streaming, while overall more efficient than long polling, used <strong>fewer concurrency control elements (Go channels)</strong> in its implementation. </p><p>Under very high read <em>and</em> very high write load, the design exacerbated contention on a single Go channel, blocking writes and consuming CPU in kernel spin locks along the streaming subscription code path. This pathology had not appeared in HashiCorp&#8217;s pre-release benchmarks because it required the specific combination of large stream count and high churn rate that Roblox&#8217;s workload produced.</p><p>The second was buried inside Consul&#8217;s persistence layer. Consul uses <strong>BoltDB</strong>, an embedded Go key-value store inspired by LMDB&#8217;s memory-mapped design, to persist its <strong>Raft write-ahead log</strong>. </p><p>BoltDB&#8217;s design is a single memory-mapped file organised as a copy-on-write B+tree: every write transaction allocates new pages, never modifies existing ones, and commits by atomically swapping a single root pointer. This gives crash-safety, at the cost of page churn.</p><p>When pages become unreachable, <strong>BoltDB</strong> does not release them to the OS. Instead it tracks them in a <strong>freelist</strong> of free page IDs, which is rewritten in its entirety on every transaction commit. At normal scale, freelist maintenance is negligible. At <strong>Roblox&#8217;s scale</strong>, after months of accumulated Raft log writes, the freelist had grown pathologically.</p><p>The post-mortem provides the actual numbers, taken from a Consul server during the incident: the <strong>4.2 GB Raft log store contained only 489 MB of actual data</strong>. The remaining <strong>3.8 GB was empty space</strong>, tracked as free pages. </p><p>The freelist tracking those pages had grown to <strong>7.8 MB</strong>, containing <strong>nearly a million free page IDs</strong>. For every Raft log append, with all the batching Consul applies, a write of 16 KB or less was triggering a rewrite of the entire 7.8 MB freelist to disk.</p><p>This is the pathology. Each transaction commit performed: a search of the million-entry freelist for free pages; an update to that freelist; serialisation of the entire 7.8 MB freelist to disk; and an <code>fsync(2)</code> whose cost was dominated by the size of the dirty page set, which was now dominated by the freelist itself. </p><p>The work scaled linearly with <strong>freelist length</strong>, and the freelist length grew with every snapshot the system performed to keep itself trim.</p><p>Raft, sitting on top of BoltDB, has timing assumptions. The leader replicates log entries to followers and must commit them durably. </p><p>When BoltDB commit latency entered the multi-second range, leaders could not durably persist <strong>log entries fast enough</strong>; followers timed out, started elections, and a new leader was chosen, which inherited the same BoltDB file, performed the same expensive freelist operations, became slow, lost its leadership in turn, and triggered another election. </p><p>The cluster was <strong>alive but unable to make progress</strong>: a Raft cluster trapped in a leader-flap loop, with each leader&#8217;s presence too brief to commit meaningful work.</p><p>This was an internal failure at the level of database page management, observed at the level of cluster leadership stability. The two layers were not connected in anyone&#8217;s mental model of the system. They were connected through a freelist data structure most engineers did not know existed.</p><p>The team&#8217;s first hypotheses, in order, were the ones the operator&#8217;s model suggested. They suspected <strong>degraded hardware</strong> and replaced a Consul node. Performance continued to suffer. </p><p>They suspected <strong>capacity</strong>, and replaced all the Consul nodes with new machines: <strong>128 cores</strong> (up from 64) on faster NVME SSDs. As the post-mortem would later document, this <strong>made things worse</strong>: the new servers were dual-socket NUMA architectures, and the additional cores meant additional concurrent goroutines contending on the same <strong>Go channel </strong>in the streaming code path. </p><p>Cross-socket memory access added latency to operations that had been local on the old 64-core single-socket machines.</p><p>By 16:35 PDT on the 28th, concurrent users had dropped to 50% of normal. Subsequent attempts, resetting the cluster from a snapshot, blocking <strong>incoming traffic</strong> with <code>iptables</code> to bring it back under controlled conditions, reducing health-check frequency from 60 seconds to 10 minutes to give the cluster breathing room, all stabilised the system briefly and then returned it to the same 2-second KV write latency. </p><p>None of these interventions worked because none of them addressed the actual mechanism. The post-mortem is explicit: engineers did not identify the BoltDB freelist issue <em>during</em> the incident. <strong>HashiCorp</strong> engineers determined the root cause in the <strong>days after</strong> the outage ended.</p><p>This is where the observer problem becomes operationally devastating. <strong>Roblox&#8217;s monitoring infrastructure depended on Consul.</strong> When Consul was unhealthy, the dashboards that would have shown engineers what was happening inside Consul were themselves unable to report. The post-mortem describes this directly:</p><blockquote><p><em>There was a circular dependency between our telemetry systems and Consul, which meant that when Consul was unhealthy, we lacked the telemetry data that would have made it easier for us to figure out what was wrong.</em></p></blockquote><p>The diagnostic question the operator needed to ask, <em>what is the actual state of the BoltDB file inside the affected Consul instances,</em> required telemetry that the affected systems were supposed to provide. They could not. </p><p>Engineers were debugging a system whose internal state was now unobservable, against a <strong>failure mode </strong>buried two software layers deep in an open-source dependency that the affected engineers had not personally written.</p><p>The breakthrough came at 15:51 PDT on <strong>30 October</strong>, roughly 50 hours after the outage began, when engineers disabled the streaming feature across all Consul systems. KV write latency immediately returned to 300 ms. </p><p>The Heisenbug-disguised streaming contention had been suppressed; the underlying <strong>BoltDB freelist problem </strong>was still there, manifesting as a &#8220;<em>slow leader</em>&#8221; symptom in which certain leaders inherited the worst of the freelist state. </p><p>The team pragmatically worked around it by preventing those leaders from staying elected, and continued the long process of repopulating caches and restarting services.</p><p>Total downtime: <strong>73 hours</strong>, from 13:37 PDT on 28 October to <strong>16:45 PDT on 31 October</strong>, when 100% of players were given access. </p><p>The trigger was the interaction between Consul streaming and BoltDB&#8217;s freelist; both bugs, both fixable, both ultimately fixed (the BoltDB freelist issue was resolved by migration to <strong>bbolt</strong>, the etcd-io fork of BoltDB, which uses a hashmap-based freelist).</p><p>The <strong>outage duration</strong> was a property of the observation surface. With working telemetry into Consul&#8217;s internal state, the freelist issue would have been visible in hours, not days. Without it, engineers were solving a Heisenbug with their eyes closed.</p><p>The lesson Roblox drew, encoded explicitly in their post-mortem and in the architectural changes that followed, was that observation surfaces must be <strong>independent</strong> of the systems they observe. </p><p>Telemetry must run on infrastructure that does not depend on the thing being measured. If the monitoring stack and the production stack share a common substrate, a failure in that substrate blinds both at once, and the operator is left to debug a <strong>fully dark system</strong>.</p><p>This is, in the language Part I used, an <strong>invariant</strong> at the boundary between the observation system and the production system: <em>the observability stack must function independently of any system whose state it reports.</em> </p><p>The invariant is rarely enforced. It is rarely even written down. It is one of the assumptions the operator does not know they have made until the day Consul stops responding and the dashboards go dark with it.</p><div><hr></div><h2>The operator&#8217;s simulation</h2><p>Every operator, when debugging a system, is in fact debugging a <em>model</em> of the system that lives in their own head. </p><p>The model was built from <strong>architecture documents</strong>, code reading, prior incidents, and conversation with colleagues. The model is a simplification, by necessity, because the system is too complex to fit in one head.</p><p>The model is also wrong, in specific ways, and the operator does not know which specific ways until the model and the system diverge.</p><p>This determines whether an incident is resolved in twenty minutes or six hours. During an outage, the operator performs inference: <em>symptoms</em> are observed, <em>hypotheses</em> are <strong>generated from the model</strong>, <em>tests</em> of those hypotheses are designed and executed. The hypothesis space the operator can explore is bounded by the model the operator has.</p><p>If the failure mode lives outside the model, the operator cannot generate the hypothesis that would lead to it. They will iterate, increasingly desperately, on hypotheses inside the model, none of which fit the symptoms, until either someone with a better model joins the call or the system recovers on its own.</p><p>The <strong>Cloudflare incident from Part I</strong> is partly an instance of this. The first ninety minutes were spent on the hypothesis that the failure was an external DDoS attack, because the oscillation between good and bad states matched the signature of <strong>intermittent external pressure</strong> better than it matched the signature of anything Cloudflare&#8217;s engineers had a model for. </p><p>The model said &#8220;<em>oscillation means external adversary.</em>&#8220; The reality was that oscillation meant gradual rollout against a five-minute regeneration cycle, but that failure mode was not in anyone&#8217;s model until the post-mortem.</p><p><strong>Richard Cook&#8217;s</strong> <em>How Complex Systems Fail</em> (1998) names this directly: every operator&#8217;s view of the system is a <em>practitioner-constructed simulation,</em> assembled from training, experience, and the artefacts of past incidents. </p><p>The simulation diverges from reality <strong>continuously and silently</strong>. The role of the practitioner during an incident is to detect the divergence, update the simulation, and act on the updated version, all in real time, under pressure, with incomplete information.</p><p>The systems that recover quickly from incidents are not the systems with the best dashboards. They are the systems whose operators have the <strong>best simulations</strong>, and whose dashboards expose enough raw data that the simulation can be <strong>corrected in flight</strong>.</p><div><hr></div><h2>The discipline of seeing what is there</h2><p>The compressed form of this essay, the operational counterpart to Part I&#8217;s diagnostic question, is also a question, asked of every observation surface in the system: <em>what is this metric not telling me, and what would I look at if it were lying?</em></p><p>Every dashboard has a set of failure modes for which it is the right view, and a set of failure modes for which it is misleading. Both sets are large. The first is documented (it is the reason the dashboard was built). The second is almost never documented, because the failure modes it contains are, by definition, the ones nobody anticipated.</p><p>The discipline is to know, for every observation, what it is showing and what it is hiding. </p><blockquote><p><em>The metric is an aggregate over what dimensions? Over what time window? With what sampling? </em></p><p><em>Does the observation surface share a substrate with the system it observes? </em></p><p><em>What would a failure that is invisible on this metric look like, and what other view would catch it? </em></p><p><em>When the metric and the user experience disagree, which one should be believed?</em></p></blockquote><p>The answer to the last question is always: the user experience. The metric is a model. The user is in the data plane. The data plane is the system.</p><p>The discipline of <strong>observation-aware engineering</strong> is not to build dashboards that show everything; that is impossible, and the attempt produces dashboards that show nothing useful. </p><p>It is to know, for every dashboard, <em>what it cannot show</em>, to keep the raw event stream queryable for the moments when the dashboard and the system disagree, and to keep the observation stack <strong>architecturally independent</strong> of the systems it watches.</p><p>This is what separates the systems where the operator spends the first hour of an incident <em>narrowing the hypothesis</em> from the systems where the operator spends the first hour <em>arguing about whether the dashboards are correct</em>.</p><p><strong>Part III</strong> will move from observation to action: what it takes to operate a system whose state you cannot fully see, whose feedback loops fight you, and whose composition you do not control. The technical name for this is <em>control theory under uncertainty.</em> The operational name is on-call.</p><div><hr></div><h2>One more thing&#8230;</h2><p>The reason these failures keep happening is that engineers are trained to reason about the <strong>logical</strong> structure of their systems, not the <strong>physical</strong> dynamics of how those systems execute under load.</p><p>The same gap exists, in concentrated form, in <strong>GPU programming</strong>. CUDA correctness is necessary but not sufficient. Performance lives entirely in how memory traffic, warp scheduling, instruction issue, and inter-block synchronisation interact under realistic workloads: the same composition-and-observation problem, compressed into a single die.</p><p>I wrote a <strong>deep guide on CUDA</strong> from this perspective: not isolated tricks, but how to reason about the GPU as a coupled dynamical system whose performance regimes are as discontinuous as any distributed system&#8217;s.</p><p><a href="https://lorenzobrada.gumroad.com/l/cuda_mastery">Read the CUDA Guide on Gumroad</a></p>]]></content:encoded></item><item><title><![CDATA[How Systems Really Fail, Part I]]></title><description><![CDATA[The hidden physics of distributed outages, metastable cascades, and the assumptions that silently destroy systems at scale.]]></description><link>https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-i</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-i</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Mon, 11 May 2026 11:08:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!p7K1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p7K1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p7K1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!p7K1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!p7K1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!p7K1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p7K1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2588602,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/195937335?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p7K1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!p7K1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!p7K1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!p7K1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecc7867d-9a2e-4c72-a92c-19f6abf85478_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Intro</h2><p>There is a version of <strong>distributed systems</strong> that exists in textbooks, RFCs, and the architecture diagrams that get drawn during the first month of a new project. </p><p>In that version, failures are <strong>discrete events</strong>: a node dies, a network partitions, a disk fills. Each event has a name. Each name has a mitigation. The mitigations compose. The composition is correct.</p><p>Then there is the version of distributed systems that exists in production at 03:47 UTC, when the <strong>on-call engineer</strong> is staring at a dashboard that shows everything green except for a customer-impact metric that has been climbing for nine minutes. </p><p>The runbook does not apply because it was written for the system that existed before the migration, the last engineer who understood the offending subsystem left the company<strong> seven months ago</strong>, and the only documentation is a Confluence page from 2023 that contradicts itself in the third paragraph.</p><p>This series is about the <strong>second version.</strong></p><p>It is not about how to design distributed systems. There are good books for that. It is about what happens to those designs after they meet reality: after the load grows by a <strong>factor of fifty</strong>, after three reorgs change the ownership of half the services, after the configuration file that was supposed to be immutable acquires a small permissions change on a Tuesday morning in November. </p><p>It is about the failure modes that emerge <strong>not from broken components</strong> but from the interaction between working ones. It is about why debugging at scale is not a technical activity but an epistemic one. </p><p>And it is about the <strong>design decisions</strong>, often made years before the outage, that determine whether a system has a fighting chance when the failure arrives.</p><p>Five essays. Each stands alone. They share a thesis: the gap between how engineers reason about systems and <strong>how systems actually behave </strong>is not a knowledge problem. It is a structural property of complexity. </p><p>The faster you accept this, the better your systems will be.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The Composition Problem</h2><p>On Monday, 17 November 2025, an engineer at Cloudflare merged a change to a permissions policy on the company&#8217;s <strong>ClickHouse database</strong> clusters. </p><p>The change was part of a long-running effort to migrate distributed queries from a shared system account to <em>per-user authentication</em>, so that query limits and access grants could be evaluated at <strong>finer granularity.</strong> It was the right kind of change. Reviewed, staged, rolled out gradually across cluster nodes, exactly as a careful operator would do it.</p><p>At 11:05 UTC the following morning, the rollout reached a critical threshold. Twenty-three minutes later, the internet broke.</p><p>At 11:28 UTC, Cloudflare&#8217;s network, which fronts roughly 20% of the websites on the public internet, began returning<strong> HTTP 5xx errors </strong>at scale. ChatGPT failed. X failed. Spotify, Discord, Canva, Figma, 1Password, Trello. </p><p>The outage lasted until 14:30 UTC for core traffic, with full restoration at 17:06 UTC. <strong>Matthew Prince</strong>, Cloudflare&#8217;s CEO, would later describe it as the worst outage since 2019. Estimated revenue loss across the affected ecosystem ran into the hundreds of millions of dollars.</p><p>The <em>chain of causation</em>, once it was understood, fits in a paragraph.</p><p>Cloudflare&#8217;s <strong>Bot Management module</strong> runs inside its core proxy (a system called FL, with a newer version FL2). The module scores every request as bot-or-human using a machine-learning model. </p><p>That model takes as input a &#8220;<em>feature configuration file</em>&#8221;, a list of per-request features, which is <strong>regenerated every five minutes</strong> by a query against a ClickHouse cluster. The regeneration query reads from <code>system.columns</code>, ClickHouse&#8217;s metadata table:</p><pre><code><code>SELECT name, type
FROM system.columns
WHERE table = 'http_requests_features'
ORDER BY name;</code></code></pre><p>Note what is <em>not</em> in this query: a filter on the <strong>database name. </strong>The query implicitly assumed that <code>system.columns</code> would only return columns from the <code>default</code> database, because before the permissions migration users only had visibility into <code>default</code>. </p><p>ClickHouse&#8217;s<strong> distributed table engine</strong> actually stores shards in an underlying physical schema named <code>r0</code>. The new permissions policy granted explicit access to <code>r0</code>. After the change, the same query returned columns from both <code>default</code> and <code>r0</code>, roughly doubling the row count.</p><p>That<strong> row count </strong>was used directly to construct the feature file. The file had previously contained around 60 features. It now contained more than 200.</p><p>Downstream, in the Rust code that loaded the file into the FL2 proxy, there was a preallocated array sized for a<strong> hard ceiling </strong>of exactly 200 features: a performance optimisation so that runtime feature lookups would never allocate. </p><p>When the <strong>oversized file</strong> arrived, the load path returned <code>Err(_)</code>. The calling code, written under the assumption that this could not happen, called <code>.unwrap()</code> on the Result. </p><p>The worker thread panicked with the now-public string:</p><pre><code><code>thread fl2_worker_thread panicked: called Result::unwrap() on an Err value</code></code></pre><p>Every request routed through that worker returned 5xx.</p><p>The damage was amplified by a <strong>second-order property</strong>. ClickHouse was being rolled out gradually, so for nearly an hour only some cluster nodes returned the duplicated result. </p><p>The feature file <strong>regenerated every five minutes</strong>, and whether the run hit an upgraded node or a non-upgraded node was effectively random. </p><p>The file therefore alternated, every five minutes, between &#8220;<em>good</em>&#8221; and &#8220;<em>bad</em>,&#8221; and the proxy fleet oscillated between recovery and failure on a five-minute cycle. </p><p>From the dashboards, this looked exactly like an <strong>active DDoS attack</strong>, an external adversary probing the network with intermittent pressure. </p><p>The <strong>incident commander </strong>spent the first two hours of the outage investigating that hypothesis, because the <em>signature</em> of the failure mimicked a known threat.</p><p>Read this again. Notice what is not in it.</p><p>There was no bug in the database. The new permissions behaviour was correct <strong>ClickHouse semantics</strong>. There was no bug in the query; it executed exactly as written. </p><p>There was no bug in the feature file format; it stored what it was given. There was no bug in the <strong>Rust proxy</strong>, its bounds check correctly refused to process malformed input rather than corrupting state. </p><p>There also was no bug in the deployment process, gradual rollout to a database cluster is exactly how you <strong>mitigate rollout risk</strong>. Every component, examined in isolation, behaved as designed, as documented, as code-reviewed.</p><p>The outage existed in the spaces between the components. It existed in an <strong>unwritten assumption</strong>, that the cardinality of the metadata query was bounded by the schema layout. </p><p>It was present in the gap between the team that owned the permissions migration and the team that owned the feature pipeline. </p><p>It even existed in the asymmetry between data Cloudflare treated as &#8220;<em>trusted</em>&#8221; (internally generated configuration) and data it treated as &#8220;<em>untrusted</em>&#8221; (everything from outside). </p><p>The failure was <strong>not a property</strong> of any component. It was a property of the system.</p><p>This is the central, uncomfortable fact about distributed systems: their failure modes are not documented because they cannot be documented. </p><p>They emerge from the<strong> composition of components</strong>, and the space of possible compositions grows faster than anyone can enumerate it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Why decomposition breaks down</h2><p>Software engineering is almost entirely built on decomposition. </p><p>You take a <strong>hard problem</strong>, split it into smaller problems, solve each, and compose the solutions. The discipline assumes (implicitly, almost religiously) that the behaviour of the whole can be derived from the behaviour of the parts. </p><p>This is the foundation of <em>modular design</em>, encapsulation, microservices, contracts, type systems. It is what allows <strong>ten thousand engineers</strong> to build a system no one of them understands in full.</p><p>The assumption is wrong, or rather: it holds only within a regime, and the regime ends somewhere around the scale where a system has enough components, enough state, and <strong>enough concurrency</strong> that the <em>interactions</em> between components become a richer source of behaviour than the components themselves.</p><p>The formal version of this argument is older than computer science. Herbert Simon, in <em>The Architecture of Complexity</em> (Proc. Am. Phil. Soc., 1962), distinguished between <strong>decomposable</strong> and <strong>nearly-decomposable</strong> systems. </p><p>In a <strong>decomposable system</strong>, interactions <em>between</em> subsystems are negligible compared to interactions <em>within</em> them, and the whole behaves like the sum of independent parts.</p><p> In a nearly-decomposable system, this is <strong>approximately true </strong>on short timescales but not on long ones, the weak inter-subsystem couplings accumulate into qualitatively different behaviour. </p><p><strong>Simon&#8217;s claim</strong>, which has held up for sixty years across biology, economics, and engineering, is that all real systems of significant size are nearly-decomposable, not decomposable.</p><p>Distributed systems are an extreme case. The components have <strong>clean interfaces </strong>and look decomposable on a diagram. </p><p>But the interactions are mediated by shared resources (networks, clocks, storage, control planes) and those shared resources transmit perturbations between components in ways the diagram does not show. </p><p>A change in one component changes the<strong> load profile</strong> on the shared network, which changes the queueing behaviour at a different component, which changes the timing of its responses, which changes the<strong> retry behaviour </strong>of yet another component. The composition is opaque because the couplings are invisible.</p><p>Distributed systems theory has known a version of this for forty years. <strong>Fischer, Lynch, and Paterson (</strong><em><strong>JACM</strong></em><strong> 1985)</strong> proved that consensus is impossible in a purely asynchronous system with even one faulty process; a result that, properly understood, is not about <strong>consensus algorithms </strong>but about the impossibility of producing globally consistent system behaviour from locally correct components under partial failure. </p><p>Brewer&#8217;s CAP conjecture (PODC 2000) and the Gilbert-Lynch proof (<em>ACM SIGACT</em> 2002) formalised the same point at the level of state. </p><p>Lamport&#8217;s &#8220;<em>Time, Clocks, and the Ordering of Events in a Distributed System</em>&#8221; (<em>CACM</em> 1978) showed that there is <strong>no observer-independent</strong> <strong>simultaneity </strong>in a distributed system without explicit synchronisation, meaning every &#8220;global view&#8221; of the system is a stitched-together fiction.</p><p>The classical literature focused on <em>discrete</em> failures: a node dies, a message is lost, a clock drifts. The modern failures are stranger. </p><p>They are failures of <strong>coupling</strong>: moments when two pieces of working software, communicating through an interface both implement correctly, produce a behaviour neither would produce alone. </p><p>The Cloudflare incident is one. The <strong>DynamoDB DNS</strong> <strong>race condition</strong> that took down AWS US-EAST-1 on 19&#8211;20 October 2025 is a more elaborate example of the same pattern, and it is worth reconstructing mechanically because it shows how thoroughly the composition can betray its components.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h3>The AWS DynamoDB cascade, mechanically</h3><p>DynamoDB&#8217;s regional endpoint, <code>dynamodb.us-east-1.amazonaws.com</code>, is served by an <strong>internal DNS management</strong> system that exists because DynamoDB runs on hundreds of thousands of<strong> load balancers</strong>, and the DNS records pointing clients at those load balancers must be updated continuously as capacity is added, removed, and rebalanced.</p><p>The system has two logical components. The <strong>DNS Planner</strong> monitors load-balancer health and produces &#8220;<em>DNS plans</em>&#8221;, versioned snapshots of which load balancers receive which fraction of regional traffic. </p><p>The <strong>DNS Enactor</strong> reads plans and applies them to Route 53, AWS&#8217;s DNS service. For availability, three Enactors run in parallel, one per availability zone. They operate <strong>concurrently and independently</strong>; no distributed lock, no leader election, no coordination protocol. </p><p>The system was designed this way deliberately, so a <strong>single Enactor crashing mid-run </strong>would not stall propagation; the other two would simply pick up subsequent plans and continue.</p><p>To prevent stale plans from overwriting newer ones, each Enactor performs a freshness check before applying a plan. </p><p>To prevent <strong>unbounded growth</strong> of historical plans, each Enactor also performs a cleanup pass after applying its current plan, deleting plans significantly older than the current one. </p><p>The freshness check happens once, at the start of the application phase. The cleanup happens once, at the end.</p><p>This is, again, the kind of design that gets praised in <strong>code review.</strong> Independent. Stateless. Fault-tolerant. Each component does one well-bounded job.</p><p>Now consider what actually happened. At 23:48 PDT on 19 October (06:48 UTC on 20 October), Enactor A read plan #N&#8722;1 from the Planner and began applying it to Route 53. </p><p>For reasons AWS&#8217;s post-mortem describes as &#8220;<em>unusual delays</em>&#8221;, likely network-mediated queueing inside Route 53&#8217;s control plane, <strong>Enactor A&#8217;s update</strong> run took longer than normal. </p><p>In the meantime, the <strong>Planner produced plan #N. </strong>Enactor B picked up plan #N, performed its freshness check (newer than the currently applied plan: pass), and began its own update run. </p><p><strong>Enactor B</strong> finished first, applying #N to Route 53. It then began its cleanup pass, scanning for plans significantly older than #N and deleting them.</p><p>By the time Enactor A finished its delayed run and went to apply the <em>last few records</em> of plan #N&#8722;1, Enactor B had already applied #N to those same records. </p><p>Enactor A&#8217;s freshness check, made at the start of its run, had not detected this; the check was made when #N&#8722;1 was still the freshest plan, and that result was now stale. Enactor A overwrote those records with #N&#8722;1.</p><p>Now Enactor B&#8217;s cleanup pass arrived at plan #N&#8722;1. By Enactor B&#8217;s bookkeeping, #N&#8722;1 was significantly older than #N. Enactor B deleted plan #N&#8722;1. But Enactor A had just applied #N&#8722;1 to the regional endpoint records. </p><p>The records now pointed at a plan that did not exist. Route 53 dutifully served what it had: an empty answer set for <code>dynamodb.us-east-1.amazonaws.com</code>.</p><p>This is the worst possible<strong> DNS response</strong>. It is not <code>NXDOMAIN</code>, which clients treat as transient and retry. It is <code>NOERROR</code> with an empty <code>ANSWER</code> section; semantically &#8220;<em>this name exists, intentionally, with zero addresses.</em>&#8221; Compliant clients stop. There is no answer to retry.</p><p>Within seconds, every system inside and outside AWS that wanted to talk to DynamoDB in us-east-1 began failing to resolve its address. From the <strong>DynamoDB control plane&#8217;s view</strong>, the service was healthy: load balancers up, storage reachable, request handlers idle. </p><p>From Route 53&#8217;s view, the service was healthy: DNS was returning valid <strong>authoritative responses</strong>. From clients&#8217; view, the service had ceased to exist. Three different frames of reference, three different &#8220;<em>states</em>&#8221; of the same service, all simultaneously true within their own frame. The mismatch <em>between</em> them was the outage.</p><p>It took <strong>manual intervention</strong> from on-call engineers to identify the empty record, repair Route 53 by hand, and re-enable normal automation. DynamoDB DNS recovered in approximately three hours.</p><p>The cascade that followed lasted ten more hours, and is the second composition failure embedded inside the first. EC2&#8217;s <strong>DropletWorkflow Manager</strong> (DWFM), the system that maintains operational leases on the physical hypervisors hosting customer EC2 instances, stores its lease state in DynamoDB. </p><p>While DynamoDB was unreachable, DWFM could not renew leases. Existing leases expired silently. When DynamoDB recovered, <strong>DWFM woke up </strong>to discover that essentially every hypervisor in the region needed a fresh lease, and tried to issue them all at once. </p><p>The<strong> lease-renewal</strong> subsystem entered what AWS&#8217;s post-mortem calls &#8220;<em>congestive collapse</em>&#8221;, a regime where throughput of <em>useful</em> work approaches zero because the system is spending all its time servicing retries of work that has already timed out. </p><p><strong>Network Load Balancer</strong> health checks began failing en masse. New EC2 launches were impossible. The region was effectively down for production workloads until late that evening. Every design decision in this chain was <strong>defensible</strong>. Three Enactors instead of one, for availability. </p><p>Freshness check, to prevent old plans winning. <strong>Cleanup pass</strong>, to prevent unbounded growth. No distributed lock, to avoid coordination overhead and tolerate Enactor failures. <strong>DWFM storing state</strong> in DynamoDB, because what else would you use for a high-availability lease manager. </p><p>Each decision is the textbook answer to a specific risk. </p><p>The composition of all those textbook answers produced <strong>fifteen hours</strong> of regional unavailability and an industry-wide impact measured in <em>hundreds of millions of dollars.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-i?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/how-systems-really-fail-part-i?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h2>Why documentation cannot close the gap</h2><p>The instinct, after this kind of incident, is to <strong>write better documentation.</strong> Add the failure mode to the runbook. Update the architecture diagram. Note the implicit assumption in a comment. <em>Surely, next time, we will know.</em></p><p>We will not. The reason is not laziness; it is combinatorial.</p><p>Consider a system with <strong>N components</strong>, each with a small number of internal states, dependencies, and inputs. The number of pairwise interactions grows as <strong>O(N&#178;). </strong></p><p>The number of <em>trajectories</em> (sequences of states the system can traverse) grows much faster: for any reasonable model of state and concurrency,<strong> at least exponential in N</strong>. By the time N is in the low thousands (a serious production system), the trajectory space is unbounded for practical purposes.</p><p>Documentation is a<strong> linear medium.</strong> It can describe a finite number of states, interactions, and failure modes. The space of actual failure modes is not finite in any meaningful sense. </p><p>What documentation actually captures, in practice, is the <strong>failure modes</strong> that have already happened; the ones recovered from, written up, discussed in architecture review. </p><p>This is useful, but it is fundamentally<strong> backward-looking.</strong> The next outage is, almost by definition, the one not yet documented. It lives in some currently-undocumented region of the trajectory space, which the system will enter for the first time when some perturbation pushes it there.</p><p>This is not an <strong>indictment of documentation</strong>. Runbooks save lives. Post-mortems compound institutional knowledge. The point is that no quantity of documentation, however thorough, can close the gap between the system as designed and the system as composed. </p><p>The gap is structural. It widens deeply with scale.</p><div><hr></div><h2>The pattern beneath the patterns</h2><p>If you read enough <strong>post-mortems</strong> (<em>Dan Luu&#8217;s catalogue on GitHub remains the best free education in this material</em>) a pattern emerges. </p><p>The triggers vary wildly: a permissions change, a DNS update, a config push, a deploy, a hardware failure, a thundering herd. The <em>shape</em> of the failure is often the same.</p><p>Nathan Bronson and his collaborators, in a 2021 HotOS paper, gave this shape a name: <strong>metastable failure</strong>. The framing has become foundational, and is worth restating precisely because it is the closest the field has come to a formal theory of why composition produces outages.</p><p>A metastable failure occurs in an <strong>open system</strong> with an uncontrolled load source. The system has at least two stable operating regimes: a <em>stable</em> regime, in which a <strong>transient perturbation</strong> decays back to equilibrium, and a <em>metastable failure</em> regime.  </p><p>In that case, the system is functioning (consuming CPU, processing messages, producing output) but its useful throughput, what <strong>Bronson </strong>precisely terms with the word <strong>goodput</strong>, has collapsed. </p><p>The system transitions between regimes via a <strong>trigger</strong>: a load spike, a deploy, a partial failure, a configuration change. </p><p>What keeps the system in the failure regime, even after the trigger is removed, is a <strong>sustaining effect</strong>: a positive feedback loop, usually involving work amplification, in which the system&#8217;s response to its own degraded state increases the load on itself further.</p><p>The <strong>canonical example,</strong> paraphrased from the paper:</p><p>A web tier calls a database tier through a connection pool. Database latency is normally well below the client&#8217;s request timeout. A<strong> brief perturbation</strong>, like a network blip, a slow GC pause, causes some requests to exceed the timeout. </p><p>The client retries. The retry is a <em>new</em> request, added to the existing load. Database queue depths grow. Latency increases, pushing more requests past the timeout. More retries fire. Each<strong> timed-out request </strong>still consumed full database work to compute its answer, but no client ever saw it; that work was wasted. </p><p>The system is now processing 3&#215; its normal request volume (originals plus retries), succeeding in completing them all, but every client is timing out before the answer arrives. <em>Goodput is zero. Throughput is at saturation.</em> The trigger (the original network blip) is long gone. The <strong>retry storm</strong> is sustaining the failure regime on its own.</p><p>The key insight is that the root cause of a metastable failure is the <strong>sustaining loop</strong>, not the trigger. Triggers are infinitely various and mostly cannot be prevented. </p><p>Sustaining loops are <em>finite </em>and <em>identifiable</em>, and if you eliminate them, the same trigger fails to produce the same outcome.</p><p>A follow-up paper, <em>Metastable Failures in the Wild</em> (Huang et al., OSDI 2022), examined 22 publicly disclosed incidents at 11 major organisations and concluded that at least 4 of the previous 15 major AWS outages fit the metastable pattern. </p><p>The October 2025 DynamoDB incident makes 5. The EC2 cascade after DynamoDB recovered is the<strong> metastable pattern</strong> in textbook form: the trigger (DynamoDB DNS being empty) was resolved in three hours; the sustaining loop (<em>every hypervisor in the region simultaneously demanding lease renewal from a system that could not handle the surge</em>) took ten more hours to break, and only broke when AWS manually rate-limited the work.</p><p><strong>Marc Brooker</strong>, a principal engineer at AWS who has written extensively on this material, has pointed out that the appropriate intellectual framework here is not algorithms-and-data-structures but <strong>control theory and dynamical systems</strong>. </p><p>A metastable failure is, in dynamical-systems terms, a system with two stable attractors, where the perturbation required to push the system from the desirable attractor into the undesirable one is much smaller than the perturbation required to push it back. </p><p>The <strong>state-space geometry</strong> is asymmetric. Most production engineers have never thought about their systems this way, because computer science is taught around discrete models. The systems are continuous and dynamical, whether we model them that way or not.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Invariants and the cardinality contract</h2><p>The implication is not that distributed systems are unbuildable. They obviously are. </p><p>The true implication is that the <em>mental model</em> under which most distributed systems get built (components compose, contracts compose, correctness composes) is wrong in a way that matters for production behaviour. </p><p>The discipline that replaces this mental model is the explicit enforcement of <strong>invariants</strong> at every component boundary, including internal ones.</p><p>An invariant, in this context, is a <strong>property of a value</strong> that the consumer&#8217;s correctness depends on, but that the producer is not contractually obligated to maintain. The Cloudflare feature file had at least three such invariants, none enforced by any check at the boundary:</p><ol><li><p><strong>A cardinality bound.</strong> The Rust consumer required <code>n_features &#8804; 200</code>. The ClickHouse query had no <code>LIMIT</code>, no <code>WHERE</code> on database, and no schema constraint preventing growth.</p></li><li><p><strong>A schema invariant.</strong> The consumer assumed columns came from <code>default</code> only. The query implicitly assumed the same via the permissions model. Neither stated the invariant in code.</p></li><li><p><strong>A monotonicity invariant.</strong> A doubling of feature count between two consecutive runs is, on its face, anomalous. No alarm fired on that delta.</p></li></ol><p>Each invariant was true for years. Each became false silently when an upstream change reshaped the world. The boundary between producer and consumer had no <strong>formal contract</strong>; the contract lived in the heads of engineers, some of whom had left the company.</p><p>The discipline that prevents this is not &#8220;<em>validation</em>&#8221; in the loose sense. It is the explicit, in-code, enforced declaration of every cardinality, ordering, schema, and <strong>freshness constraint</strong> that the consumer relies on, with explicit handling of violation: typically degradation to last-known-good rather than panic. </p><p>The Rust idiom for this is the difference between <code>.unwrap()</code> and explicit pattern matching on <code>Result</code>; the <strong>operational idiom</strong> is the difference between trusting upstream data and treating every input as adversarial regardless of source. </p><p>The cost of the former is a<strong> few additional lines</strong> per consumer boundary. The cost of the latter is, occasionally, six hours of global downtime.</p><div><hr></div><h2>Sustaining loops and characteristic metrics</h2><p>The second formal property the Cloudflare and DynamoDB incidents share is the presence of <strong>sustaining loops</strong>; control loops whose response to system degradation increases the load on the system rather than decreasing it. </p><p>The discipline for finding these before they fire is to <strong>enumerate every feedback loop </strong>in the system and classify each one&#8217;s stability properties.</p><p>A feedback loop is stable if, when perturbed from equilibrium by a small amount &#949;, it returns to equilibrium with <strong>error decaying</strong> as some function f(t,&#949;) that approaches zero. </p><p>A feedback loop is sustaining if the same perturbation produces error that grows or stays bounded away from zero. </p><p>The distinction is mathematically standard (<strong>Lyapunov stability</strong>) but is almost never applied to production systems, because engineers do not model their systems as dynamical systems.</p><p>The catalogue of loops in any non-trivial production system: </p><ul><li><p>retry policies (timeout &#8594; retry &#8594; load &#8594; timeout amplification); </p></li><li><p>autoscaling (latency &#8594; scale-up &#8594; cold-start latency &#8594; more scale-up); </p></li><li><p>lease renewal (load &#8594; renewal delay &#8594; lease expiry &#8594; mass renewal storm); </p></li><li><p>connection pooling (failure &#8594; reconnect &#8594; handshake load &#8594; failure); </p></li><li><p>cache warming (cold cache &#8594; DB load &#8594; DB slow &#8594; cache cannot warm); </p></li><li><p>health checks (slow response &#8594; marked unhealthy &#8594; traffic shifted to fewer hosts &#8594; those hosts slower). </p></li></ul><p>Each is a control loop. Each can be classified. The classification is rarely written down.</p><p>The observability counterpart of this classification is what Bronson calls <strong>characteristic metrics</strong>: observations of the <em>loop state itself</em>, not of the loop&#8217;s inputs or outputs. </p><p>Queue depth is a loop-state observable; request rate is not. Retry rate is a loop-state observable; error rate is not. Lease renewal latency is a loop-state observable; lease expiry rate is not. </p><p>The relationship between <strong>loop-state metrics </strong>and incident causality is direct: when a sustaining loop activates, its characteristic metric crosses out of its historical operating envelope before the user-facing symptom appears.</p><p><strong>Instrumenting characteristic metrics</strong> is the difference between detecting a metastable failure during its inflation phase (when mitigation is cheap) and detecting it after it has saturated (when mitigation requires load-shedding the user-facing service).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The diagnostic question</h2><p>The <strong>compressed form</strong> of the entire discipline reduces to a single question, asked of every component boundary in the system: <em>what am I assuming about my input that is not enforced by a check in this code?</em></p><p>Every such unenforced assumption is a future incident. The space of unenforced assumptions is large but finite, and it <strong>can be enumerated</strong>. Most engineering organisations have never done this enumeration. </p><p>The ones that have produce systems that fail in less catastrophic ways; not because they fail less often, but because the failures that occur are <strong>caught at the boundary </strong>where the assumption was violated, rather than three layers downstream after corruption has propagated.</p><p>The system you have is not the system you designed. The system you have is the composition. The <strong>composition is opaque</strong>, and the opacity is permanent, but the opacity at every individual boundary is not permanent. </p><p>Each boundary is a place where assumptions can be made explicit and enforced. The discipline of <strong>composition-aware engineering</strong> is not to make the whole transparent. </p><p>It is to make every boundary honest about what it requires from its neighbours, and to refuse to operate when those requirements are not met. </p><p>This is what separates the systems that <strong>fail loudly</strong> at the seams from the systems that fail catastrophically in the centre.</p><div><hr></div><h2>One more thing&#8230;</h2><p><strong>Modern systems</strong> rarely fail because of a single broken component.</p><p>They fail because interactions between correct components create behaviours nobody explicitly designed for. The same thing happens in high-performance GPU systems.</p><p>Most <strong>CUDA optimisation</strong> is not about isolated tricks. It is about understanding how kernels, memory hierarchies, scheduling, communication, and throughput constraints interact under load.</p><p>I wrote a <strong>deep guide on CUDA</strong> from exactly this perspective: systems-level performance engineering, bottlenecks, hidden coupling, and why many &#8220;optimisations&#8221; simply move the problem elsewhere.</p><p><a href="https://lorenzobrada.gumroad.com/l/cuda_mastery">Read the CUDA Guide on Gumroad</a></p>]]></content:encoded></item><item><title><![CDATA[We built the CUDA guide I wish I had three years ago]]></title><description><![CDATA[Intro For the past few days we have been quiet here.]]></description><link>https://www.thesoftwarefrontier.com/p/we-built-the-cuda-guide-i-wish-i</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/we-built-the-cuda-guide-i-wish-i</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Thu, 30 Apr 2026 07:20:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dOUW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dOUW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dOUW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!dOUW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!dOUW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!dOUW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dOUW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1484626,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/195844470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dOUW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!dOUW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!dOUW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!dOUW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55c88f-0b0e-48ef-bf71-1cb59dbccf28_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Intro</h2><p>For the past few days we have been quiet here. Not because the newsletter slowed down, but because we were building something underneath it.</p><p>Today we are publishing what came out of that work: <strong>CUDA Mastery 2026, The Definitive Engineer&#8217;s Reference for Hopper, Blackwell, and Beyond</strong>. </p><p>Twenty-seven chapters, five appendices, fact-checked end to end against NVIDIA&#8217;s own documentation, the <strong>PTX ISA 8.7</strong>, and primary architecture whitepapers. </p><p>It covers <strong>CUDA Toolkit 13.0, 13.1, and 13.2</strong>, compute capabilities <strong>7.5 through 12.1</strong>, <strong>WMMA</strong>, <strong>WGMMA</strong>, <strong>UMMA</strong> (<code>tcgen05</code>), <strong>TMA</strong>, <strong>thread block clusters</strong>, <strong>Tensor Memory</strong>, <strong>CUDA Tile</strong> and <strong>cuTile Python</strong>, <strong>CUTLASS 4 / CuTe</strong>, <strong>NCCL 2.30</strong>, and <strong>Nsight 2025.4</strong>.</p><p>It is on <a href="https://lorenzobrada.gumroad.com/l/cuda_mastery">Gumroad</a>. The price is $89. If you have been following <strong>The Software Frontier</strong>, you already know whether this is for you. The rest of this post is for everyone who is on the fence.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Why we wrote this</h2><p>There is a strange gap in <strong>CUDA literature.</strong></p><p>On one side, you have the official <strong>NVIDIA programming guide</strong>: dense, accurate, and written for people who already know what they are looking for. </p><p>On the other side, you have an ocean of blog posts and YouTube tutorials that stop at vector addition and matrix multiplication, repeating the <strong>same surface level </strong>explanations of threads, blocks, and grids.</p><p>What <strong>sits in the middle</strong>, the part that actually matters when you are writing production code or debugging a kernel that runs at 30 percent of peak, is mostly missing. </p><p>Or rather, it exists, but it is scattered across <strong>NVIDIA whitepapers</strong>, GTC talks from 2018, <strong>PTX ISA</strong> documentation, decompiled SASS dumps, the <strong>Hopper</strong> and <strong>Blackwell Tuning Guides</strong>, the <strong>Microbenchmarking Hopper</strong> and <strong>Microbenchmarking Blackwell</strong> arXiv papers, the CUTLASS source, and Stack Overflow threads from people who clearly know more than they are saying.</p><p>We have been reading and writing about this gap for months on the newsletter. The articles on the <strong>A100 memory hierarchy</strong>, on <strong>cp.async</strong> semantics, on <strong>scoreboard mechanics</strong>, on the <strong>submission pipeline</strong>, all of them came from the same frustration. Every time we wanted to explain something properly, we had to do the archaeology ourselves.</p><p>So we decided to <strong>do the archaeology once</strong>, in a single document, and structure it the way we wish someone had structured it for us when we started.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/we-built-the-cuda-guide-i-wish-i?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/we-built-the-cuda-guide-i-wish-i?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h2>What is in the guide</h2><p><strong>Twenty-seven chapters</strong> across eleven parts, plus five appendices. Four chapters were rewritten end-to-end at handbook depth. Those are the <strong>PREMIUM</strong> chapters: the SM, the memory system, tensor cores, and the SGEMM walkthrough. The rest of the structure looks like this.</p><p><strong>Foundations.</strong> The GPU as a throughput machine, the <strong>CUDA programming model, </strong>and the memory hierarchy at a glance. This is the vocabulary layer. A senior engineer can skim it in an afternoon; a new graduate can use it as their entry point and grow into the rest of the book.</p><p><strong>The Streaming Multiprocessor in mechanical detail.</strong> The SM is the unit of concurrency, the unit of resource accounting, and the unit at which every meaningful CUDA performance argument must eventually be made. </p><p>We walk through the <strong>four near-independent partitions</strong>, the <strong>operand collector</strong> and its bank conflicts, the <strong>short</strong> and <strong>long scoreboards</strong>, the quantitative arithmetic of latency hiding via Little&#8217;s law, the full Nsight Compute <strong>stall taxonomy</strong>, and the structural deltas across Volta, Turing, Ampere, Ada, Hopper, and Blackwell. </p><p>The chapter ends with an end-to-end walkthrough of a single warp executing a <code>wgmma.mma_async</code> on a Hopper SM, stage by stage.</p><p><strong>The memory system mechanically.</strong> The 32-byte sector model. The <strong>L1TEX path</strong> and every cache modifier you can attach to a global load. The L2 partitioning on H100 and the <strong>access policy window</strong>. <strong>HBM3 in three numbers</strong> and why the practical roofline is 70 to 85 percent of the headline. </p><p>Shared memory banks, <strong>swizzle modes</strong>, and the descriptor-encoded layout that <strong>WGMMA</strong> actually expects. <strong>cp.async</strong> mechanics on Ampere. <strong>TMA</strong> on Hopper and Blackwell, including descriptors, transaction barriers, phase parity, and <strong>cluster multicast</strong>. The mbarrier family and how warp-specialized GEMM mainloops use it.</p><p><strong>Synchronization and concurrency.</strong> The CUDA memory model with its scopes and orderings. <strong>Cooperative Groups</strong> including <strong>cluster.sync</strong> on Hopper and beyond. <strong>Streams</strong>, events, and <strong>CUDA Graphs</strong> for launch-overhead amortization in inference and physics workloads.</p><p><strong>Tensor cores mechanically.</strong> The hardware origin of the unit, the generation-by-generation shape and precision progression, the per-lane fragment ownership for <code>mma.sync</code>, the bit-level layout of the <strong>WGMMA matrix descriptor</strong>, and the structural transition to <strong>UMMA</strong> with the accumulator living in <strong>Tensor Memory</strong>. </p><p>A full section on the new numerical formats: <strong>FP6</strong>, <strong>FP4</strong>, and the <strong>MX</strong> wrapper that makes FP4 inference near-lossless on trained transformer weights.</p><p><strong>Modern hardware.</strong> A Hopper deep dive on <code>sm_90</code> / <code>sm_90a</code>. A Blackwell deep dive on <code>sm_100</code> / <code>sm_100a</code> / <code>sm_120</code>. A chapter on <strong>Blackwell Ultra</strong> (B300, compute capability 10.3) and the trajectory toward Rubin.</p><p><strong>Performance engineering.</strong> The roofline model in practice, with the <strong>second roofline</strong> for shared-memory bandwidth on tile-based kernels. Profiling with <strong>Nsight Systems</strong> and <strong>Nsight Compute</strong>, including the four-section workflow and the new tile-kernel statistics added in CUDA 13.1. Numerics and reproducibility, including the <strong>TF32 trap</strong> that silently downgrades FP32 GEMMs.</p><p><strong>Multi-GPU and distributed.</strong> <strong>NVLink 5</strong> and the NVL72 domain. <strong>SHARP v4</strong> in-network reductions. <strong>NCCL</strong> internals across Ring, Tree, NVLS, and PAT. <strong>NVSHMEM</strong> and PGAS for sparse all-to-all in MoE training.</p><p><strong>Libraries and toolchain.</strong> cuBLAS, cuBLASLt epilogue fusion, cuDNN, cuFFT, cuSPARSE. <strong>CUTLASS 4</strong> and <strong>CuTe</strong> for hand-written tensor-core mainloops. <strong>CCCL</strong> (Thrust + CUB + libcu++). A full chapter on <strong>CUDA Tile</strong> and <strong>cuTile Python</strong>, the largest single addition to the CUDA programming model since cooperative groups. A chapter on <code>nvcc</code>, <strong>PTX</strong>, <strong>SASS</strong>, the fatbinary, and inline PTX as an escape hatch.</p><p><strong>Capstone kernels.</strong> The <strong>SGEMM walkthrough from v1 to v6, with numbers</strong>. Most treatments stop at register tiling and gesture vaguely at &#8220;<em>tensor cores make it faster.</em>&#8221; </p><p>Ours follows the bottleneck through six versions on a 4096&#179; FP32 problem on H100 SXM5, names the architectural feature that breaks each ceiling, and gives the analytical bound. v1 reaches 0.2 percent of peak. v6, on Blackwell with <strong>UMMA + TMEM at FP8</strong>, reaches 88 to 95 percent of peak. </p><p>The chapter exists to teach what every transition costs and what it buys. <strong>Reductions and scans</strong> with single-pass decoupled lookback. <strong>Flash Attention 2, 3, and 4 / 5</strong> including the online softmax derivation and the WGMMA / UMMA mainloop. <strong>Sort, hash, and graph primitives</strong> built on CUB.</p><p><strong>Appendices.</strong> Compute capability quick reference. Architecture spec sheet from A100 through B300 with verified numbers from each part&#8217;s datasheet. PTX quick reference. Glossary. And a full bibliography of the primary sources every claim in the book was checked against.</p><p>Every claim in the guide has been fact checked against primary sources. Where we had to infer something from<strong> SASS </strong>or from the behavior of the hardware rather than from a published spec, we say so explicitly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What was truly missing </h2><p>Maxwell, Pascal, and Volta offline-compilation material was retired, in line with <strong>CUDA 13.0</strong> dropping pre-Turing offline compilation in August 2025. The tensor-core chapter was rewritten around <strong>UMMA</strong>, which supersedes Hopper&#8217;s <code>wgmma.mma_async</code>. </p><p>New material on <strong>CUDA Tile</strong> and <strong>cuTile Python</strong>, both introduced in CUDA 13.1 in December 2025 and extended in 13.2. New material on <strong>Tensor Memory</strong>. </p><p>The four PREMIUM chapters are new from the ground up. Numbers verified against NVIDIA&#8217;s Hopper, Blackwell, and Blackwell Ultra public datasheets at print time.</p><div><hr></div><h2>Who this is for</h2><p>If you are writing CUDA professionally, in <strong>HPC</strong>, in <strong>ML systems</strong>, in <strong>inference engines</strong>, or in any context where kernel performance is part of your job, this guide is calibrated for you.</p><p>If you are a <strong>senior engineer </strong>transitioning into GPU work and you want one document that takes you from competent to dangerous without 200 hours of fragmented reading, this is the document.</p><p>If you are deep into the <strong>PTX</strong> weeds already, writing your own warp-specialized <strong>WGMMA</strong> mainloops and tuning <strong>CuTe</strong> layouts, you probably know a lot of what is in here. </p><p>You will still find the <strong>SM </strong>and memory chapters useful as a reference, and the SGEMM walkthrough is one of the few places where the v5-to-v6 transition is laid out in full. But we would not pretend to teach you something you do not already know.</p><p>If you are completely new to CUDA, with no parallel programming background, this is not the right starting point. </p><p>The guide assumes <strong>you can read C++ </strong>and that you have at least written a few kernels before. We would not want you to spend $89 and feel lost on chapter four.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Why $89</h2><p>Because the alternative is reading what we read, in the order we read it, over the same number of months.</p><p>We are not pricing this against tutorials. We are pricing it against the time of an engineer who bills somewhere between $80 and $200 an hour and needs to be productive on Hopper and Blackwell GPU code by next quarter. </p><p>If the guide saves you a single afternoon of debugging a kernel that turns out to be limited by <strong>operand collector bank conflicts</strong> that no public documentation describes, it has paid for itself.</p><p>There is no DRM, no expiration, no upsell. You <strong>buy the PDF, you own it</strong>. As future architectures change material details, we will publish updates to buyers at no additional cost. </p><p>The next edition is already scheduled to cover <strong>Rubin</strong> when its public specifications stabilize.</p><div><hr></div><h2>What happens next</h2><p>The newsletter continues. The <strong>Mastering CUDA</strong> series is not over, and there are several articles already in draft on topics that did not fit cleanly into the guide.</p><p>If you buy the guide and you have feedback, send it. We read every email. The first revision is going out <strong>within thirty days</strong> based on what readers tell us, and the people who bought early get it first.</p><p><strong>You can find the guide here:</strong> <a href="https://lorenzobrada.gumroad.com/l/cuda_mastery">CUDA Mastery</a></p><p>Thank you for reading. Thank you for being here while this was being built. The next article goes out as scheduled.</p><p><em>Lorenzo and Lorenzo</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Software Frontier! </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Mastering CUDA and High-Performance Computing, Part X]]></title><description><![CDATA[A Deep Dive from Compiler Internals to High-Performance Parallel Computing]]></description><link>https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-be0</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-be0</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Fri, 24 Apr 2026 13:58:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mhE7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mhE7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mhE7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!mhE7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!mhE7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!mhE7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mhE7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png" width="1402" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2668910,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/193447084?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mhE7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!mhE7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!mhE7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!mhE7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72ed33f8-2ce3-4cb2-907c-b4bb64edba93_1402x1122.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Where Part IX Left Us</h2><p><strong>Part IX</strong> ended with a provocation dressed as a summary. Training, we said, is a one-time cost. Inference is the workload that runs forever.</p><p>That sentence deserves to be interrogated before we accept it as a frame, because it contains a <strong>hidden asymmetry </strong>that shapes everything that follows. </p><p>Training a <strong>frontier model</strong> is an event: it happens once, or perhaps a handful of times with different hyperparameters, and then it stops. The cost is large and bounded. </p><p><strong>Inference </strong>is a process: it happens billions of times per day, across hardware that may or may not resemble the training cluster, under latency constraints that the training job never had to respect, serving users who have no patience for pipeline bubbles and <strong>no interest in MFU</strong>.</p><p>The engineering discipline of <strong>inference optimization</strong> is therefore a different subject from the engineering discipline of training optimization, not merely a scaled-down version of it. <em>The bottlenecks are different in kind. The metrics are different. The vocabulary is different. The hardware choices are sometimes deliberately different.</em></p><p>But the physics is the same, because physics does not have a training mode and an inference mode. <strong>Compute and memory bandwidth </strong>are always the two resources, and every optimization in this space is, at root, a claim about which of the two you are spending and whether you are spending it wisely.</p><p>What we will do in this part is work through the inference problem with the same level of precision we brought to the training problem. </p><p>We will derive the arithmetic of autoregressive decoding from first principles, establish exactly why the <strong>decode phase</strong> of transformer inference is memory-bandwidth-bound by construction, explain what that means for hardware selection and <strong>batching strategy</strong>, and then examine the tools that practitioners have developed to recover the compute utilization that the memory-bound regime takes away.</p><p>We will <strong>go into detail </strong>that most treatments of this subject avoid, because the details are where the engineering actually lives.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The two phases of transformer inference </h2><p><strong>Transformer inference</strong> for a generative model consists of <strong>two distinct phases</strong> that are so different in their computational character that they might as well be different workloads running on different hardware.</p><p>The prefill phase processes the input prompt. Given a prompt of <strong>length S tokens</strong>, the model performs a forward pass over all S tokens simultaneously. </p><p>This is a dense <strong>matrix multiply</strong> of shape [S, d_model] against the weight matrices, which is computationally equivalent to a training forward pass on a batch of <strong>S examples</strong>, with the important difference that no gradient computation happens. </p><p>The arithmetic intensity of prefill is high: the <strong>GEMM is large,</strong> the compute-to-memory ratio is favorable, and for sufficiently long prompts, prefill saturates tensor core utilization. Prefill is compute-bound.</p><p>The decode phase generates the output, one token at a time. At each step, the model processes a single new token and uses the <strong>key-value (KV) cache</strong>, which stores the key and value projections for all previously seen tokens, to compute attention over the full context without recomputing those projections. </p><p>The new token produces one row of the <strong>Q matrix</strong>, one row of the <strong>K matrix</strong> (<em>appended to the KV cache</em>), one row of the V matrix (also appended), and one output token.</p><p>The matrix multiply that dominates decode is therefore a <strong>matrix-vector product:</strong> a single vector of shape [1, d_model] multiplied against weight matrices of shape [d_model, d_model]. </p><p>For an H100 at 494 TFLOP/s peak BF16, and a weight matrix that requires 2 &#215; d_model&#178; bytes to read from <strong>HBM</strong> (one load), the arithmetic intensity of this operation is:</p><p><em>flops = 2 &#215; d_model&#178; bytes = 2 &#215; d_model&#178; arithmetic intensity = 1 FLOP/byte</em></p><p>The H100&#8217;s ridge point, the arithmetic intensity at which the machine transitions from memory-bandwidth-bound to compute-bound, is approximately <strong>494 TFLOP/s </strong>divided by 3.35 TB/s HBM3 bandwidth, which equals roughly 147 FLOP/byte.</p><p>Single-token decode has an arithmetic intensity of <strong>1 FLOP/byte. </strong>The ridge point is at 147 FLOP/byte.</p><p>The gap is not a small inefficiency to be engineered away. It is two orders of magnitude. It is structural. </p><p>A matrix-vector product with batch size 1 will always be memory-bandwidth-bound on any hardware where compute throughput scales faster than <strong>memory bandwidth</strong>, which is every piece of hardware available today and likely every piece available for the next several years. </p><p>The H100&#8217;s tensor cores sit at<strong> 99.3% utilization</strong> waiting for data that cannot arrive fast enough. This is the inference problem, stated precisely.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What the arithmetic intensity gap actually costs</h2><p>Before we can appreciate why batching is not a simple fix, we need to quantify what the gap costs in concrete terms.</p><p>Consider the weight matrices of a <strong>70B parameter model. </strong>They occupy 140 GB in BF16. To generate a single output token, the decode phase must read essentially all of the weight matrices from HBM: every attention projection, every MLP layer, every embedding lookup. </p><p>(The KV cache is also read, but its size is proportional to context length and sequence position, not model size.) At the H100&#8217;s<strong> HBM3 bandwidth</strong> of 3.35 TB/s, reading 140 GB takes approximately 42 milliseconds.</p><p>In 42 milliseconds, a single token is produced. That is approximately 24 tokens per second per H100 for a 70B model at batch size 1.</p><p>Now read that sentence again: <strong>24 tokens per second per H100</strong>, a machine that costs tens of thousands of dollars and can perform 494 trillion floating-point operations per second, is producing tokens at roughly the rate that a person reads them.</p><p>The <strong>494 TFLOP/s</strong> are not being used. The H100 is acting as a very expensive, very fast HBM3 reader. The silicon that took years to design and billions of dollars to fabricate is waiting for data.</p><p>This is the central pathology of autoregressive decode, and it motivates every technique we will discuss in this part.</p><h3>Batching as arithmetic intensity recovery</h3><p>The solution that every inference practitioner reaches for first is batching: if you run decode for multiple requests simultaneously, the<strong> weight reads</strong> are shared across the batch, and the arithmetic intensity increases proportionally.</p><p>The arithmetic is clean. For a batch of B requests, the matrix multiply in decode is no longer a matrix-vector product but a <strong>matrix-matrix product</strong>: [B, d_model] &#215; [d_model, d_model]. </p><p>The flop count scales as B &#215; 2 &#215; d_model&#178;, while the bytes for the weight matrix remain 2 &#215; d_model&#178; (the weights are read once, regardless of batch size). Arithmetic intensity is now<strong> B FLOP/byte.</strong></p><p>To reach the ridge point at 147 FLOP/byte, you need a batch of 147 requests running simultaneously on the same H100. At batch size 147, the tensor cores begin to saturate and further increasing the batch does not change the arithmetic intensity (you are now <strong>compute-bound</strong>, and more requests means more total compute, not more memory reads per unit time).</p><p>The batch size at which you saturate the machine is the target operating point for <em>maximum throughput per GPU</em>. Everything below this point is <strong>wasted hardware.</strong></p><p>But batch size is not free. Each request in the batch has its own KV cache, and the KV cache size is proportional to the sequence length of that request. For a context length of 8192 tokens, a model with 80 layers, 8 KV heads, a head dimension of 128, and BF16 storage, the KV cache size per request is:</p><p><em>8192 &#215; 80 &#215; 2 &#215; 8 &#215; 128 &#215; 2 bytes = 26,843,545,600 bytes &#8776; 25 GB</em></p><p>Twenty-five gigabytes per request, on a GPU with 80 GB of HBM. You can serve at most three concurrent requests at 8192-token context length before <strong>HBM is exhausted </strong>and you cannot increase the batch further.</p><p>The tension is fundamental: to achieve good arithmetic intensity you need large batches, but large batches require large KV caches, and large KV caches consume the memory that large batches require.</p><p>This is the central <strong>resource allocation problem</strong> of transformer inference, and it is more constrained than it appears, because KV cache memory is not static. It grows with sequence length. </p><p>A request that has generated 100 tokens has a small KV cache; the same request after generating 4000 tokens has a KV cache that is<strong> 40&#215; larger. </strong>The memory footprint of the batch changes continuously as generation proceeds.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Continuous batching and the end of static padding</h2><p>The naive approach to batched inference is static batching: collect B requests, pad them all to the same <strong>sequence length,</strong> run them as a batch, return all B results when the longest sequence finishes.</p><p>Static batching is deeply inefficient. Consider a batch of 8 requests where one request will generate <strong>2000 tokens </strong>and the others will generate 20 tokens each. </p><p>After the short requests finish at step 20, 7 of the 8 slots in the batch are empty, but the batch continues until step <strong>2000 to service</strong> the one long request. The GPU is running at 1/8 occupancy for 99% of the wallclock time.</p><p>Continuous batching (also called iteration-level batching or in-flight batching), implemented in systems like vLLM, <strong>Orca</strong>, and TensorRT-LLM, solves this by removing the assumption that all requests in a batch start and finish together. </p><p>Instead, the batch is managed at the<strong> per-decoding-step level</strong>: at each step, the set of active requests is the set of requests that have not yet finished and for which memory is available.</p><p>When a request completes (<em>generates a stop token or reaches the maximum length</em>), its slot in the batch is <strong>immediately freed</strong>. A new waiting request is inserted into the freed slot and begins generating from its first decode step. There is no waiting for the batch to drain. The batch is always as full as memory permits.</p><p>The implementation requires that the <strong>CUDA kernels </strong>for attention and the MLP can handle variable-length sequences within a single kernel invocation, which is non-trivial because standard <strong>GEMM implementations</strong> assume a fixed batch dimension. </p><p>Paged attention (discussed shortly) is the memory management technique that makes this practical; the <strong>PagedAttention</strong> kernel from vLLM and the FlashAttention variants for variable-length sequences are the implementations that make it fast.</p><p>Continuous batching does not increase the maximum batch size (<em>which is still limited by KV cache memory</em>). What it does is ensure that the batch is always at or near the maximum size, eliminating the idling that static batching induces. </p><p>A system running continuous batching with <strong>maximum batch size 64 </strong>will achieve dramatically higher throughput than a system running static batching with the same maximum batch size, because the latter is almost never actually running 64 requests simultaneously.</p><h3>PagedAttention and the memory management revolution</h3><p>The KV cache memory problem has an analogy so precise it deserves to be stated explicitly: the KV cache is to inference systems what<strong> physical memory</strong> is to operating systems.</p><p>In an <strong>operating system</strong>, multiple processes compete for a fixed physical memory. Processes do not know their memory needs in advance (a process may allocate more memory as it runs). </p><p>Memory fragmentation is a<strong> real cost</strong>: even if the total free memory is sufficient, if it is not contiguous, an allocation may fail. </p><p>The solution that operating systems developed is<strong> virtual memory </strong>with paging: memory is divided into fixed-size pages, processes address a virtual space that the OS maps to physical pages on demand, and fragmentation is eliminated because non-contiguous physical pages can be mapped to a contiguous virtual space.</p><p><strong>PagedAttention</strong>, introduced by <strong>Kwon et al.</strong> (2023) and implemented in vLLM, applies exactly this insight to KV cache management.</p><p>In a <strong>naive KV cache</strong> implementation, each request&#8217;s KV cache is a contiguous block of GPU memory allocated at request arrival. The maximum context length is reserved at allocation time (because the request might generate that many tokens), even if the actual generation is much shorter. </p><p><strong>Fragmentation is severe</strong>: the gap between reserved and used memory across all requests is wasted, and new requests cannot use it.</p><p>PagedAttention divides the <strong>KV cache</strong> into fixed-size physical blocks (pages), where each block stores the keys and values for a fixed number of tokens (the block size, typically 16 or 32 tokens). When a request needs more KV cache space, it is allocated additional pages from a free pool. </p><p>Pages for a single request need not be contiguous in physical GPU memory; the PagedAttention kernel uses a <strong>block table</strong> (a small integer array per request mapping logical page indices to physical page indices) to find the right physical memory at attention computation time.</p><p>The consequences are significant. First, fragmentation falls from potentially 50% (if requests <strong>reserve maximum-length</strong> buffers but generate much shorter sequences) to under 5% (only the last partially-filled page of each sequence wastes space). </p><p>Second, sequences can share physical pages: if two requests have identical prompt prefixes (<em>common in chat applications with a fixed system prompt</em>), the KV cache pages for the shared prefix can be <strong>physically shared </strong>between them, eliminating redundant computation and halving the memory footprint of the prefix. </p><p>Third, <strong>memory allocation is lazy</strong>: pages are allocated only as tokens are generated, not at request arrival, which means a request does not consume its full potential KV cache until it actually generates enough tokens to need it.</p><p>The prefix sharing (<em>also called KV cache sharing or prompt caching</em>) deserves additional attention because its impact at scale is large. Consider a chat application where every request is prefixed with a <strong>2000-token system prompt.</strong> </p><p>Without prefix sharing, each request independently computes and stores the KV cache for those 2000 tokens. With prefix sharing, the<strong> 2000-token prefix</strong> KV cache is computed once and shared across all concurrent requests. </p><p>For a batch of 64 requests, this eliminates 63 redundant prefill computations and reduces KV cache memory by<strong> 2000 &#215; 64 tokens </strong>worth of activations, freeing space for a larger batch.</p><h3>Speculative decoding and the bandwidth wall</h3><p>Continuous batching with PagedAttention brings the inference system to the state of efficiently using available hardware at the maximum batch size the KV cache permits. </p><p>But we have still not escaped the fundamental constraint: at maximum batch size, the system is compute-bound, but <strong>getting to maximum batch size </strong>requires enough concurrent requests, which requires enough users, which is not always the case in low-traffic scenarios. At<strong> low batch sizes</strong>, we are still memory-bandwidth-bound, still producing tokens at the same rate that memory bandwidth permits.</p><p>Speculative decoding attacks this from a different angle. The observation is this: for a memory-bandwidth-bound system, the cost of generating one token and the cost of generating <strong>K tokens simultaneously</strong> in a single forward pass are approximately equal, because the bottleneck is reading the weight matrices from memory, and reading them once versus K times is the same operation if the K proposals can be evaluated in a single forward pass.</p><p>The mechanism: a <strong>small draft model</strong> (or a non-autoregressive heuristic, or a retrieval system) proposes a sequence of K candidate continuation tokens in a single forward pass. </p><p>The large target model then verifies this proposal in a single forward pass over the K <strong>tokens simultaneously</strong>. If the target model accepts all K tokens, K tokens have been generated at the cost of one large model forward pass plus one small model forward pass. </p><p>If the target model rejects some tokens, the generation rewinds to the first rejection and continues from there, having wasted some <strong>small model computation</strong> but no large model computation beyond what was necessary.</p><p>The analysis of when speculative decoding accelerates inference requires understanding the <strong>acceptance rate</strong>, which is the fraction of proposed tokens that the target model accepts. </p><p>For a good draft model generating from a similar distribution, acceptance rates of 70-90% are achievable. With an acceptance rate of &#945; and a <strong>proposal length of K</strong>, the expected number of tokens accepted per large model forward pass is:</p><p><em>E[accepted] = sum_{k=0}^{K} (k+1) &#215; &#945;&#7503; &#215; (1 &#8722; &#945;) + (K+1) &#215; &#945;&#7479;</em></p><p>For &#945; = 0.8 and K = 4: E[accepted] &#8776; 3.3 tokens per large model forward pass, compared to 1 token per forward pass without speculation. <strong>Speedup</strong> is approximately 3.3&#215;, reduced by the overhead of the draft model, typically 0.2-0.3 of a large model forward pass for a draft model that is 10-15&#215; smaller.</p><p>Net speedup: approximately 3.3 / 1.2 &#8776; 2.7&#215;. This is not free, but it is substantial, and it is available even at batch size 1.</p><p>The reason speculative decoding works, and why it does not violate the <strong>memory-bandwidth</strong> constraint, is subtle. The verification pass is a prefill operation over K+1 tokens, which has higher arithmetic intensity than single-token decode. </p><p>For K=4, the verification pass processes 5 tokens simultaneously, which is 5&#215; the arithmetic intensity of single-token decode. It is still <strong>memory-bandwidth-bound </strong>for small K, but the per-accepted-token cost of the memory reads is reduced because multiple tokens share the weight reads.</p><p>The<strong> deeper insight </strong>is that speculative decoding converts memory-bandwidth-bound decode operations into a mixture of memory-bandwidth-bound draft decode and slightly-less-memory-bandwidth-bound verification, and the mixture achieves <strong>better tokens-per-second </strong>because the draft model is smaller and therefore faster per forward pass.</p><p>The pathological case is when the draft model produces tokens that the target model almost never accepts, in which case the overhead of<strong> draft generation </strong>and failed verification exceeds the benefit. </p><p>Acceptance rates below approximately 0.5 make speculative decoding harmful, not helpful. This is why the choice of<strong> draft model matters</strong>: it should be distilled from or aligned with the target model, not simply chosen to be the fastest available.</p><p><strong>Self-speculative decoding</strong>, where the model speculates with its own early layers (exiting at an intermediate layer for draft generation and running the full forward pass for verification) eliminates the draft model requirement at the cost of some architectural complexity. </p><p>Medusa, a <strong>multi-head speculative decoding method </strong>that adds dedicated draft heads to the target model, is a variant that achieves similar benefits with a different implementation strategy.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>KV cache quantization and the memory tradeoff</h2><p>Even with PagedAttention and prefix sharing, the KV cache is often the binding constraint on batch size for <strong>long-context models</strong>. A 70B model with a 128K context length and a batch of 8 requests generates a KV cache of:</p><p><em>128,000 &#215; 80 &#215; 2 &#215; 8 &#215; 128 &#215; 2 bytes &#215; 8 requests = 3.3 TB</em></p><p>Three terabytes for 8 requests. No <strong>H100 cluster</strong> of reasonable size holds this in HBM. The only responses are to reduce context length (not always possible), reduce batch size (<em>reduces throughput</em>), or reduce the precision of KV cache values.</p><p>KV cache quantization stores keys and values in INT8 or FP8 rather than BF16, halving the memory requirement at the cost of <strong>approximation error</strong>. The question is whether that approximation error materially affects output quality.</p><p>The answer, empirically, is that keys and values are more quantization-sensitive than weights, because the attention<strong> score computation</strong> amplifies outliers in the key matrix, and those outliers are common and important. </p><p><strong>Naive INT8 quantization</strong> of the KV cache causes measurable quality degradation on tasks requiring precise retrieval over long contexts. The degradation is smaller for short contexts where fewer keys compete for attention.</p><p>Techniques that address this include<strong> grouped-query attention</strong> (GQA), which reduces the number of KV heads (and therefore the KV cache size) without proportionally reducing the expressivity of attention by sharing keys and values across groups of query heads; and <strong>mixed-precision</strong> KV caching, which stores frequently-accessed (recent) tokens in higher precision and distant-context tokens in lower precision, exploiting the empirical observation that attention weights are concentrated on nearby and highly salient tokens.</p><p><strong>GQA</strong> deserves detailed treatment because it has become standard in essentially all modern large language models: Llama 3, Mistral, Gemma, Qwen, and their successors all use it. </p><p>The mechanism is to reduce the number of KV heads from H to H/G for a group size of G, where typically G = 8. Each KV head is shared by G query heads during attention computation. The<strong> KV cache</strong> size shrinks by a factor of G, and with G=8 on a 128-head attention, the cache is 8&#215; smaller. </p><p>The expressivity cost is small for typical values of G because attention heads tend to specialize into redundant groups anyway: the <strong>empirical evidence</strong> across many model evaluations suggests that the quality loss from GQA at G=8 is negligible relative to the memory benefit.</p><h3>The prefill-decode disaggregation architecture</h3><p>We have established that prefill is <strong>compute-bound</strong> and decode is <strong>memory-bandwidth-bound.</strong> The hardware that is optimal for one is different from the hardware that is optimal for the other.</p><p>High-compute GPUs (H100, B200) with large HBM capacity are appropriate for both prefill and decode, but they are expensive. For decode in particular, the binding resource is memory bandwidth, <strong>not compute throughput. </strong>A GPU with lower compute throughput but the same memory bandwidth would serve the decode phase equally well at lower cost.</p><p>This observation motivates <strong>prefill-decode disaggregation</strong>: running prefill and decode on separate hardware pools, each sized for its actual bottleneck.</p><p>The architecture is approximately as follows: a request arrives at a scheduler, which assigns it to a <strong>prefill worker. </strong>The prefill worker (<em>a high-compute GPU</em>) processes the prompt and produces the initial KV cache. </p><p>That KV cache is then transferred to a decode worker (<em>which may be a different, possibly cheaper GPU</em>). The <strong>decode worker</strong> generates tokens autoregressively, managing the KV cache in its memory, and streams tokens back to the user.</p><p>The KV cache transfer itself is non-trivial: for a long prompt on a large model, the KV cache may be tens of gigabytes, and transferring it across a network link between <strong>prefill and decode workers</strong> takes time proportional to size. The transfer must complete before the first decode token can be generated, which adds latency to the <em>time-to-first-token (</em>TTFT) metric.</p><p>For applications where throughput matters more than latency, this tradeoff is acceptable: the <strong>disaggregated system </strong>produces more tokens per dollar per second because each hardware type is used for the phase it is efficient at. </p><p>For applications where <strong>TTFT is critical </strong>(real-time conversational AI), the added transfer latency may be unacceptable.</p><p>The engineering tension here is real, and production systems navigate it differently depending on workload: <strong>Splitwise </strong>(from Microsoft Research), <strong>DistServe </strong>(from Peking University and others), and production implementations at major AI serving providers all make different tradeoffs along the latency-throughput frontier.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Flash decoding and the attention bottleneck</h2><p>We have spent considerable time discussing the weight matrix reads as the memory bottleneck for decode, but for<strong> long-context inference</strong>, a second bottleneck emerges: the KV cache reads during attention computation.</p><p>The attention operation during decode requires computing, for the new token&#8217;s query vector q of shape [d_head], an attention score against every key in the KV cache of shape [context_length, d_head], and then a <strong>weighted sum</strong> of every value in the KV cache of shape [context_length, d_head]. </p><p>The KV cache for a single layer, a <strong>single head</strong>, at context length L is 2 &#215; L &#215; d_head &#215; 2 bytes (keys and values, BF16). For L = 128,000, d_head = 128, this is 64 MB per head per layer per request.</p><p>For a model with 80 layers and 8 KV heads, the total KV cache read per decode step is <em>64 MB &#215; 80 &#215; 8 = 40,960 MB &#8776; 40 GB.</em></p><p>At <em>3.35 TB/s HBM3 bandwidth,</em> reading 40 GB takes approximately 12 milliseconds per decode step. The weight matrix reads (140 GB at 3.35 TB/s) take approximately 42 milliseconds. At 128K<strong> context length,</strong> KV cache reads are therefore about 22% of the per-step memory read time, a non-trivial contribution.</p><p>At context lengths beyond 128K (1M tokens is now a research target), KV cache reads can dominate weight reads entirely. The bottleneck for<strong> very-long-context</strong> inference is not the model weights but the growing KV cache.</p><p>Flash Decoding, introduced by Dao et al. and integrated into FlashAttention-3, addresses this by parallelizing the KV cache reads across multiple warps in a different pattern from standard <strong>FlashAttention</strong>. </p><p>In standard FlashAttention, which is designed for prefill <em>(where Q, K, and V all have sequence dimension S)</em>, the parallelism is along the query sequence dimension. </p><p>In <strong>Flash Decoding</strong>, where the query has sequence dimension 1 but the KV cache has sequence dimension L, the parallelism instead decomposes along the key/value sequence dimension, allowing multiple warps to read different segments of the KV cache simultaneously and combine their partial softmax results using a numerically stable reduction.</p><p>The speedup from Flash Decoding is most pronounced when the KV cache length is large and the batch size is small, precisely the regime of <strong>long-context single-request inference </strong>where standard attention is most bottlenecked. </p><p>For L = 64K and batch size 1, Flash Decoding achieves <strong>4-8&#215; speedup</strong> over a naive attention implementation, which translates directly to 4-8&#215; faster decode throughput for long-context requests.</p><h3>The production inference stack</h3><p>The mechanisms discussed above do not exist in isolation; they compose into a production inference serving system. </p><p>It is worth describing what that stack looks like<strong> end-to-end</strong>, because the interactions between components create optimization opportunities that are invisible when examining each component individually.</p><p>A production inference server for a 70B model on an 8-GPU node, circa mid-2026, runs approximately as follows.<strong>Tensor parallelism</strong> at degree 8 distributes the weight matrices across all 8 GPUs in the node, using NVLink for the all-reduce at each layer boundary. </p><p>The effective model per GPU is 70B / 8 = 8.75B parameters, requiring approximately 17.5 GB of HBM for weights in BF16. With 80 GB per GPU, this leaves 62.5 GB per GPU for KV cache.</p><p>The<strong> KV cache</strong> is managed by PagedAttention with a block size of 16 tokens. The pool of free blocks is divided among the 8 GPUs (with TP, the KV cache is also sharded, since each GPU handles a subset of the KV heads under GQA). </p><p>For a model with 8 total KV heads under 8-way TP, each GPU handles exactly 1 KV head, and the <strong>per-GPU KV cache </strong>is accordingly 1/8 of the total.</p><p>The scheduler runs continuous batching, maintaining a queue of waiting requests and a set of active requests. At each step, it admits new requests into the batch as KV cache pages become available. It <strong>preempts requests</strong> (<em>evicts their KV cache pages, returning them to the free pool</em>) when memory pressure is high, re-scheduling preempted requests from the beginning (or from a checkpoint) later.</p><p>Speculative decoding is enabled with a draft model of approximately 7B parameters, contributing an additional 14 GB of weight memory across the 8 GPUs (1.75 GB per GPU) and an additional <strong>14 GB KV cache</strong> (1.75 GB per GPU), net of which there remains approximately 60 GB per GPU for the target model KV cache.</p><p>The prefill of long prompts is chunked (<em>also called chunked prefill</em>): instead of processing a 64K-token prompt as a single prefill operation that saturates compute for a long time and <strong>blocks decode requests </strong>from running, the prompt is processed in chunks of, say, 2048 tokens per step, interleaved with decode steps. </p><p>This trades slightly <strong>higher TTFT</strong> for dramatically better decode latency for concurrent users, a tradeoff that is almost always correct in a multi-user serving scenario.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What the series has built</h2><p>Ten parts. From <strong>SMs to NVSwitch</strong>. From warp scheduling to speculative decoding. From single-GPU kernels to multi-node inference stacks.</p><p>Across all of it, one idea stays invariant: a GPU is not a &#8220;<em>compute machine</em>&#8221; in the naive sense. It is a latency-hiding system. Every layer of the stack exists to keep data moving while something else is waiting; <strong>warps hiding memory latency</strong>, NVLink hiding interconnect latency, batching hiding kernel inefficiency, and scheduling hiding autoregressive seriality.</p><p>At scale, the same structure repeats. Training systems hide communication under compute. <strong>Inference systems</strong> hide serial generation under parallel requests. Serving stacks hide memory fragmentation under virtualized allocation. </p><p>The details change, but the pattern does not: identify the bottleneck, then restructure the system so that bottleneck is <strong>no longer visible </strong>to the critical path.</p><p>What emerges is not a collection of optimizations, but a consistent way of thinking about hardware systems. Everything reduces to one question: </p><p><em>what resource is constraining progress right now (compute, memory bandwidth, or communication) and how do we prevent it from sitting idle?</em></p><p>The specific techniques will evolve. NVLink will be replaced, attention kernels will be rewritten, <strong>new quantization schemes</strong> will appear, and hardware will continue to shift the ridge points we computed throughout this series. </p><p>But the underlying structure will not change, because it is not a property of transformers: it is a <strong>property of physics.</strong></p><p>That is the real object we have been studying. Not GPUs. Not transformers. But the constraints that govern<em> how any system can compute</em> under finite bandwidth and finite time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-be0?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-be0?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Mastering CUDA and High-Performance Computing, Part IX ]]></title><description><![CDATA[Where Part VIII Left Us]]></description><link>https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-d2d</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-d2d</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Tue, 21 Apr 2026 09:19:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FyE3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FyE3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FyE3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!FyE3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!FyE3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!FyE3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FyE3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2751137,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/194498965?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FyE3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!FyE3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!FyE3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!FyE3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a37cd0-605f-46ee-bbc8-55b3d119503c_1024x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Where Part VIII Left Us</h2><p><strong>Part VIII</strong> ended at something close to a philosophical statement: the SMSP on a well-tuned Hopper <strong>GEMM kernel </strong>is a machine that does one thing. Everything else has been delegated.</p><p>That is true, and it is beautiful, and it is also irrelevant the moment the model you are trying to train does not fit in 80 GB of <strong>HBM3.</strong></p><p>GPT-3 has <em>175 billion parameters.</em> In BF16 that is 350 GB of weights alone, before you add optimizer state, activations, and <strong>gradients</strong>. A single H100 has 80 GB. You need at least five of them just to hold the parameters, and in practice you need significantly more to make training feasible.</p><p>At this point the<strong> single-GPU roofline model</strong>, with its ridge points, its arithmetic intensity calculations, its tensor core utilization percentages, becomes necessary but not sufficient. </p><p>You need a <strong>new abstraction layer </strong>that sits above the GPU and treats a rack, or a pod, or a datacenter, as the compute substrate.</p><p>This part is about that layer. We will cover <strong>tensor parallelism</strong>, pipeline parallelism, data parallelism, and the collective communication primitives that tie them together. </p><p>We will look at <strong>NCCL</strong>, at <strong>NVLink</strong> topology and how it interacts with bandwidth requirements, and at the specific arithmetic of why certain parallelism strategies work and others do not at scale.</p><p>We will go into great detail. Tighten your seatbelts. </p><div><hr></div><h2>The memory wall has not gone away</h2><p>Before we talk about parallelism strategies, we need to internalize what &#8220;model doesn&#8217;t fit&#8221; actually means, quantitatively.</p><p>A transformer with <em>P</em> parameters trained in mixed precision requires, at minimum:</p><ul><li><p><strong>2P bytes</strong> for the model weights in BF16</p></li><li><p><strong>4P bytes</strong> for the master weights in FP32 (kept by the optimizer for numerical stability)</p></li><li><p><strong>8P bytes</strong> for the Adam optimizer states (m and v vectors, both FP32)</p></li><li><p><strong>2P bytes</strong> for the gradients in BF16</p></li></ul><p>Total: <strong>16P bytes</strong> in the steady state, not counting activations.</p><p>For a 70B parameter model (<em>Llama 3 scale</em>), this is 1,120 GB; fourteen H100s worth of <strong>HBM</strong> just for the optimizer state. This is not a pathological edge case; this is the routine reality of training frontier models.</p><p>Inference is cheaper (you do not need <strong>optimizer state</strong>) but for a 405B parameter model in FP8, you are still looking at 405 GB, spread across at minimum six H100 80GB instances, with <strong>careful attention</strong> to how the tensor operations are partitioned so that no single GPU computes a matrix multiply that requires moving activations larger than the HBM capacity.</p><p>The problem is therefore not just &#8220;<em>how do we make one GPU fast</em>&#8221; but &#8220;<em>how do we decompose a computation that is too large for one GPU into pieces that run efficiently on many GPUs, with the communication overhead between those pieces small enough that the <strong>multi-GPU system </strong>achieves a meaningful fraction of the theoretical sum of its parts.</em>&#8221;</p><p>That fraction has a name: <strong>parallel efficiency</strong>. Getting it above 0.5 for a thousand-GPU training run is hard. Getting it above 0.8 is a research problem. </p><p>Getting it <strong>above 0.9 </strong>is what separates companies that can train frontier models economically from companies that cannot.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Three orthogonal dimensions of parallelism</h2><p>The standard taxonomy, established empirically by the <strong>Megatron-LM work</strong> at NVIDIA and subsequently refined, identifies three orthogonal axes along which a transformer training job can be parallelized.</p><p><strong>Data Parallelism (DP):</strong> Replicate the model across <em>N</em> GPUs, partition the training batch into <em>N</em> micro-batches, run a forward and backward pass independently on each GPU, and then average the gradients across all <em>N</em> replicas. Every GPU holds the full model. The communication pattern is a <strong>single all-reduce </strong>over the gradient tensors after each backward pass.</p><p><strong>Tensor Parallelism (TP):</strong> Partition individual weight matrices across <em>N</em> GPUs, so that each GPU holds a <em>1/N</em> shard of each matrix. A single <strong>matrix multiply</strong> that would require, say, a 4096&#215;16384 GEMM on one GPU instead requires a 4096&#215;(16384/N) GEMM on each of the <em>N</em> GPUs, followed by a collective to reassemble the result. </p><p>The communication pattern is tightly coupled to the forward pass; an all-reduce (or all-gather + reduce-scatter) at every layer boundary.</p><p><strong>Pipeline Parallelism (PP):</strong> Partition the layers of the model across <em>N</em> GPUs, so that GPU 0 holds layers 1&#8211;<em>L/N</em>, GPU 1 holds layers <em>L/N</em>+1 through <em>2L/N</em>, and so on. A micro-batch flows through the pipeline sequentially. </p><p>The communication pattern is a <strong>point-to-point activation </strong>transfer between adjacent stages, one per micro-batch per layer boundary.</p><p>These three dimensions compose. The Megatron-LM paper that trained GPT-3-scale models on<strong> A100 clusters</strong> used all three simultaneously: 8-way TP within a node (exploiting NVSwitch), <strong>4-way PP across nodes</strong>, and data parallelism across node groups. </p><p>The product is the total GPU count: 8 &#215; 4 &#215; D = total GPUs, where D is the data parallel degree.</p><p>Understanding <em>why</em> this particular combination was chosen, and not, say, 64-way TP with no PP, requires understanding the communication topology and the arithmetic of collective operations. </p><p>That is what the rest of this part is about.</p><div><hr></div><h2>NVLink and NVSwitch</h2><p>Communication between GPUs can happen over<strong> two physical fabrics</strong>:<strong> PCIe</strong> and <strong>NVLink</strong>. The performance difference between them is not small.</p><p>PCIe 4.0 x16 provides <strong>32 GB/s unidirectional bandwidth.</strong> PCIe 5.0 x16 doubles that to 64 GB/s. These numbers sound reasonable until you compare them to what you actually need during all-reduce.</p><p>NVLink 4.0 (H100) provides <strong>900 GB/s bidirectional bandwidth</strong> per GPU in NVLink-connected configurations: that is 450 GB/s in each direction. This is roughly 7&#215; better than PCIe 5.0 in each direction, and the real-world benefit is larger because NVLink latency is also significantly lower.</p><p>But &#8220;<em>NVLink-connected</em>&#8221; hides a critical topological detail. NVLink connects pairs of GPUs (or GPUs through an NVSwitch). The <strong>DGX H100 system </strong>has 8 GPUs connected through NVSwitch 3.0, which provides full all-to-all connectivity at 900 GB/s per GPU. </p><p>This means any GPU can communicate with any other GPU in the same node at full bandwidth simultaneously. The NVSwitch acts as a <strong>non-blocking switch </strong>fabric.</p><p>Across nodes, the picture changes entirely. <em>Multi-node communication</em> happens over <strong>InfiniBand </strong>(HDR or NDR), with typical all-reduce bandwidth of 25&#8211;50 GB/s per GPU depending on topology and rail configuration: roughly <strong>10&#8211;20&#215; slower</strong> than intra-node NVLink.</p><p>This 10&#8211;20&#215; bandwidth gap between <strong>intra-node</strong> and <strong>inter-node</strong> communication is the single most important physical fact for understanding why multi-GPU parallelism is structured the way it is.</p><p><strong>The implication is immediate:</strong> communication-heavy parallelism strategies (like tensor parallelism, which requires an all-reduce at every layer) should be confined within a node, where NVLink bandwidth makes the overhead acceptable. </p><p><strong>Communication-light</strong> parallelism strategies (like pipeline parallelism, which only requires activation transfers at layer boundaries) can span node boundaries.</p><p>This is exactly what Megatron-LM does, and the reason is physics, not convention.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Data parallelism in depth</h2><p>Data parallelism is the simplest strategy and the one that scales best in terms of implementation complexity. It is also the one where the <strong>communication overhead </strong>is most amenable to hiding behind computation, given careful engineering.</p><p>The communication requirement for data parallelism is an <strong>all-reduce</strong> over the gradient tensors after each backward pass. For a model with <em>P</em> parameters in BF16, this all-reduce moves 2<em>P</em> bytes of data through the network.</p><p>For a<strong> 70B model</strong>, that is 140 GB per all-reduce. At 25 GB/s inter-node InfiniBand, a naive all-reduce would take approximately <strong>5.6 seconds.</strong> For a training step that takes 2&#8211;3 seconds of compute, this is catastrophically inefficient. The GPU would be idle for twice as long as it was computing.</p><p>The solution is to overlap <strong>gradient communication</strong> with the backward pass computation. As each layer&#8217;s gradients are computed during the backward pass, those gradients can be immediately all-reduced while the <strong>backward pass </strong>continues computing the gradients of earlier layers.</p><p>This is called <strong>gradient overlap</strong>, and it is implemented in PyTorch via the DistributedDataParallel (DDP) bucket mechanism: gradients are grouped into buckets of <strong>approximately 25 MB</strong>, and an all-reduce is launched for each bucket as soon as it fills, overlapping with the backward computation of earlier layers.</p><p>The efficiency of gradient overlap depends on the ratio of compute time to communication time per layer. </p><p>For large models with large batch sizes, this ratio is favorable: the layers are <strong>compute-heavy</strong>, and there is always useful computation happening while the all-reduce for a previous layer&#8217;s gradients is in flight.</p><p>For small models or <strong>small batch sizes</strong>, the backward computation per layer is short and the all-reduce cannot be fully hidden. </p><p>This is one reason why very large batch sizes are computationally efficient beyond the obvious &#8220;<em>more samples per step</em>&#8221; benefit: larger batches mean <strong>longer per-layer compute time</strong>, which means more time to hide communication.</p><h3>ZeRO: when the model doesn&#8217;t fit, but you want data parallelism anyway</h3><p>Vanilla data parallelism replicates the <strong>full model</strong> on every GPU. For a 70B model, this requires every GPU to have 1,120 GB of memory (with optimizer state), which is physically impossible today and will remain so for some time.</p><p><strong>ZeRO</strong> (<em>Zero Redundancy Optimizer</em>), developed by Microsoft <strong>DeepSpeed</strong>, addresses this by partitioning the model state across the data parallel group rather than replicating it.</p><p>ZeRO comes in three stages of increasing memory savings and communication cost:</p><p><strong>ZeRO-1:</strong> Partition the optimizer state (m, v vectors) across the DP group. Each GPU holds a <em><strong>1/N</strong></em><strong> shard of the optimizer state.</strong> Communication overhead is unchanged (gradients are still all-reduced). <em>Memory savings:</em> up to 4&#215; for Adam (8P &#8594; 2P per GPU for optimizer state).</p><p><strong>ZeRO-2:</strong> Partition the gradients in addition to the optimizer state. After the all-reduce, each GPU keeps only its <em><strong>1/N</strong></em><strong> shard of the gradients</strong> (the portion it needs for its optimizer state shard). <em>Memory savings:</em> up to 8&#215; (12P &#8594; 1.5P per GPU for gradients + optimizer state). Communication overhead: unchanged.</p><p><strong>ZeRO-3:</strong> Partition the model parameters as well. Each GPU holds only <em>1/N</em> of the model weights at any given time. During the forward and backward pass, the needed weight shards are all-gathered from the <strong>DP group just-in-time.</strong> Memory savings: up to 64&#215; for a large DP degree. <em>Communication overhead</em>: increases by 1.5&#215; compared to vanilla DDP (due to the all-gather operations for parameters).</p><p>ZeRO-3 with a DP degree of 64 reduces the per-GPU memory for a 70B model from 1,120 GB to approximately 17.5 GB: comfortably fitting on a single H100. The tradeoff is the 1.5&#215; increase in <strong>communication volume</strong>, which must be weighed against the larger batch sizes that ZeRO-3 enables.</p><p>The engineering implementation of ZeRO-3 is <strong>non-trivial: </strong>parameters must be gathered before each layer&#8217;s forward pass and immediately freed afterward (unless <strong>gradient checkpointing</strong> is also active, in which case they must be re-gathered during the backward pass as well). </p><p>The <strong>memory allocator</strong> must be aware of these temporary parameter buffers and free them aggressively.</p><p>DeepSpeed&#8217;s implementation of ZeRO-3 does this with a parameter fetch prefetch buffer: as layer <em>i</em> is executing its forward pass, layer <em>i+1</em>&#8216;s parameters are being<strong> all-gathered in the background</strong>, overlapping communication with computation at the layer level rather than the bucket level.</p><div><hr></div><h2>Tensor parallelism in depth</h2><p>Tensor parallelism (TP), as formalized in the Megatron-LM paper, exploits the specific structure of <strong>transformer layers</strong> to split individual matrix multiplications across multiple GPUs.</p><p>Consider a single transformer <strong>MLP layer </strong>with weight matrices W1 of shape [d_model, d_ffn] and <strong>W2 </strong>of shape [d_ffn, d_model], where d_ffn = 4 &#215; d_model. For a 70B model, d_model &#8776; 8192, so d_ffn &#8776; 32768.</p><p>The output of the MLP layer is: Y = GeLU(XW1)W2</p><p>With 8-way tensor parallelism, <strong>W1 </strong>is split column-wise across 8 GPUs, each holding W1_i of shape [d_model, d_ffn/8]. W2 is split row-wise across 8 GPUs, each holding W2_i of shape [d_ffn/8, d_model].</p><p><strong>The computation on GPU </strong><em><strong>i</strong></em><strong> becomes:</strong></p><ol><li><p><em>Y1_i = X &#215; W1_i (local GEMM, shape [batch, d_ffn/8])</em></p></li><li><p><em>Z_i = GeLU(Y1_i) (local elementwise)</em></p></li><li><p><em>Y2_i = Z_i &#215; W2_i (local GEMM, shape [batch, d_model])</em></p></li><li><p><em>Y = AllReduce(Y2_i) (sum partial results across 8 GPUs, shape [batch, d_model])</em></p></li></ol><p>The <strong>all-reduce at step 4</strong> is the communication bottleneck. Its cost is:</p><p>2 &#215; (N-1)/N &#215; |Y2| bytes</p><p>For a batch of 2048 tokens, d_model = 8192, BF16: |Y2| = 2048 &#215; 8192 &#215; 2 bytes &#8776; 32 MB. At 450 GB/s NVLink bandwidth, this all-reduce takes approximately 32 MB / 450 GB/s &#8776; 71 microseconds.</p><p>The <strong>compute time</strong> for the local GEMMs is: 2 &#215; (2048 &#215; 8192 &#215; 32768/8) &#215; 2 ops &#247; (494 TFLOP/s per GPU) &#8776; 2 &#215; 2048 &#215; 8192 &#215; 4096 &#215; 2 / 494e12 &#8776; <strong>1.1 milliseconds</strong> per GEMM, so approximately 2.2 ms for both GEMMs.</p><p>Communication (71 &#181;s) is roughly 3% of compute (2200 &#181;s). This is an <strong>excellent ratio</strong>; the all-reduce is effectively free. </p><p>But now notice what happens if you push<strong> TP degree from 8 to 64 over InfiniBand </strong>at 25 GB/s instead of NVLink at 450 GB/s: the all-reduce takes 32 MB / 25 GB/s &#215; (2 &#215; 63/64) &#8776; 2.5 ms, which is now comparable to the compute time. </p><p>The<strong> compute per GPU</strong> has also dropped by 8&#215; (fewer flops per GPU due to more partitioning), so each GEMM takes 2.2ms / 8 &#8776; 275 &#181;s.</p><p>The all-reduce (2.5 ms) now takes <strong>9&#215; longer than the compute it is supposed to overlap with</strong>. You are GPU-idle for 90% of the time. This is why tensor parallelism over InfiniBand at high TP degrees is a terrible idea, not a theoretical concern but an arithmetic certainty.</p><p>The <strong>intra-node NVLink</strong> constraint on <strong>TP degree </strong>is therefore typically TP &#8804; 8 for an 8-GPU node, precisely because that is the point where NVLink bandwidth makes the communication overhead negligible.</p><h3>Self-attention and sequence parallelism</h3><p>The attention mechanism has a different structure than the MLP, but the Megatron-LM approach handles it symmetrically: <strong>Q, K, and V projection matrices</strong> are split column-wise (head-parallel), and the output projection is split row-wise. Each GPU handles a subset of attention heads.</p><p>For <em>H</em> total heads and TP degree <em>N</em>, each GPU computes <strong>H/N heads independently. </strong>No communication is needed within the attention computation itself; only the output projection requires an all-reduce.</p><p>This works cleanly as long as <em>H</em> is divisible by <em>N</em>, which is why transformer architectures are almost always designed with head counts that are <strong>powers of 2 or multiples of 8.</strong></p><p>There is an additional subtlety for attention: <strong>LayerNorm</strong> and dropout require the full activation tensor, not a sharded one. </p><p><strong>In vanilla TP</strong>, these operations run on the full (all-reduced) activations, which means they see the full sequence length at full d_model dimension: they are not distributed and do not benefit from the <strong>TP decomposition.</strong></p><p><strong>Sequence Parallelism</strong> (SP), introduced as an extension to Megatron-LM TP, addresses this by replacing the all-reduce at layer boundaries with an <strong>all-gather + reduce-scatter</strong> pattern, and distributing the non-tensor-parallel operations (LayerNorm, dropout) across the sequence dimension rather than the model dimension.</p><p><strong>In SP</strong>, the activation between transformer layers is sharded across the TP group along the sequence dimension: each GPU holds [batch, seq_len/N, d_model] instead of [batch, seq_len, d_model]. </p><p>Before entering the tensor-parallel MLP, an all-gather reconstructs the full [batch, seq_len, d_model] tensor. After the <strong>MLP&#8217;s row-parallel W2 partial sum</strong>, a reduce-scatter simultaneously sums the partial results and re-shards the output along the sequence dimension.</p><p>The <strong>communication volume</strong> is identical to the all-reduce, but the memory advantage is significant: activations are now partitioned across the TP group, reducing the peak memory per GPU by a factor of <em>N</em> for the activation tensors.</p><p>At <strong>large sequence lengths </strong>(128K tokens, as in recent long-context models), this memory saving is the difference between fitting in HBM and <strong>catastrophic OOM.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Pipeline Parallelism</h2><p><strong>Pipeline parallelism is the ugliest of the three strategies.</strong> This is a statement of fact, not an aesthetic judgment.</p><p>It introduces <strong>pipeline bubbles</strong> (periods where some GPUs are idle because they are waiting for activations from the previous stage) and <strong>managing those bubbles is the central engineering challenge</strong>.</p><p>In the simplest pipeline schedule (<strong>GPipe</strong>), a batch of <em>M</em> micro-batches flows through <em>P</em> pipeline stages sequentially. The forward pass processes micro-batch 0 through stage 0, then stage 1, ..., then stage <em>P</em>-1. Then micro-batch 1 flows through. Then micro-batch 2. And so on.</p><p>The backward pass happens in reverse, with a full flush between the forward and backward sweeps. The pipeline bubble fraction (time wasted on idle GPUs as a fraction of total time) is approximately:</p><p><strong>bubble fraction &#8776; (P &#8722; 1) / (M + P &#8722; 1)</strong></p><p>For P = 4 stages and M = 8 micro-batches: bubble fraction &#8776; 3/11 &#8776; 27%. More than a quarter of GPU time is wasted.</p><p>To reduce the bubble, you increase M. For M = 32: bubble fraction &#8776; 3/35 &#8776; 8.5%. For M &#8594; &#8734;, bubble fraction &#8594; 0.</p><p>But increasing M increases the memory required to store the activations of all in-flight micro-batches during the forward pass before the backward pass can begin (GPipe requires storing all activations). <strong>For </strong><em><strong>M</strong></em><strong> micro-batches each with activation size </strong><em><strong>A</strong></em><strong>, the activation memory is M &#215; A, and this grows linearly with M.</strong></p><p><strong>1F1B (One Forward One Backward)</strong> scheduling, introduced in PipeDream and used by Megatron-LM, breaks this linear activation scaling. In 1F1B, each pipeline stage interleaves one forward pass and one backward pass for different micro-batches, rather than running all forwards before any backwards.</p><p>The pipeline still has a bubble at startup and drain, but <strong>the steady-state memory is bounded: at any point, a stage has at most </strong><em><strong>P</strong></em><strong> micro-batches&#8217; activations in flight (not </strong><em><strong>M</strong></em><strong>)</strong>. The bubble fraction is the same as GPipe ((P&#8722;1)/(M+P&#8722;1)), but the activation memory is P &#215; A instead of M &#215; A.</p><p>For large models where M must be large to amortize the bubble, this is a crucial difference. With M = 64 and P = 8, GPipe stores 64 micro-batches of activations; 1F1B stores at most 8.</p><p><strong>Interleaved 1F1B</strong> goes further: each GPU holds <em>V</em> virtual pipeline stages (chunks of layers) instead of one contiguous block, enabling the bubble fraction to be reduced to:</p><p><strong>bubble fraction &#8776; (P &#8722; 1) / (V &#215; M + P &#8722; 1)</strong></p><p>with V times the point-to-point communication per step (because activation tensors must be sent between non-adjacent GPUs). This is the schedule used by Megatron-LM for the largest training jobs, with V=2 or V=4 providing a 2-4&#215; reduction in bubble at a 2-4&#215; increase in inter-stage communication.</p><h3>The Activation Recomputation Tradeoff</h3><p>One more tool for managing activation memory in pipeline parallelism (and, frankly, in any large training run): <strong>gradient checkpointing</strong>, also called <strong>activation recomputation</strong>.</p><p>The idea is simple: instead of storing the full activation tensor for every layer during the forward pass (<em>needed for the backward pass</em>), you store only the activations at checkpoint boundaries (<em>e.g., every transformer block</em>) and recompute the intermediate activations on-demand during the backward pass by running the forward computation again.</p><p><strong>The memory cost is reduced from O(L &#215; A) to O(&#8730;L &#215; A) for optimal checkpoint placement</strong> (<em>checkpoint every &#8730;L layers</em>). The compute cost increases by approximately 30-40% (one extra forward pass per layer, amortized).</p><p>For training at the frontier, this tradeoff is almost always worth it: <strong>compute is more abundant than HBM capacity</strong>, and the alternative is buying more GPUs (or, equivalently, using more PP stages, which increases the bubble).</p><p>The interaction between<strong> activation recomputation</strong> and pipeline parallelism is non-trivial: if you are recomputing activations, the backward pass must re-run the forward computation for each stage, which means each stage must still have access to the input activations from the <strong>forward pass checkpoint.</strong> </p><p>This constrains how aggressively you can combine <strong>PP and recomputation</strong>, and the Megatron-LM codebase has explicit logic for managing which activations are stored versus recomputed across pipeline stages.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The library that makes multi-GPU work</h2><p><strong>Everything discussed above (all-reduce, all-gather, reduce-scatter) is implemented in practice by NCCL (NVIDIA Collective Communications Library).</strong> </p><p>Understanding what NCCL does, and more importantly <em>how</em> it does it, is necessary for diagnosing performance problems at scale.</p><p>NCCL implements the standard collective communication operations (AllReduce, AllGather, ReduceScatter, Broadcast, Reduce, Barrier) on NVIDIA GPUs, with <strong>topology-aware algorithms</strong> that exploit NVLink, NVSwitch, and InfiniBand according to the detected hardware configuration.</p><h3>Ring-AllReduce vs Tree-AllReduce</h3><p>The canonical<strong> AllReduce algorithm</strong> for a ring of <em>N</em> GPUs is <strong>ring-allreduce</strong>, introduced in the deep learning context by Baidu Research and later made famous by the Horovod library.</p><p>In <strong>ring-allreduce</strong>, GPUs are arranged in a logical ring. AllReduce is decomposed into two phases:</p><p><strong>Reduce-Scatter:</strong> Each GPU sends a chunk of its data to the next GPU in the ring, while simultaneously receiving and accumulating a chunk from the previous GPU. After N&#8722;1 steps, each GPU holds the fully reduced value for one chunk (its 1/N shard of the full tensor).</p><p><strong>AllGather:</strong> Each GPU broadcasts its reduced chunk to all others by rotating it around the ring. After N&#8722;1 more steps, every GPU holds the fully reduced tensor.</p><p><strong>Total data sent per GPU: 2 &#215; (N&#8722;1)/N &#215; |data| &#8776; 2 &#215; |data| for large </strong><em><strong>N</strong></em><strong>.</strong> This is bandwidth-optimal: any AllReduce algorithm must send at least 2 &#215; (N&#8722;1)/N &#215; |data| bytes per GPU, so ring-allreduce achieves the theoretical minimum.</p><p>The latency of <strong>ring-allreduce</strong> scales as 2(N&#8722;1)&#945; + 2(N&#8722;1)/N &#215; |data|/&#946;, where &#945; is the point-to-point latency and &#946; is the bandwidth. </p><p>For large data (|data| &gt;&gt; &#945;/&#946; &#215; N&#178;), the bandwidth term dominates and the algorithm is efficient. <strong>For small data, the latency term (proportional to N) dominates and ring-allreduce becomes expensive.</strong></p><p>This is why AllReduce for gradient synchronization (<em>large tensors, many GB</em>) works well with ring-allreduce, but AllReduce for small tensors (<em>like the normalization statistics in LayerNorm</em>) can benefit from tree-based algorithms that have <strong>O(log N) latency scaling</strong> at the cost of non-optimal bandwidth utilization.</p><p>NCCL automatically selects the algorithm based on <strong>message size</strong>, topology, and a heuristic tuning table, but understanding the underlying tradeoff is necessary when the <strong>automatic selection</strong> is suboptimal for your specific workload.</p><h3>NCCL and topology awareness</h3><p>NCCL&#8217;s topology detection is worth examining in detail because it <strong>directly determines which algorithm it selects for intra-node vs inter-node operations</strong>.</p><p>On startup, NCCL probes the system topology using the<strong> CUDA device properties API </strong>and, where available, NVML (NVIDIA Management Library) topology information. </p><p>It constructs an<strong> internal graph</strong> where GPUs are nodes and NVLink/PCIe/InfiniBand connections are edges with associated bandwidths.</p><p>For an 8-GPU DGX H100 node with NVSwitch, NCCL detects a fully connected graph with 900 GB/s bidirectional bandwidth. </p><p>For multi-node communication over InfiniBand with a single SHARP switch, NCCL can use <strong>SHARP (Scalable Hierarchical Aggregation and Reduction Protocol)</strong>, an in-network computing feature of modern InfiniBand switches that <strong>performs the AllReduce reduction inside the switch fabric rather than at the endpoint GPUs</strong>.</p><p>SHARP effectively moves the bandwidth bottleneck from the GPU NICs to the switch, and for large-scale clusters with <strong>SHARP-capable HDR/NDR InfiniBand</strong>, it can reduce AllReduce latency by 2-3&#215; compared to standard ring-allreduce.</p><p>For hierarchical topologies (NVLink within nodes, InfiniBand between nodes), NCCL uses a <strong>two-level algorithm</strong>: a ReduceScatter within each node using the fast NVLink fabric, followed by an AllReduce across nodes over InfiniBand, followed by an AllGather within each node. </p><p><strong>This correctly exploits the bandwidth hierarchy: </strong>the slow inter-node link sees only the partially reduced results, not the full gradient tensor from every GPU.</p><p>The implementation detail that matters for practitioners: the <code>NCCL_SOCKET_NTHREADS</code> and <code>NCCL_BUFFSIZE</code> environment variables, along with the <code>NCCL_P2P_LEVEL</code> setting, are often the first things to tune when AllReduce performance is below theoretical bandwidth. </p><p>NCCL&#8217;s defaults are conservative for stability across diverse hardware configurations.</p><h3>The NCCL + CUDA stream interaction</h3><p>NCCL operations run on CUDA streams, and <strong>correct stream management is the source of many subtle performance bugs in multi-GPU training code</strong>.</p><p>The critical invariant: <strong>NCCL operations on the same communicator object are serialized in NCCL&#8217;s internal queue</strong>, but operations on different communicators are independent. </p><p>The <strong>PyTorch DDP</strong> implementation creates one NCCL communicator per process group, and all AllReduce operations for gradient synchronization go through this communicator.</p><p>When gradient overlap is active (AllReduce launched for bucket <em>i</em> while the backward pass continues computing gradients for bucket <em>i</em>-1), PyTorch launches the AllReduce on a separate CUDA stream from the backward pass computation. The backward computation stream and the <strong>AllReduce stream</strong> run concurrently on the GPU.</p><p>The synchronization at the end of the backward pass (before the optimizer step) ensures that all AllReduce streams have completed. <strong>Failure to synchronize here is a common bug that manifests as non-deterministic gradient corruption</strong>: the optimizer sees a partially all-reduced gradient tensor.</p><p>The interaction with tensor parallelism adds another layer: the AllReduce within a TP group happens on a separate communicator from the AllReduce within the DP group. </p><p>These two communicators must be correctly ordered in the forward/backward pass: <strong>TP AllReduce </strong>happens at each layer boundary (blocking for the next layer to begin), while <strong>DP AllReduce </strong>happens after the full backward pass.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The arithmetic of parallelism efficiency</h2><p>With the mechanisms in place, we can now put numbers on the parallel efficiency achievable under different configurations. This is where the theoretical discussion becomes practically useful.</p><p>For data parallelism, the relevant ratio is <strong>R&#7429;&#7448; = T_compute / T_allreduce</strong>. For gradient overlap to be effective, we need R&#7429;&#7448; &gt;&gt; 1. For a 70B model over InfiniBand at 25 GB/s, T_allreduce &#8776; 5.6 seconds. For a per-GPU batch of 512 tokens at 50% H100 utilization, T_compute &#8776; 0.58 seconds. R&#7429;&#7448; &#8776; 0.1. </p><p>The compute is <strong>an order of magnitude faster</strong> than the all-reduce, and no amount of overlap engineering fixes a ratio that is inverted.</p><p>The resolution is gradient accumulation: run multiple micro-batches locally before triggering the all-reduce, increasing the logical batch size without increasing activation memory. </p><p>This is not a workaround. It is the correct operating point, because <strong>convergence is measured in tokens seen, not steps taken</strong>.</p><p>For tensor parallelism, the critical TP degree N* is the point above which T_allreduce_TP &gt; T_GEMM_local. On NVLink at 450 GB/s, N* &#8776; 8. On InfiniBand at 25 GB/s, N* &#8776; 1 to 2. Tensor parallelism over InfiniBand is not a suboptimal choice; it is an arithmetic mistake.</p><p>The practical ceiling for a well-tuned thousand-GPU training job with Megatron-LM or DeepSpeed on H100 hardware is approximately <strong>40-60% MFU</strong>. </p><p>The gap from 100% is accounted for by pipeline bubbles (~15%), communication overhead (~10-15%), <strong>activation recomputation</strong> (~5-10%), and the residual from kernel inefficiency on non-GEMM operations and host-side Python overhead. </p><p>Getting from 40% to 60% MFU is worth approximately a 50% reduction in training cost. <strong>Every major AI lab </strong>has engineers whose entire job is that gap.</p><h2>What the three strategies actually buy you</h2><p>It is worth stepping back and stating plainly what each parallelism axis is for, now that we have done the arithmetic.</p><p><strong>Data parallelism</strong> buys throughput. More DP replicas means more tokens per second, with communication overhead that is manageable at any scale where the per-GPU batch is large enough. </p><p><strong>ZeRO makes DP viable</strong> even when the model does not fit on a single GPU, at the cost of increased communication volume that must be weighed against the larger batch sizes it unlocks. </p><p>DP is the outer loop of every large training job; the other strategies are refinements that make DP feasible at model sizes and cluster scales where it would otherwise be communication-bound.</p><p><strong>Tensor parallelism</strong> buys memory capacity per layer, by distributing the weight matrices and activations of individual layers across multiple GPUs. </p><p>Its cost is a mandatory all-reduce at every layer boundary, which makes it viable only where <strong>NVLink bandwidth</strong> makes that all-reduce cheap. </p><p>TP is fundamentally an intra-node strategy on current hardware. Using it otherwise is trading compute for communication at an exchange rate that is never favorable.</p><p><strong>Pipeline parallelism</strong> buys the ability to cross node boundaries without paying the tensor-parallel penalty. Its cost is the pipeline bubble, which is a tax on idleness that shrinks with micro-batch count and with interleaved scheduling. </p><p>PP is the mechanism by which you scale beyond a single node when the model is too large for TP alone to partition. It is ugly, and it is necessary, and the <strong>1F1B schedule </strong>and its interleaved variants exist specifically to make that ugliness manageable.</p><p>The <strong>three-dimensional parallelism strategy </strong>(TP within a node, PP across nodes, DP across node groups) is not a design choice that someone made. It is the unique solution that the bandwidth hierarchy of current hardware enforces. </p><p>NVLink makes TP cheap within a node. InfiniBand makes PP the only viable strategy across nodes. Gradient accumulation and<strong> ZeRO make DP efficient </strong>across the full cluster. Change the hardware, and the optimal strategy shifts. </p><p>NVL72 on Blackwell, by extending the NVLink fabric to 72 GPUs, shifts the TP/PP boundary outward. </p><p>InfiniBand NDR at 400 Gb/s per link, as it becomes more widely deployed, shifts the point at which inter-node DP communication becomes the bottleneck. <strong>The strategies are not timeless; the physics that motivates them is.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What actually limits you at scale</h2><p>The question that every large-scale training practitioner eventually asks is:<em> why isn&#8217;t my thousand-GPU job achieving 70% MFU?</em> The answer is rarely a single cause. </p><p>It is a <strong>stack of inefficiencies</strong>, each modest in isolation, compounding into the gap between theoretical and measured throughput.</p><p>Pipeline bubbles are usually the largest single contributor at high PP degrees. For P=16 and M=32, the bubble fraction is 32% before any other inefficiency is counted. </p><p>Interleaved 1F1B at V=2 halves this, at the cost of doubled inter-stage communication. The right V depends on whether <strong>communication or compute</strong> is the limiting resource at the PP boundary, which varies by model size, node count, and InfiniBand configuration.</p><p>Inter-node AllReduce tail latency is the second major contributor and the hardest to reason about, because it is <strong>statistical rather than deterministic</strong>. </p><p>The average InfiniBand bandwidth may be 25 GB/s, but the 99th-percentile latency can be 3-5&#215; higher due to switch congestion, adaptive routing jitter, and multi-tenancy. </p><p>The all-reduce waits for the slowest link. At scale, the slowest link is almost always slower than the average, which means the<strong> effective all-reduce bandwidth</strong> is consistently worse than the number on the datasheet. </p><p><strong>RDMA configuration</strong>, static routing, and dedicated rail topology are the levers. They require infrastructure access that not every team has.</p><p>Host-side Python overhead is the most embarrassing source of inefficiency, because it is entirely self-inflicted. </p><p>PyTorch&#8217;s dispatcher, the <strong>GIL,</strong> and the overhead of the training loop&#8217;s Python logic can appear as measurable GPU idle time for models where per-step compute is short. <strong>CUDA graph</strong> <strong>capture </strong>eliminates per-operation launch overhead for the inner loop. </p><p>Careful pipelining of data loading and logging eliminates it for the outer loop. Teams that have done this work carefully report <strong>5-10% improvement</strong> in effective MFU from host-side optimizations alone, which is not a small number when the training run costs millions of dollars.</p><h2>Conclusion</h2><p>The trajectory from<strong> single-GPU to multi-GPU</strong> mirrors the trajectory within the single GPU: find the bottleneck, route around it, measure again.</p><p>On a single GPU, the bottleneck moved from arithmetic units (tensor cores solved it) to memory bandwidth (cp.async attacked it) to instruction overhead (TMA eliminated it). </p><p>The SMSP on a <strong>well-tuned Hopper GEMM kernel</strong> is a machine that does one thing, because every other thing it used to do has been delegated to dedicated hardware.</p><p>At the <strong>multi-GPU level</strong>, the bottleneck is the communication fabric, and the solution follows the same logic: match the parallelism strategy to the bandwidth available at each level of the hierarchy. </p><p>TP over NVLink, PP over InfiniBand, DP across the full cluster. The ring-allreduce, the 1F1B schedule, the ZeRO partitioner: these are the mechanisms by which a thousand-GPU cluster achieves 40-60% of the theoretical sum of its parts.</p><p>40-60% of a thousand H100s is still an extraordinary amount of compute. Whether it is enough to train the next frontier model is left as an exercise for the reader&#8217;s infrastructure budget.</p><p><strong>Part X</strong> will close in on a corner of this picture we have deliberately deferred: inference. Training is a <strong>one-time cost</strong>; inference is the workload that runs forever, at a scale that dwarfs training once a model is deployed. </p><p>The optimization challenges at inference time are different in kind: speculative decoding, <strong>KV cache management</strong>, continuous batching, and the specific arithmetic of when the prefill and decode phases are bottlenecked by entirely different resources. </p><p><em>The tools change; the principle does not.</em></p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-d2d?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-d2d?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Mastering CUDA and High-Performance Computing, Part VIII]]></title><description><![CDATA[Where Part VII Left Us]]></description><link>https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-db8</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-db8</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Tue, 07 Apr 2026 09:52:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GG5h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GG5h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GG5h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!GG5h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!GG5h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!GG5h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GG5h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2478549,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/160372692?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GG5h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!GG5h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!GG5h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!GG5h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff03d2005-5a43-4f0d-8dda-41d6047144ed_1024x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Where Part VII Left Us</h2><p><strong><a href="https://softwarefrontier.substack.com/p/mastering-cuda-and-high-performance-ea1">Part VII</a></strong> ended with a promise and an architectural cliffhanger.</p><p>The promise: on <strong>Hopper</strong>, the compute-to-load instruction ratio in a <strong>GEMM inner loop</strong> approaches infinity from the SMSP&#8217;s perspective. </p><p><strong>The cliffhanger</strong>: one instruction moves a 128&#215;128 BF16 tile, the <strong>TMA unit </strong>generates all the addresses, and something called an <code>mbarrier</code> replaces the <code>__syncthreads()</code> you have been writing since your first CUDA &#8220;hello world&#8221;.</p><p>Let us unpack exactly what that means, why NVIDIA made those choices, and what you have to understand to write, read, or <strong>debug CUTLASS 3.x kernels </strong>without feeling like you are reading a foreign language.</p><p>We will <strong>go very deep</strong>. There is no other way.</p><div><hr></div><h2>The Problem cp.async Did Not Fully Solve</h2><p><strong>Part VII</strong> established that <code>cp.async</code> is superior to the <strong>conventional LDG &#8594; STS path</strong> because it removes the destination registers from the scoreboard. The SMSP issues the copy, hands it off to the <strong>Async Copy Engine</strong>, and is immediately free to issue the next instruction.</p><p>This is genuinely great. But it has a hidden cost that only becomes visible when you look at the SMSP instruction stream of a<strong> real GEMM kernel.</strong></p><p>Consider a <strong>128&#215;128&#215;32 BF16 tile.</strong> Loading that tile requires 128 &#215; 32 BF16 elements = 4096 BF16 = 8 KB. At 16 bytes per <code>cp.async</code>, that is 512 individual <code>CP.ASYNC.CA.SHARED.GLOBAL</code> instructions. </p><p>Those 512 instructions have to be fetched from the instruction cache, decoded, dispatched through the <strong>MIO unit,</strong> and tracked by the hardware. They consume SMSP instruction bandwidth even though they produce no register results.</p><p>On Ampere, the SMSP can issue roughly one 128-bit <code>cp.async</code> every 4 cycles per SMSP. For 512 instructions, that is approximately <strong>2048 SMSP cycles</strong> per tile load, just for the instruction overhead. The actual data movement happens asynchronously, but the instruction stream is not free.</p><p>For large tiles this is manageable. For smaller tiles, or for architectures where you want the SMSP to spend every cycle on tensor core instructions, it is a ceiling.</p><p>Hopper (SM90, H100) was designed to remove that ceiling entirely. The answer is the <strong>Tensor Memory Accelerator</strong>.</p><div><hr></div><h2>Tensor Memory Accelerator</h2><p>The <strong>TMA </strong>is a hardware unit introduced in <strong>Hopper</strong> that performs multi-dimensional tensor copies between global memory and shared memory (<em>or distributed shared memory across a cluster, but we will get to clusters</em>). </p><p>It accepts a <strong>tensor descriptor</strong> computed on the host and a set of <strong>coordinates</strong> computed on the device, and it handles everything else: address computation, striding, data type conversion, out-of-bounds clamping, cache policy, and transaction completion signaling.</p><p>Let us be concrete about what &#8220;<em>everything else</em>&#8221; means.</p><p>In a <strong>conventional tiled GEMM</strong>, for every tile you load, every thread in the warp must compute its portion of the global memory address. </p><p>That address computation involves the block index, the thread index, the tile dimensions, <strong>the matrix stride</strong>, and the element size. It is entirely deterministic arithmetic that produces the same result every time you execute the same tile iteration. </p><p>It is also arithmetic that the <strong>SMSP</strong> has to execute. On Ampere with <code>cp.async</code>, that arithmetic still happens in the SMSP even though the subsequent memory transaction is asynchronous.</p><p>The TMA eliminates that arithmetic from the SMSP. One thread issues one instruction with a tensor descriptor handle and a pair of (y, x) coordinates. </p><p>The <strong>TMA unit</strong> uses those coordinates and the descriptor&#8217;s metadata to compute every address needed for the entire tile transfer, scatter or gather the data, and write it to shared memory. The SMSP emitted one instruction. One.</p><p>This is not a minor optimization. It is a<strong> qualitative change</strong> in what the SMSP does during a GEMM kernel. On Hopper, the SMSP&#8217;s job is to run <code>WGMMA.MMA_ASYNC</code> instructions. </p><p>The TMA&#8217;s job is to move data. These<strong> two jobs </strong>happen simultaneously, on separate hardware units, and the only communication between them is an <code>mbarrier</code> synchronization object.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The Tensor descriptor</h2><p>Before a Hopper kernel runs, the host must create a tensor descriptor using <code>cuTensorMapEncodeIm2col</code> or, more commonly for GEMM, <code>cuTensorMapEncodeTiled</code>. This is a <strong>128-byte opaque structure</strong> stored in constant memory (or passed through a register and loaded into the L1).</p><p>The descriptor encodes:</p><p><strong>Base pointer</strong>: the global memory address of tensor element [0, 0, 0, ...].</p><p><strong>Global dimensions</strong>: the actual size of each dimension in the full tensor, in elements. For an M&#215;K matrix A, this is {M, K} (or {K, M} if column-major).</p><p><strong>Global strides</strong>: the byte stride between consecutive elements in each dimension. For a row-major matrix with K columns and BF16 elements, the stride between row i and row i+1 is K &#215; 2 bytes. These strides allow arbitrary non-contiguous tensors.</p><p><strong>Box dimensions</strong>: the size of the tile to be transferred in each dimension. For a 128&#215;32 BF16 tile, this is {128, 32}.</p><p><strong>Interleave and swizzle mode</strong>: how data should be rearranged during the transfer to produce a shared memory layout that avoids bank conflicts. This is the part that replaces all the padding arithmetic from Part VII.</p><p><strong>Element stride and data type</strong>: how to interpret the raw bytes.</p><p>The descriptor is created once on the<strong> CPU </strong>and passed to the kernel. On the device, a single warp or even a single thread can then use this descriptor to initiate a full tile transfer with one instruction, because all the<strong> per-tile invariant information</strong> is already encoded.</p><p>This is a deliberate design choice: move the expensive computation (descriptor creation) to the host, where <strong>latency is irrelevant</strong> relative to the kernel launch overhead, so that the device-side instruction can be as cheap as possible.</p><div><hr></div><h2>The TMA instruction itself</h2><p>The PTX for a 2D TMA load looks like this:</p><pre><code><code>cp.async.bulk.tensor.2d.shared::cluster.global.mbarrier::complete_tx::bytes
    [smem_dst], [gmem_desc, {coord_y, coord_x}], [mbar];
</code></code></pre><p>Let us parse every token.</p><p><code>cp.async.bulk</code> means this is an <strong>asynchronous bulk copy</strong>; &#8220;bulk&#8221; distinguishes it from scalar <code>cp.async</code>. The transfer size is determined by the descriptor, not encoded in the instruction.</p><p><code>tensor.2d</code> means the TMA will interpret the coordinates as a <strong>2D tensor access</strong>. There are variants for 1D through 5D tensors.</p><p><code>shared::cluster</code> is the destination scope: shared memory that is visible to the entire thread block cluster (more on clusters shortly). For <strong>single-CTA kernels</strong> this is simply shared memory.</p><p><code>global</code> is the source: <strong>global memory</strong>, indexed via the descriptor.</p><p><code>mbarrier::complete_tx::bytes</code> is the completion signaling mechanism. When the transfer completes, the TMA will signal a <code>mbarrier</code> object, decrementing its transaction count. </p><p>When the count reaches zero, threads waiting on the barrier are unblocked. This replaces <code>consumer_wait()</code> and <code>__syncthreads()</code> in the sense that the barrier itself tracks both the data arrival and the<strong> thread synchronization</strong> in a single primitive.</p><p><code>[smem_dst]</code> is the destination address in shared memory.</p><p><code>[gmem_desc, {coord_y, coord_x}]</code> is the descriptor plus coordinates. The TMA extracts the base pointer, strides, and box dimensions from the descriptor, applies the coordinates, and generates the full address range.</p><p><code>[mbar]</code> is a pointer to the <code>mbarrier</code> object in shared memory.</p><p>In <strong>CUDA C++</strong>, the <code>cuda::experimental::tma::</code> API (or <code>__pipeline_memcpy_async</code> for simpler cases) generates this instruction. The canonical production path is through CUTLASS 3.x&#8217;s <code>cute::copy</code> with a <strong>TMA copy atom</strong>, which we will examine in the CUTLASS section.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>A synchronization primitive you have not seen before</h2><p><code>__syncthreads()</code> is a full thread block barrier. Every thread in the block must arrive before any thread proceeds. </p><p>It is implemented via a shared counter that is decremented by each arriving thread and checked by a <strong>hardware barrier mechanism</strong>. Its cost is proportional to thread block size, and it cannot distinguish between &#8220;<em>I&#8217;m done computing</em>&#8221; and &#8220;<em>my data has arrived from the DMA engine</em>&#8221;.</p><p><code>mbarrier</code> (memory barrier, or more precisely, the Hopper barrier object) solves both of those problems.</p><p>An <code>mbarrier</code> object is a <strong>64-bit value</strong> stored in shared memory. It has two phases, <strong>expect</strong> and <strong>arrive</strong>, and it tracks two distinct counts:</p><p>The <strong>arrival count</strong> is decremented by threads calling <code>mbarrier.arrive</code> or <code>mbarrier.arrive_drop</code>. When this count hits zero, the barrier phase flips.</p><p>The <strong>transaction count</strong> is decremented by the TMA engine itself when a bulk copy completes. This is the <code>complete_tx::bytes</code> in the PTX instruction above. The programmer initializes this count to the expected number of bytes that the TMA will deliver.</p><p>The barrier is &#8220;<em>complete</em>&#8221; when both counts reach zero: all participating threads have arrived, and all <strong>expected TMA transactions</strong> have completed.</p><p>This means you can have a consumer wait on a barrier that is signaled partly by threads and partly by hardware DMA engines, with <strong>no polling loop</strong>, no atomics in the critical path, and no <code>__syncthreads()</code> that serializes all 128 threads in the block.</p><p>The setup looks like this in<strong> CUDA C++</strong>:</p><pre><code><code>__shared__ cuda::barrier&lt;cuda::thread_scope_block&gt; mbar;

// One thread initializes the barrier for N_THREADS participants
if (thread_rank == 0) {
    init(&amp;mbar, N_THREADS);
    // Tell the barrier to also expect TMA_BYTES bytes of async data
    cuda::device::barrier_native_handle(mbar).arrive_tx(TMA_BYTES);
}
__syncthreads();  // This syncthreads is to publish the initialized mbar

// Producer thread issues TMA
if (thread_rank == 0) {
    tma_load(&amp;mbar, smem_A, gmem_desc_A, tile_coord_m, tile_coord_k);
}

// All threads arrive at the barrier (decrement arrival count)
auto token = cuda::device::barrier_native_handle(mbar).arrive();

// Wait for both arrival count and transaction count to reach zero
cuda::device::barrier_native_handle(mbar).wait(std::move(token));</code></code></pre><p><strong>Note the asymmetry</strong>: one thread issues the TMA, all threads participate in the barrier synchronization. This is not a bug; it is the design. </p><p>The TMA is a singleton operation that one thread initiates, but the data it delivers is <strong>consumed by all threads</strong>, so all threads must synchronize on its completion.</p><p>The <code>arrive_tx</code> call informs the barrier that TMA bytes are expected. Without it, the barrier would complete as soon as all threads arrived, regardless of whether the DMA data had landed in shared memory. That would be a<strong> race condition.</strong></p><p>The <code>token</code> returned by <code>arrive</code> is a phase token. <code>mbarrier</code> operates in alternating phases (like a double buffer at the synchronization level), and the token ensures that <code>wait</code> waits on the correct phase. </p><p>This is how Hopper avoids the <strong>ABA problem</strong> in barrier reuse: you cannot accidentally wait on a barrier phase that already completed in a previous iteration.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Warpgroup MMA</h2><p>Part VII did not cover the compute side of Hopper in depth because the memory side was already enough to digest. Now we need to talk about <code>WGMMA</code>, and it is equally radical.</p><p>On Ampere, tensor core instructions are issued per-warp: <code>HMMA.1688</code> or the PTX <code>mma.sync.aligned</code> operates on <strong>16&#215;8&#215;16 tiles</strong> with 32 threads participating. Each warp independently executes its tile of the matrix multiply. </p><p>Warp-level <strong>tensor core instructions</strong> were already a significant departure from SIMT, since all 32 threads in a warp cooperate to produce a single 16&#215;8 output tile. But the warp is still the unit of scheduling and the unit of tensor core execution.</p><p>On Hopper, the tensor core instruction is <strong>warpgroup-level</strong>: <code>WGMMA.MMA_ASYNC</code> operates on a group of 4 warps (128 threads) simultaneously. The input tile dimensions for BF16 are:</p><ul><li><p><em>A: 64&#215;16 per warpgroup (contributed from registers or shared memory)</em></p></li><li><p><em>B: 16&#215;256 per warpgroup (always from shared memory)</em></p></li><li><p><em>C/D: 64&#215;256 accumulator (in registers, split across the 128 threads)</em></p></li></ul><p>A single <code>WGMMA.MMA_ASYNC</code> instruction computes a 64&#215;256&#215;16 BFGEMM, producing 64&#215;256 = 16,384 output elements in one instruction. </p><p>For comparison, an Ampere <code>mma.sync.aligned</code> with the largest BF16 shape produces 16&#215;8&#215;16 BFGEMM, 128 output elements.</p><p>The output volume ratio is 128:1. This is what<em> &#8220;approaching infinite compute-to-load ratio&#8221;</em> means in practice.</p><p>The <code>_ASYNC</code> suffix is critical: <code>WGMMA.MMA_ASYNC</code> does not complete synchronously. <strong>The 4 warps issue</strong> the instruction and the result is not guaranteed to be in the accumulator registers until a <code>WGMMA.WAIT_GROUP</code> instruction is executed. </p><p>The hardware can overlap multiple <code>WGMMA</code> operations in flight simultaneously, and the programmer must insert explicit waits before reading the accumulators.</p><p><strong>The programming model</strong> therefore looks like this at the instruction level:</p><pre><code><code>WGMMA.MMA_ASYNC D, A, B   ; issue tile multiply k=0
WGMMA.MMA_ASYNC D, A, B   ; issue tile multiply k=1
WGMMA.MMA_ASYNC D, A, B   ; issue tile multiply k=2
...
WGMMA.WAIT_GROUP 0         ; wait for all outstanding WGMMAs
; D accumulator registers now hold valid results</code></code></pre><p>In CUDA C++, this is exposed through the <code>cute::wgmma</code> abstractions in CUTLASS 3.x, or through the lower-level <code>cuda::wgmma::</code> namespace. <strong>Direct PTX </strong>is also possible but strongly inadvisable outside of research contexts.</p><p>The reason B must always come from shared memory (not registers) is a hardware constraint. The tensor core units on Hopper are wired directly to the<strong> shared memory arrays</strong>. </p><p>The B operand is fetched directly from the <strong>shared memory banks</strong> by the tensor core datapath, without going through the register file. </p><p>This is why the TMA delivering B into shared memory is on the critical path, but there is no &#8220;<em>load B from shared memory to registers</em>&#8221; step. The tensor core reads shared memory directly.</p><p>A can come from either registers or shared memory. For the highest-performance kernels, A also comes from shared memory, which means both operands bypass the register file entirely on the compute side. The register file holds only the C/D accumulator.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Thread Block Clusters</h2><p>Hopper introduced a new level of the GPU hierarchy between the thread block and the grid: the <strong>thread block cluster</strong>.</p><p>A cluster is a group of up to 8 thread blocks that are guaranteed to be co-scheduled on the same GPC (Graphics Processing Context, a group of SMs sharing an L2 slice). </p><p>Thread blocks within a cluster can access each other&#8217;s shared memory via the <strong>Distributed Shared Memory (DSMEM)</strong> mechanism, using TMA to move data between SMs without going through L2.</p><p>The<strong> PTX instruction</strong> for a cross-SM TMA transfer is:</p><pre><code><code>cp.async.bulk.tensor.2d.shared::cluster.global.mbarrier::complete_tx::bytes
    [smem_dst], [gmem_desc, {coord_y, coord_x}], [mbar];
</code></code></pre><p>This is the same instruction as a regular TMA load, with the <code>shared::cluster</code> scope indicating that the destination is visible cluster-wide. The <strong>TMA unit </strong>manages the inter-SM data movement transparently.</p><p><em>Why does this matter for GEMM?</em> Consider a<strong> cluster of 2 CTAs</strong>, each responsible for a different row block of C. Both need access to the same columns of B. </p><p>With clusters, CTA 0 loads B into its<strong> shared memory</strong> via TMA, and CTA 1 can read CTA 0&#8217;s shared memory directly via DSMEM. B is loaded once and consumed by two CTAs. This effectively doubles the B reuse without doubling the shared memory per CTA.</p><p>For an N=8 cluster, 8 CTAs share the B tile load, amortizing the<strong> HBM bandwidth</strong> for B across 8x more compute. </p><p>This is the mechanism by which <strong>Hopper GEMM kernels</strong> approach hardware peak on large problem sizes: the cluster architecture allows the working set of the entire computation to be held in distributed shared memory, with HBM touched only once per element.</p><p>The cluster size is <strong>specified at kernel launch:</strong></p><pre><code><code>cudaLaunchConfig_t config = {};
config.gridDim = grid;
config.blockDim = block;
cudaLaunchAttribute attr;
attr.id = cudaLaunchAttributeClusterDimension;
attr.val.clusterDim.x = 2; // 2 CTAs per cluster
attr.val.clusterDim.y = 1;
attr.val.clusterDim.z = 1;
config.attrs = &amp;attr;
config.numAttrs = 1;
cudaLaunchKernelEx(&amp;config, my_kernel, args...);
</code></code></pre><p>Cluster scheduling is cooperative: the hardware will attempt to co-locate the <strong>CTAs</strong> of a cluster on the <strong>same GPC</strong>, but this is a hint, not a guarantee for clusters larger than what fits on one GPC. </p><p>On<strong> H100 SXM5</strong> with 132 SMs organized into 7 GPCs, clusters of up to 8 are always satisfied within a single GPC.</p><div><hr></div><h2>The Persistent Kernel Model</h2><p>On <strong>Ampere</strong>, a typical GEMM kernel is a &#8220;<em>grid kernel</em>&#8221;: each thread block handles one (M_TILE, N_TILE) output tile and exits. The <strong>CUDA runtime</strong> schedules new thread blocks as soon as SM capacity becomes available. </p><p>For <strong>large matrices</strong> this is fine: there are enough tiles that the SM scheduler is always busy.</p><p>For smaller matrices, the overhead of launching and retiring thread blocks dominates. Each thread block must load its A and B tiles from scratch, write its C tile to global memory, and terminate. The <strong>shared memory state </strong>is not reused across thread blocks.</p><p>Hopper&#8217;s memory hierarchy and cluster model make a different approach attractive: <strong>persistent kernels</strong>.</p><p>In a persistent kernel, a thread block (<em>or warpgroup</em>) does not terminate after processing one tile. </p><p>Instead, it loops over multiple output tiles, maintaining the A and B tiles in<strong> shared memory </strong>between iterations where the tile is reused, and fetching new tiles via TMA only when necessary. The kernel terminates only after all output tiles in its assigned partition are complete.</p><p>CUTLASS 3.x implements this via the <strong>Tile Scheduler</strong>, a device-side component that manages the assignment of output tiles to persistent CTAs. </p><p>The scheduler atomically increments a<strong> work counter </strong>stored in global memory, assigning the next available (m_tile, n_tile) pair to the requesting CTA. When all tiles are assigned, the scheduler signals completion and the CTA exits the work loop.</p><p>The advantages are concrete:</p><p>L2 reuse improves because the same <strong>CTA processes </strong>multiple adjacent tiles, and the A or B tiles they share remain in<strong> L2</strong> (or even in shared memory) between iterations.</p><p>Thread block launch overhead is amortized: the GPU launches one wave of persistent CTAs and they run to completion, rather than launching thousands of transient blocks.</p><p><strong>Irregular problem</strong> <strong>sizes </strong>are handled more gracefully: the final partial tile is processed by whichever CTA happens to claim it, without requiring separate epilogue kernel launches.</p><p>The disadvantage is programming complexity: you are writing a software scheduler inside a CUDA kernel, with all the<strong> attendant concerns</strong> about correctness under concurrent access and load balancing across heterogeneous tile work.</p><p>CUTLASS handles this for you, which is one reason the library exists.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The CUTLASS 3.x Architecture</h2><p>CUTLASS 3.x is a complete rewrite of CUTLASS 2.x, built on a new abstraction layer called <strong>CuTe</strong> (CUDA Template library). </p><p>Understanding CUTLASS 3.x requires understanding CuTe, because <strong>CUTLASS 3.x </strong>is essentially CuTe plus a set of kernel templates that use it.</p><h3>CuTe: Layouts as First-Class Objects</h3><p><strong>CuTe&#8217;s</strong> central idea is that a <strong>layout</strong> is a function from a logical coordinate space to a physical offset in memory. A layout encodes both shape (<em>the extents of each dimension</em>) and stride (<em>the distance in elements between consecutive elements along each dimension</em>).</p><p><strong>In CuTe,</strong> a layout is written as <code>Shape:Stride</code>. For example, a 4&#215;8 row-major matrix with elements of size 2 bytes has layout <code>(4,8):(8,1)</code>, meaning: the outer dimension (rows) <strong>has stride 8</strong> (<em>each row is 8 elements apart</em>), and the inner dimension (columns) has stride 1. A column-major version of the same matrix would be <code>(4,8):(1,4)</code>.</p><p>The power of this representation is that it composes. A tiling operation is just a layout composition.<strong> A swizzle</strong> (bit permutation of addresses to avoid bank conflicts) is a layout transformation that permutes the address bits in a specific pattern. </p><p>The entire address computation for a tiled, swizzled, transposed tensor is expressed as a sequence of <strong>layout compositions</strong> that the compiler evaluates at compile time, producing a single address formula.</p><p>This is why CUTLASS 3.x can express <strong>complex access patterns</strong> without any runtime branching in the address computation.</p><pre><code><code>using LayoutA = Layout&lt;Shape&lt;_128, _32&gt;, Stride&lt;_32, _1&gt;&gt;;  // 128x32 row-major
using LayoutA_Swizzled = ComposedLayout&lt;Swizzle&lt;3,3,3&gt;, LayoutA&gt;;</code></code></pre><p>The <code>Swizzle&lt;B,M,S&gt;</code> template encodes a specific<strong> XOR-based address permutation</strong>. <code>B</code> bits are permuted with <code>S</code> bits, offset by <code>M</code> bits. </p><p>For BF16 with 32 banks of 4 bytes each, the correct swizzle eliminates all bank conflicts without any padding. CUTLASS ships with the correct swizzle parameters for every element type and tile dimension it supports.</p><h3>The MMA Atom and Copy Atom</h3><p>In CUTLASS 3.x, a tensor core instruction is an <strong>MMA atom</strong>: a typed object that describes the input/output shapes, thread-to-data mapping, and instruction to emit. The canonical Hopper MMA atom for BF16 is:</p><pre><code><code>using MMA_Atom = MMA_Atom&lt;SM90_64x256x16_F32BF16BF16F32_SS&gt;;</code></code></pre><p>The name encodes: SM90 (Hopper), 64&#215;256&#215;16 tile dimensions, <strong>F32 accumulator</strong>, BF16 A and B inputs, F32 output, SS meaning both A and B come from shared memory.</p><p>A TMA copy is a <strong>copy atom</strong>:</p><pre><code><code>using Copy_Atom_A = Copy_Atom&lt;SM90_TMA_LOAD, bfloat16_t&gt;;</code></code></pre><p>The CUTLASS kernel template composes these atoms with tile dimensions, cluster shapes, and pipeline stages into a<strong> complete kernel:</strong></p><pre><code><code>using CollectiveMainloop = cutlass::gemm::collective::CollectiveMma&lt;
    cutlass::gemm::MainloopSm90TmaGmmaRmemAAccumulator&lt;3&gt;,  // 3-stage pipeline
    Shape&lt;_128, _256, _64&gt;,                                   // tile MxNxK
    bfloat16_t, LayoutA,
    bfloat16_t, LayoutB,
    TiledMma,
    GmemTiledCopyA,
    SmemLayoutA,
    SmemCopyAtomA,
    cute::identity,
    GmemTiledCopyB,
    SmemLayoutB,
    SmemCopyAtomB,
    cute::identity
&gt;;</code></code></pre><p>This is verbose, but every template parameter maps to a concrete hardware mechanism: <code>MainloopSm90TmaGmmaRmemAAccumulator&lt;3&gt;</code> means &#8220;use TMA for loads, use WGMMA for compute, keep the accumulator in registers, with 3 pipeline stages&#8221;.</p><p>The compiler resolves all of this into a kernel where the main loop body is a tight sequence of <code>WGMMA.MMA_ASYNC</code> instructions, interrupted only by TMA-initiated <code>mbarrier</code> waits at stage boundaries. </p><p>The address computation for the <strong>TMA loads</strong> is essentially absent from the device code, having been moved to the descriptor construction on the host.</p><h3>The Producer-Consumer Warpgroup Model</h3><p>CUTLASS 3.x on Hopper adopts a <strong>warpgroup specialization</strong> model within each CTA. A thread block of 128 threads (one warpgroup) is divided at compile time into a <strong>producer warpgroup</strong> and one or more <strong>consumer warpgroups</strong>.</p><p>The producer warpgroup is responsible for issuing TMA loads (one thread per load, the others arrive at barriers). The consumer warpgroups are responsible for issuing <code>WGMMA.MMA_ASYNC</code> instructions and running the epilogue (writing C to global memory via the output TMA store).</p><p>This specialization is explicit:</p><pre><code><code>if (warpgroup_id == 0) {
    // Producer: issue TMA loads into shared memory stages
    collective_mainloop.load(params, smem_tensors, pipeline, pipeline_state, k_tile_count);
} else {
    // Consumer: issue WGMMA instructions, run epilogue
    collective_mainloop.mma(params, smem_tensors, accumulators, pipeline, pipeline_state, k_tile_count);
    collective_epilogue.store(params, accumulators, ...);
}</code></code></pre><p>The producer and consumer warpgroups communicate exclusively through the <code>mbarrier</code>-protected shared memory pipeline. There is no <code>__syncthreads()</code> between them in steady state. The barriers are sufficient.</p><p>This is architecturally important: <code>__syncthreads()</code> is a full CTA barrier. In a producer-consumer model where the producer and consumer have different amounts of work to do per iteration, a<strong> full CTA barrier</strong> would force the faster group to wait for the slower one on every iteration. </p><p>The <code>mbarrier</code> primitive allows <strong>asymmetric synchronization</strong>: the consumer waits only for the data it needs, not for the producer to reach any particular point in its control flow.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The N-Stage Pipeline on Hopper</h2><p>Part VII described double buffering (2 stages) on Ampere. On Hopper, CUTLASS uses <strong>3 to 8 stages</strong> by default, with the optimal stage count depending on the tile size, problem size, and occupancy target.</p><p>The pipeline state machine on Hopper manages N shared memory stages, N producer mbarriers (one per stage, signaling data arrival), and <strong>N consumer mbarriers</strong> (one per stage, signaling that the consumer is done reading and the stage can be reused).</p><p>The steady-state loop looks like this conceptually:</p><pre><code><code>Stage 0: [TMA load A0, B0] &#8594; [mbar_full[0] signaled] &#8594; [WGMMA on A0,B0] &#8594; [mbar_empty[0] signaled]
Stage 1: [TMA load A1, B1] &#8594; [mbar_full[1] signaled] &#8594; [WGMMA on A1,B1] &#8594; [mbar_empty[1] signaled]
Stage 2: [TMA load A2, B2] &#8594; [mbar_full[2] signaled] &#8594; [WGMMA on A2,B2] &#8594; [mbar_empty[2] signaled]
Stage 0: [TMA load A3, B3] &#8594; ...</code></code></pre><p>The producer issues TMA loads into stage i and signals <code>mbar_full[i]</code>. The consumer waits on <code>mbar_full[i]</code>, runs WGMMA, signals <code>mbar_empty[i]</code>, and moves to stage (i+1) % N. </p><p>The producer waits on <code>mbar_empty[i]</code> before reusing that stage for the next load. This circular buffer in shared memory, managed by mbarrier pairs, is the fundamental data structure of a <strong>Hopper GEMM kernel</strong>.</p><p>The prologue loads N-1 tiles before the main loop begins (same invariant as Part VII&#8217;s double buffer prologue, just with more stages). The <strong>epilogue</strong> drains the remaining in-flight tiles after the k loop exits.</p><p>With 3 stages on an H100 with 228 KB of <strong>shared memory per SM</strong> (up from Ampere&#8217;s 192 KB), a 128&#215;256 BF16 tile pair consumes approximately:</p><ul><li><p><em>A tile: 128 &#215; 64 &#215; 2 bytes = 16 KB</em></p></li><li><p><em>B tile: 64 &#215; 256 &#215; 2 bytes = 32 KB</em></p></li><li><p><em>Per stage: 48 KB</em></p></li><li><p><em>3 stages: 144 KB</em></p></li><li><p><em>Remaining for mbarriers and accumulator spills: 84 KB</em></p></li></ul><p>At 3 stages and a 128&#215;256 tile, one <strong>CTA per SM is feasible.</strong> Two CTAs would require 288 KB, which exceeds the 228 KB shared memory limit. </p><p>Occupancy is therefore 1 CTA per SM, which is fine on Hopper because the single CTA fills the SM with <strong>WGMMA instructions</strong> and the TMA unit is fully occupied.</p><p>This is a fundamentally different occupancy philosophy from Ampere. On Ampere, you often needed <strong>2-4 CTAs </strong>per SM to hide memory latency through warp-switching.</p><p>On Hopper, one CTA with TMA and<strong> WGMMA </strong>already achieves near-peak throughput on large tiles, because the hardware units that matter (TMA, tensor cores) are all fully occupied.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What the Profiler Shows You on Hopper</h2><p>The Nsight Compute metrics shift dramatically compared to Ampere.</p><p><code>smsp__warp_issue_stalled_long_scoreboard</code> approaches zero. Not because the memory is fast, but because <strong>TMA loads</strong> do not involve the scoreboard at all. The SMSP is not waiting for memory; it is not the unit that issued the memory request.</p><p><code>smsp__warp_issue_stalled_mio_throttle</code> is also low. The single TMA instruction per tile barely loads the MIO unit.</p><p><code>smsp__warp_issue_stalled_wgmma_global_wait</code> is the new dominant stall: this is the SMSP waiting for a <code>WGMMA.WAIT_GROUP</code> to complete so it can read the accumulator registers. </p><p>This stall is unavoidable for kernels that read their accumulators between WGMMA groups (e.g., for <strong>split-K partial reductions</strong>). For kernels with long K dimensions, the WGMMA pipeline fills up and this stall disappears.</p><p><code>sm__pipe_tensor_op_hmma_cycles_active</code> should be 80-95% for a well-tuned Hopper GEMM. Anything below 70% suggests either a pipeline depth problem (too few stages) or a cluster scheduling problem (<em>the GPC is not scheduling the cluster CTAs together</em>).</p><p><code>l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld</code> counts shared memory read operations. For a kernel where <strong>both A and B</strong> are read from shared memory by WGMMA (SS variant), this metric reflects tensor core throughput, not programmer-visible loads. The <strong>tensor cores</strong> are reading shared memory directly, and this shows up in the LSU metrics.</p><p>The TMA throughput metrics are in the <code>tma</code> namespace: <code>tma__read_bytes</code> and <code>tma__read_transactions</code>. A kernel that is achieving peak TMA throughput will show TMA bandwidth close to the<strong> theoretical HBM bandwidth</strong>, because TMA is the only thing accessing HBM.</p><p>The <strong>key diagnostic insight </strong>on Hopper: if your WGMMA utilization is high and your TMA bandwidth is high, the kernel is good. The <strong>two hardware units </strong>are the bottleneck by design. Everything else should be idle or near-idle.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The Roofline on Hopper, revisited</h2><p>Part VII introduced the roofline model and noted that the useful diagnosis is hierarchical: not &#8220;<em>memory-bound</em>&#8221; but &#8220;<em>memory-bound at the L2 level, achieving 60% of L2 peak</em>&#8221;. On Hopper the hierarchy has the same levels (L1, L2, HBM) but new slopes.</p><p><strong>H100 SXM5 roofline parameters:</strong></p><ul><li><p><em>HBM3 peak bandwidth: 3.35 TB/s</em></p></li><li><p><em>L2 peak bandwidth: approximately 12 TB/s (across 50 MB of L2, two slices)</em></p></li><li><p><em>Shared memory peak bandwidth: approximately 33 TB/s aggregate (SM-local)</em></p></li><li><p><em>Tensor core peak (dense BF16): 494 TFLOP/s</em></p></li></ul><p><strong>Ridge points:</strong></p><ul><li><p><em>HBM ridge: 494 / 3.35 &#8776; 147 FLOP/byte</em></p></li><li><p><em>L2 ridge: 494 / 12 &#8776; 41 FLOP/byte</em></p></li><li><p><em>Shared memory ridge: 494 / 33 &#8776; 15 FLOP/byte</em></p></li></ul><p>For a GEMM with arithmetic intensity of <strong>147 FLOP/byte</strong> or above, the kernel should be compute-bound assuming the memory hierarchy is properly utilized. Below <strong>147 FLOP/byte</strong>, it is HBM-bandwidth-bound. </p><p>Below 41, even a perfect<strong> L2 hit rate</strong> cannot save you. Below 15, the tensor core throughput is limited by shared memory bandwidth, which means either bank conflicts or tile sizes that do not saturate the <strong>WGMMA datapath</strong>.</p><p>The key new insight on Hopper: TMA changes the shape of the memory hierarchy&#8217;s contribution. The <strong>SMSP instruction bandwidth</strong>, which was a secondary bottleneck on Ampere (and a primary bottleneck for small tiles), is effectively removed from the HBM bandwidth calculation. </p><p>The raw bandwidth to shared memory is now limited only by the TMA unit&#8217;s throughput, which the <strong>H100 documentation lists </strong>at approximately 900 GB/s aggregate (across all TMA units on all SMs). </p><p>This is below the HBM bandwidth of 3.35 TB/s, so for kernels that are<strong> purely bandwidth-limited </strong>(not compute-bound), TMA is not the constraint; HBM is. </p><p>For compute-bound kernels with large tiles, TMA&#8217;s instruction offloading is what enables the SMSP to run WGMMA at full throughput.</p><div><hr></div><h2>A Brief Look at Blackwell</h2><p>Blackwell (SM100, B100/B200) was announced in March 2024 and began shipping to hyperscalers in late 2024. The architectural trajectory established by Hopper continues and accelerates.</p><p>The Blackwell tensor core introduces a <strong>5th generation MMA</strong> with FP4 support (MXFP4 and NF4 formats), enabling 20 PFLOP/s peak at the full B200 system level (dual-die). The FP8 dense throughput is approximately 9 PFLOP/s per chip.</p><p>TMA on Blackwell gains native support for <strong>im2col</strong> pattern transforms (relevant for convolutions) and <strong>transposed stores</strong>, reducing the need for separate transpose kernels.</p><p>The cluster size limit increases to 16 CTAs (from 8 on Hopper), further amortizing B tile loads across more compute.</p><p>A new <strong>fifth-generation NVLink</strong> provides 1.8 TB/s bidirectional bandwidth per GPU in NVLink-connected systems (NVL72 rack), enabling multi-GPU kernels where the &#8220;global memory&#8221; seen by a TMA operation is distributed across 72 GPUs. This is the level at which the distinction between a single-GPU kernel and a distributed compute graph begins to blur.</p><p>CUTLASS 3.x supports Blackwell through new <strong>SM100 collective templates.</strong> The programming model is the same; the numbers are larger.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Conclusion</h2><p>The trajectory from <strong>Volta </strong>through Ampere to <strong>Hopper </strong>is a coherent story: every generation pushes more of the data movement machinery off the SMSP and onto dedicated hardware. </p><p><strong>Volta</strong> gave you tensor cores, so the SMSP stopped doing the arithmetic. Ampere gave you <code>cp.async</code>, so the SMSP stopped waiting for loads. Hopper gave you TMA, so the SMSP stopped issuing loads entirely.</p><p>The SMSP on a <strong>well-tuned Hopper GEMM kernel</strong> is a machine that does one thing: issue <code>WGMMA.MMA_ASYNC</code>. Everything else has been delegated.</p><p>This is not an accident. It is the logical endpoint of the observation that matrix multiply is the kernel that matters most for <strong>modern ML workloads,</strong> and the most efficient hardware for matrix multiply is hardware where the compute units are never idle. </p><p>Every <strong>architectural innovation</strong> from 2017 onwards has been an attack on a different reason why the compute units were idle: arithmetic latency (tensor cores), memory latency (cp.async), instruction bandwidth (TMA), <strong>inter-SM bandwidth </strong>(clusters, NVLink).</p><p>The mbarrier, the<strong> tensor descriptor,</strong> the warpgroup specialization, the producer-consumer pipeline, the tile scheduler: these are not ornamental complexity. </p><p>They are the mechanisms by which a 2024 GPU running a <strong>2024 kernel achieves 80-90% of theoretical peak</strong> on matrix multiply, a number that would have seemed implausible to practitioners writing hand-tuned BLAS routines a decade ago.</p><p>Part IX will step back from the single-GPU picture and look at multi-GPU parallelism: tensor parallelism, <strong>pipeline parallelism</strong>, NCCL, and the question of how <strong>NVLink bandwidth</strong> interacts with the per-GPU compute performance we have spent eight parts building up. </p><p>The tools change; the principle does not: find the bottleneck, route around it, measure again.</p>]]></content:encoded></item><item><title><![CDATA[Mastering CUDA and High-Performance Computing, Part VII]]></title><description><![CDATA[A Deep Dive from Compiler Internals to High-Performance Parallel Computing]]></description><link>https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-ea1</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-ea1</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Fri, 27 Mar 2026 17:53:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5Sno!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Sno!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Sno!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!5Sno!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!5Sno!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!5Sno!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Sno!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2665470,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/191312572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5Sno!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!5Sno!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!5Sno!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!5Sno!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8415ac6-79d2-4b69-9c66-afb888d7a6ba_1024x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Where Part VI Left Us</h2><p>Part VI ended with a sentence that deserves to be unpacked:</p><blockquote><p><em>cp.async instructions do not set the long scoreboard. </em></p><p><em>The register file is not involved, so no register&#8217;s bit is marked pending. </em></p><p><em>The SMSP issues the cp.async, the copy engine takes it, and the SMSP is immediately free to issue the next instruction for that warp.</em></p></blockquote><p>This is <strong>not a minor optimization note</strong>. </p><p>It is a description of a fundamentally different <strong>execution model</strong>: one that requires you to abandon the mental model of &#8220;<em>instruction issues, result arrives, next instruction proceeds</em>&#8221;, and replace it with something more like a production pipeline in a factory: </p><p><strong>stages overlap</strong>, buffers exist between them, and throughput is determined by the slowest stage, not the sum of all stage latencies.</p><p>Before we can make<code> cp.async</code> do useful work, we need an accurate model of what it is hiding from: the <strong>memory hierarchy.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The Memory Hierarchy of the A100</h2><p>The <strong>A100 SXM4 </strong>has six levels of memory that matter to kernel programmers. They are not equally documented, and the numbers in marketing materials are frequently not the numbers in production code.</p><h3>Registers</h3><p>Each SM on Ampere has a 256 KB register file, shared across the four SMSPs: <strong>64 KB per SMSP</strong>, with a 256-bit read port per cycle. </p><p>Register file access latency is effectively 0 cycles in the bypass case; for non-bypassed reads the cost is absorbed into the <strong>4-cycle FMA pipeline. </strong>Registers are not a latency source. They are a capacity and bandwidth source.</p><p>The capacity limit is the one that matters: each thread can use at most 255 registers. </p><p>Pressure above this causes the compiler to spill values to local memory; a per-thread private region mapped to <strong>L1/L2/DRAM</strong>. </p><p>Spills are indistinguishable from any other global memory access at the hardware level: they go through the <strong>MIO unit</strong>, set the long scoreboard, and wait 400+ cycles for DRAM. Every spilled register costs two MIO operations.</p><h3>Shared Memory / L1 Cache</h3><p>Ampere&#8217;s per-SM L1 is a <strong>192 KB pool</strong> partitioned between shared memory and the hardware L1 data cache. </p><p>The split is configurable <em>(0/192, 32/160, 64/128, 100/92, 132/60, 160/32 (shared/cache, in KB))</em> via <code>cudaFuncSetAttribute</code> with <code>cudaFuncAttributePreferredSharedMemoryCarveout</code>.</p><p>Shared memory has 32 banks, each 4 bytes wide. </p><p><strong>Bank index </strong>for a byte address:</p><pre><code><code>bank = (address &gt;&gt; 2) &amp; 31</code></code></pre><p><strong>Access patterns</strong> where multiple threads in a warp access different addresses in the same bank serialize. </p><p>One 4-bank conflict causes <strong>4&#215; the latency </strong>of the conflict-free case. The conflict-free latency is approximately 23 cycles; a 4-bank conflict extends this to ~35 cycles; an 8-bank conflict to ~51 cycles. The penalty scales linearly.</p><p>The<strong> broadcast exception</strong>: if all threads in a warp access the <em>exact same address</em> within a bank, the hardware services this as a single read and broadcasts the result. </p><p><strong>Thirty-two threads</strong> accessing thirty-two <em>different</em> addresses that all map to the same bank is not a broadcast. It is a 32-way serialization.</p><h3>L2 Cache</h3><p>The A100 has 40 MB of L2 cache, split into two 20 MB slices. L2 hit latency: approximately <strong>180&#8211;200 cycles</strong>, higher than most documentation implies. </p><p>Accesses to the local slice are <strong>~160&#8211;180 cycles</strong>; accesses to the remote slice (requiring crossbar traversal) are ~200&#8211;230 cycles.</p><p>L2 bandwidth is approximately 4 TB/s aggregate. The ratio of <strong>L2 bandwidth </strong>to<strong> HBM bandwidth </strong>is approximately 15:1. Fitting a working set in L2 is qualitatively different from spilling it to HBM.</p><h3>HBM2e</h3><p>The A100 SXM4 has <strong>six HBM2e stacks</strong> providing a peak theoretical bandwidth of 2 TB/s. In practice: a kernel with access pattern regularity sufficient to saturate all channels achieves 1.6&#8211;1.9 TB/s. </p><p>Irregular access patterns with row buffer conflicts: <strong>800 GB/s&#8211;1.2 TB/s. </strong>Random byte-granularity reads: tens of GB/s, due to cache line waste.</p><p><strong>HBM2e latency</strong>, measured with L1 and L2 bypassed: approximately <strong>450&#8211;600 cycles at 1410 MHz.</strong> Row buffer hits land around 300&#8211;350 cycles; misses around 550&#8211;650 cycles.</p><p>The consequence at 1410 MHz:<strong> 500 cycles &#215; 0.71 ns/cycle &#8776; 355 nanoseconds</strong> of stall per warp. In that window, 500 instruction issue slots across the SM go dark. </p><p>If every resident warp has issued an<strong> HBM load</strong> and is waiting, you have a 500-cycle stall with no eligible warp to rescue you. </p><p>This is the <strong>memory wall</strong> in concrete form. The solution is not a faster memory: it is to restructure data movement so that <strong>HBM latency</strong> is overlapped with computation.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The cp.async Instruction</h2><p><code>cp.async</code> was introduced in <strong>Ampere (sm_80)</strong>. It performs a direct DMA-like transfer from global memory to shared memory, bypassing the register file entirely:</p><pre><code><code>cp.async.ca.shared.global [dst], [src], size;
cp.async.cg.shared.global [dst], [src], size;   // bypass L1</code></code></pre><p>The <code>size</code> parameter is 4, 8, or 16 bytes. The 16-byte variant is the most important: it issues a <strong>vectorized LDG.128,</strong> achieving maximum memory interface utilization.</p><h3>What &#8220;bypassing the register file&#8221; actually means</h3><p>The conventional load path:</p><pre><code><code>LDG.128 R4, [R2]         ; &#8594; long scoreboard set for R4,R5,R6,R7
                         ; &#8594; warp stalls on any read of R4-R7
                         ; &#8594; 450-600 cycles later, HBM returns data
STS.128 [smem_ptr], R4   ; store registers &#8594; shared memory</code></code></pre><p>This requires <strong>4 registers</strong> in transit. The load sets four long scoreboard bits. The warp is ineligible for any instruction reading <strong>R4&#8211;R7 </strong>until the HBM transaction completes.</p><p>The<code> cp.async path:</code></p><pre><code><code>CP.ASYNC.CA.SHARED.GLOBAL [smem_dst], [R2], 0x10
; &#8594; no scoreboard bits set (no destination register)
; &#8594; warp immediately eligible to issue next instruction
; &#8594; data arrives in shared memory asynchronously</code></code></pre><p>A dedicated <strong>Ampere Asynchronous Copy Engine</strong> receives the request via the MIO unit, takes ownership of the transaction, and performs the<strong> HBM load</strong> and shared memory write independently of the <strong>SMSP</strong>. The MIO unit is freed immediately after handoff.</p><h3>The commit/wait mechanism</h3><p><strong>Commit</strong> (<code>CP.ASYNC.COMMIT_GROUP</code>): marks all preceding cp.async instructions as a commit group. Bookkeeping only,does not wait for anything.</p><p><strong>Wait</strong> (<code>CP.ASYNC.WAIT_GROUP N</code>): stalls until at most N commit groups remain pending. <code>N=0</code> is complete synchronization. </p><p><code>N=1</code><strong> </strong>allows one in-flight group to remain outstanding while you compute on the previous.</p><pre><code><code>auto pipe = cuda::make_pipeline();

for (int i = 0; i &lt; BATCH_SIZE; i++)
    cuda::memcpy_async(smem[0][i], &amp;gmem[base + i], sizeof(float4), pipe);
pipe.producer_commit();

for (int i = 0; i &lt; BATCH_SIZE; i++)
    cuda::memcpy_async(smem[1][i], &amp;gmem[base + BATCH_SIZE + i], sizeof(float4), pipe);
pipe.producer_commit();

pipe.consumer_wait();   // CP.ASYNC.WAIT_GROUP 1
__syncthreads();        // mandatory: propagates visibility to all threads

compute(smem[0]);</code></code></pre><p>The <code>__syncthreads()</code> after <code>consumer_wait</code> is mandatory. <code>consumer_wait</code> ensures the data is in shared memory from the perspective of <em>this warp</em>. </p><p>Other warps in the thread block may not see the writes until <code>__syncthreads()</code> propagates them through the <strong>SM&#8217;s coherence domain</strong>. </p><p>Omitting it is a <strong>race condition</strong>: one that produces correct results most of the time and incorrect results unpredictably under heavy memory pressure.</p><div><hr></div><h2>The Double Buffer Pattern</h2><p>A standard tiled <strong>GEMM loop</strong> is fully sequential: load tile, sync, compute, sync, repeat. The timeline is a flat chain of dependencies. For smaller problems or thinner tiles where T_load / T_compute &gt; 1, the kernel is memory-bound.</p><p>The <strong>double buffer</strong> pattern breaks that chain:</p><pre><code><code>Iter k:   |-- cp.async A[k] --|-- cp.async B[k] --|-- commit --|
                                                                |-- wait(k-1) --|-- compute(k-1) --|
Iter k+1: |-- cp.async A[k+1] --|-- cp.async B[k+1] --|-- commit --|
                                                                    |-- wait(k) --|-- compute(k) --|</code></code></pre><p>Loads for iteration k+1 overlap with computation of iteration k. Memory latency is hidden as long as <code>T_load(k+1) &lt; T_compute(k)</code>. The pipeline then runs at the compute rate with zero memory stall.</p><p>This requires<strong> two ping-pong buffers</strong> in shared memory, doubling the shared memory requirement. </p><p><strong>Doubling shared memory </strong>per thread block halves the maximum resident thread blocks per SM, reducing occupancy. The trade-off is explicit and computable.</p><p><strong>Diagnostic signal</strong>: if <code>smsp__warp_issue_stalled_long_scoreboard.avg.pct_of_peak_sustained_active</code> exceeds 20%, memory latency is not being hidden. The first intervention is higher occupancy. </p><p>The second, when <strong>occupancy</strong> is already near maximum, is<code> cp.async</code> pipelining,  which removes the long scoreboard from the equation entirely.</p><div><hr></div><h2>The Full Kernel Pattern</h2><pre><code><code>constexpr int TILE_M = 128, TILE_N = 128, TILE_K = 32;
constexpr int NUM_STAGES = 2;

__global__ void gemm_async_kernel(
    const __nv_bfloat16* __restrict__ A,
    const __nv_bfloat16* __restrict__ B,
    float* __restrict__ C,
    int M, int N, int K
) {
    __shared__ __nv_bfloat16 smem_A[NUM_STAGES][TILE_M][TILE_K];
    __shared__ __nv_bfloat16 smem_B[NUM_STAGES][TILE_K][TILE_N];
    float acc[4][4] = {};

    auto pipe = cuda::make_pipeline();
    const int k_tiles = K / TILE_K;

    // PROLOGUE: issue tile 0 before the main loop
    if (k_tiles &gt; 0) {
        int row_a = threadIdx.x / TILE_K, col_a = threadIdx.x % TILE_K;
        if (row_a &lt; TILE_M)
            cuda::memcpy_async(&amp;smem_A[0][row_a][col_a],
                               &amp;A[(blockIdx.y * TILE_M + row_a) * K + col_a],
                               sizeof(__nv_bfloat16), pipe);
        pipe.producer_commit();
    }

    // MAIN LOOP
    for (int k = 1; k &lt; k_tiles; k++) {
        const int sw = k % 2, sr = (k - 1) % 2;

        int row_a = threadIdx.x / TILE_K, col_a = threadIdx.x % TILE_K;
        if (row_a &lt; TILE_M)
            cuda::memcpy_async(&amp;smem_A[sw][row_a][col_a],
                               &amp;A[(blockIdx.y * TILE_M + row_a) * K + (k * TILE_K + col_a)],
                               sizeof(__nv_bfloat16), pipe);
        pipe.producer_commit();

        pipe.consumer_wait();   // CP.ASYNC.WAIT_GROUP 1
        __syncthreads();

        for (int ki = 0; ki &lt; TILE_K; ki++)
            for (int i = 0; i &lt; 4; i++)
                for (int j = 0; j &lt; 4; j++)
                    acc[i][j] += __bfloat162float(smem_A[sr][threadIdx.y*4+i][ki])
                               * __bfloat162float(smem_B[sr][ki][threadIdx.x*4+j]);
        __syncthreads();
    }

    // EPILOGUE
    pipe.consumer_wait();   // CP.ASYNC.WAIT_GROUP 0
    __syncthreads();
}</code></code></pre><p>Three things to internalize about this structure:</p><p><strong>The prologue is not optional.</strong> Without issuing tile 0 before the loop, the first <code>consumer_wait</code> blocks on a commit group that doesn&#8217;t exist. Undefined behavior. The prologue establishes the &#8220;<em>one stage ahead</em>&#8221; invariant that the loop depends on.</p><p><strong>Both synchronization primitives are required.</strong> <code>consumer_wait</code> ensures the DMA engine has written the data to shared memory <em>for this warp</em>. <code>__syncthreads()</code> ensures all threads in the block have reached this point before any thread reads. </p><p>They solve different problems. Neither substitutes for the other.</p><p><strong>Stage read and stage write are never equal.</strong> The modular arithmetic guarantees <code>sw &#8800; sr</code> for <code>NUM_STAGES = 2</code>. The DMA engine writes to one buffer while threads read from the other. </p><p>With <code>NUM_STAGES &#8805; 3</code> you deepen the pipeline, more latency hidden, more shared memory consumed.</p><div><hr></div><h2>N-Stage Generalization</h2><p>With <strong>N stages</strong>, you issue <strong>N tiles&#8217;</strong> worth of cp.async before the first computation begins. The latency is hidden when <code>T_compute(tile) &gt; T_HBM_load / N</code>.</p><p>CUTLASS implements up to<strong> 5-stage pipelines</strong> for its Ampere GEMM kernels, with stage count as a compile-time template parameter swept by the profiler at tuning time. The shared memory cost scales linearly with stage count. </p><p>At some crossover point the <strong>shared memory requirement </strong>forces an occupancy reduction that exceeds the pipelining benefit. </p><p>This crossover depends on the specific kernel and problem size, which is why <strong>CUTLASS</strong> exposes the parameter rather than hardcoding it.</p><h4>What the Profiler Shows You</h4><p><strong>Before pipelining (conventional LDG loads):</strong></p><ul><li><p><code>smsp__warp_issue_stalled_long_scoreboard</code> &#8212; 40&#8211;70%, dominant stall</p></li><li><p><code>smsp__pipe_fma_cycles_active</code> &#8212; 30&#8211;60%, computation starved</p></li></ul><p><strong>After pipelining (cp.async, double buffer):</strong></p><ul><li><p><code>smsp__warp_issue_stalled_long_scoreboard</code>. &lt;5%, cp.async sets no scoreboard bits</p></li><li><p><code>smsp__pipe_fma_cycles_active</code>. 70&#8211;90% for a well-tuned kernel</p></li><li><p>Watch for <code>smsp__warp_issue_stalled_mio_throttle</code>; if you issue cp.async faster than the MIO unit can service them (~1 per 4 cycles per SMSP for 128-bit transfers), this stall replaces the scoreboard stall. </p><p>The fix is larger tiles or accepting the throttle if MIO throughput still exceeds compute throughput.</p></li></ul><div><hr></div><h2>Bank Conflicts</h2><p>The 32-bank model is documented. The practical implications for <strong>matrix access patterns </strong>are not.</p><p>In a <strong>tiled GEMM</strong>, tile A is loaded into shared memory in row-major layout, then read column-wise during the multiply. </p><p>For <strong>TILE_K</strong> = 32 and BF16 elements (2 bytes each), element <code>[j][i]</code> sits at byte offset <code>j &#215; 64 + i &#215; 2</code>. Bank index: <code>(j &#215; 16 + i/2) &amp; 31</code>.</p><p>For a <strong>warp reading column</strong> <code>i</code> (<code>i</code> fixed, <code>j</code> running 0..31) every pair of threads maps to the same bank. This is a 2-way bank conflict on every column read.</p><p>The fix is padding:</p><pre><code><code>__shared__ __nv_bfloat16 smem_A[TILE_M][TILE_K + 2];   // +2 BF16 = +4 bytes per row</code></code></pre><p>With the pad, element <code>[j][i]</code> is at byte offset <code>j &#215; 68 + i &#215; 2</code>. Bank index: <code>(j &#215; 17 + i/2) &amp; 31</code>. Since <code>gcd(17, 32) = 1</code>, the bank indices as <code>j</code> runs 0..31 form a complete permutation of 0..31. <strong>Zero conflicts.</strong> </p><p>The shared memory overhead is <code>TILE_M &#215; 4</code> bytes per buffer: 512 bytes for TILE_M = 128, trivial against the 8 KB tile.</p><p><strong>CUTLASS&#8217;s Swizzle technique </strong>achieves the same result via address bit permutation rather than linear padding, which handles non-power-of-two tile sizes cleanly. </p><p>The arithmetic underneath is identical.</p><h3>L1 Cache Policy</h3><p>Cache behavior on <strong>Ampere</strong> is configurable at the instruction level:</p><p>Qualifier Behavior <code>LDG.CA</code> Cache in L1 (default) <code>LDG.CG</code> Bypass L1, go to L2 <code>LDG.CS</code> Streaming: insert at LRU position <code>LDG.CV</code> Bypass all caches (almost never correct)</p><p>In <strong>CUDA</strong>: <code>__ldg()</code> for L1-cached, <code>__ldcg()</code> / <code>__ldcs()</code> for the bypass variants. The compiler defaults to <code>LDG.CA</code> when uncertain.</p><p>For kernels that process each input element exactly once, elementwise operations, reductions, anything with no reuse, <code>__ldcg()</code> eliminates <strong>L1 pollution</strong> and preserves L1 capacity for data that does benefit from caching. </p><p>The effect in the profiler: lower L1 hit rate, <strong>unchanged L2 hit rate</strong>. The data skips one cache level without reducing effective bandwidth at the level where reuse actually exists.</p><h3>The Roofline Model</h3><p>The roofline model (Williams, Waterman, Patterson, 2009) plots <strong>FLOP/s against arithmetic</strong> intensity (FLOP/byte of DRAM traffic). For the A100 in FP32:</p><ul><li><p><em>Peak compute: ~19.5 TFLOP/s</em></p></li><li><p><em>Peak HBM bandwidth: ~2 TB/s</em></p></li><li><p><em>Ridge point: ~9.75 FLOP/byte</em></p></li></ul><p>Below the ridge: memory-bound. Above: compute-bound. The common mistake is treating<strong> DRAM bandwidth</strong> as the only line that matters. </p><p>The L2-based roofline has a ridge at ~4.9 FLOP/byte. The L1-based roofline has a ridge at ~1 FLOP/byte.</p><p>A kernel with <strong>strong L1 reuse</strong> can be compute-bound at an arithmetic intensity that looks memory-bound on the DRAM roofline. </p><p>A kernel that thrashes L2 will underperform the DRAM roofline because its effective bandwidth is below the theoretical peak. <strong>NCU&#8217;s roofline </strong>chart shows all three simultaneously.</p><p>The correct first diagnostic is hierarchical<strong> bandwidth analysis</strong>. Not &#8220;it&#8217;s memory-bound&#8221;; that&#8217;s a category. </p><p>The useful diagnosis is &#8220;<em>it&#8217;s memory-bound at the L2 level, achieving 60% of L2 peak, because 40% of L2 bandwidth is wasted on non-reused data evicted before second use.</em>&#8221; That tells you the fix.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The Tensor Memory Accelerator</h2><p>Ampere introduced cp.async. Hopper (sm_90, H100) introduced the <strong>Tensor Memory Accelerator (TMA)</strong>, the same idea taken to its logical conclusion.</p><p>With cp.async, the programmer still computes every element&#8217;s <strong>global memory address </strong>and constructs the instruction stream. </p><p>For a 128&#215;128 BF16 tile, that is<strong> 512 vectorized</strong> 128-bit cp.async instructions consuming SMSP instruction bandwidth, even though the transfers are asynchronous.</p><p>TMA accepts a tensor descriptor (base address, dimensions, strides, element type) and issues a single instruction:</p><pre><code><code>cp.async.bulk.tensor.2d.shared::cluster.global.mbarrier::complete_tx::bytes
    [smem_dst], [gmem_desc, {coord_y, coord_x}], [mbar];</code></code></pre><p>One instruction. One<strong> 128&#215;128 BF16 tile.</strong> The TMA unit generates all the addresses, manages all the transactions, and signals completion via the <code>mbarrier</code> primitive; </p><p>a synchronization mechanism lighter than <code>__syncthreads()</code>, designed for producer-consumer coordination without a full SM barrier.</p><p>The consequence: on Hopper, the <strong>compute-to-load instruction ratio</strong> in a GEMM inner loop approaches &#8734; from the SMSP&#8217;s perspective. </p><p>The SMSPs run <code>wgmma.mma_async</code> continuously; the TMA unit handles all data movement independently. <strong>CUTLASS 3.x</strong> is designed around this model. Part VIII will cover it in full.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Conclusion</h2><p>The line from <strong>Part VI, </strong><em>&#8220;the SMSP is immediately free to issue the next instruction for that warp&#8221;</em>, is the hinge on which this article turns.</p><p>The memory hierarchy imposes latencies that are not negotiable in nanoseconds: 23 cycles for shared memory, <strong>180 for L2, 500 for HBM</strong>. These numbers do not change by complaining about them. </p><p>They change by <strong>structuring code </strong>so that the latency is incurred before the result is needed: issuing the memory request while computing on previously loaded data.</p><p>cp.async is the mechanism. Software pipelining is the pattern. Double buffering is the minimum viable instance. The <strong>commit/wait protocol</strong> maintains correctness while the DMA engine and the compute engine run simultaneously.</p><p>The bank conflict analysis and the <strong>L1 bypass</strong> discussion are extensions of the same idea: <strong>minimize latency</strong> and maximize effective bandwidth at every level of the hierarchy, so that by the time data arrives at the computation, it has<strong> traveled through the hardware</strong> as efficiently as physics allows.</p><p>The limits of this approach on Ampere are what motivate <strong>TMA</strong> on <strong>Hopper: </strong>an architecture where the gap between what the programmer expresses and what the hardware executes narrows further, approaching the regime where the programmer describes <em>what</em> should move and the hardware decides <em>when</em>.</p><p><strong>Part VIII begins there.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-ea1?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-ea1?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Mastering CUDA and High-Performance Computing, Part VI]]></title><description><![CDATA[A Deep Dive from Compiler Internals to High-Performance Parallel Computing]]></description><link>https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-f02</link><guid isPermaLink="false">https://www.thesoftwarefrontier.com/p/mastering-cuda-and-high-performance-f02</guid><dc:creator><![CDATA[Lorenzo Bradanini]]></dc:creator><pubDate>Sun, 22 Mar 2026 09:15:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zwA0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zwA0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zwA0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!zwA0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!zwA0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!zwA0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zwA0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4291409,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/191590077?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zwA0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!zwA0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!zwA0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!zwA0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa736b8ce-69b2-47bd-988e-7f0c8336a4ff_1024x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Pipeline&#8217;s One Promise, and How It Fails</h2><p>The<strong> A100 SM</strong> runs at a base clock of approximately 765 MHz, boost to ~1410 MHz. At boost, one clock cycle is<strong> ~0.71 nanoseconds. </strong>The SM has four SMSPs. </p><p>Each <strong>SMSP </strong>has four warp schedulers (<em>confirmed in NVIDIA&#8217;s Ampere whitepaper and independently via microbenchmarks by Jia et al. and the work of Markidis, Larsson et al.</em>). </p><p>Each scheduler attempts to issue one instruction per cycle to one eligible warp.</p><p>At full throughput (all four schedulers in <strong>all four SMSPs</strong> issuing every cycle) a single A100 SM issues <strong>16 instructions per cycle</strong>. </p><p>Across 108 SMs at 1410 MHz, peak issue rate is roughly <strong>2.4 trillion instructions per second</strong>. This is the theoretical ceiling. You will never reach it. The question is why, and by how much.</p><p>An instruction issues in a given cycle when three conditions are simultaneously true:</p><ol><li><p><strong>The warp is eligible</strong>: it has been selected by the round-robin/priority scheduler, it is not stalled on a scoreboard dependency, and it has not exceeded the warp&#8217;s instruction buffer depth.</p></li><li><p><strong>The execution unit is available</strong>: the target pipe (FMA, SFU, MIO, LSU...) has a free slot.</p></li><li><p><strong>All operands are ready</strong>: every source register&#8217;s scoreboard bit has been cleared by its producing instruction.</p></li></ol><p>When any of these three conditions fails, the scheduler increments a stall counter and moves to another warp. </p><p>The beauty of the <strong>GPU microarchitecture</strong>, and the central insight of GPU optimization, is that condition (3) failing for warp A doesn&#8217;t stall the SM; it just causes the scheduler to attempt warp B instead. </p><p>The<strong> SM stalls</strong> only when <em>no</em> warp satisfies all three conditions simultaneously. That&#8217;s the failure mode we are trying to prevent.</p><p><code>ncu --metrics l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum</code> is how you measure condition (3) failures for memory. <code>smsp__warp_issue_stalled_*</code> counters measure them by category. </p><p>We will use both throughout.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>What lives inside one SMSP</h2><p>Before discussing stalls, you need an accurate map of what execution units exist and what their throughput and latency look like. </p><p>Much of the confusion in GPU optimization literature stems from people using &#8220;<strong>the FP32 pipe</strong>&#8221; as a monolith when it is not.</p><p>One Ampere SMSP contains, per NVIDIA&#8217;s Ampere Architecture whitepaper and corroborating microbenchmark work:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SsON!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SsON!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 424w, https://substackcdn.com/image/fetch/$s_!SsON!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 848w, https://substackcdn.com/image/fetch/$s_!SsON!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 1272w, https://substackcdn.com/image/fetch/$s_!SsON!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SsON!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png" width="919" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:919,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74614,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://softwarefrontier.substack.com/i/191590077?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd277843f-ea6d-4dcd-99c5-d7dc54570383_919x500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SsON!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 424w, https://substackcdn.com/image/fetch/$s_!SsON!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 848w, https://substackcdn.com/image/fetch/$s_!SsON!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 1272w, https://substackcdn.com/image/fetch/$s_!SsON!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b499ca-7fc9-445f-9651-6799a54b7136_919x500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A few notes on the accuracy of this table:</p><p>The <strong>FMA latency of 4 cycles</strong> is confirmed by the CUDA C Programming Guide and by numerous independent microbenchmarks. </p><p>It is not 1 cycle. It is not 2 cycles. It is 4, and every serial dependency chain in your kernel pays it in full.</p><p>The <strong>SFU latency of 16 cycles</strong> is confirmed by microbenchmarks. Throughput of 4 cycles/instruction means one MUFU occupies the single SFU for <strong>4 cycles</strong>; other warps&#8217; MUFU instructions queue behind it. </p><p>Since there is only <strong>one SFU per SMSP</strong> and the SMSP has 16 warps maximum, a warp issuing a MUFU must wait for the SFU to become free if another warp issued one within the last 4 cycles.</p><p>The <strong>FP64 throughput asymmetry</strong> is critical for A100 versus A30/A10 hardware: the <strong>A100</strong> has full-rate FP64 (2 cycles per DFMA per SMSP), while the A10 has 1/16th the FP64 throughput (DFMA at 32 cycles per instruction). </p><p>Running FP64 code on an <strong>A10</strong> is not slower: it is catastrophically slower. Verify your hardware before benchmarking.</p><p><strong>Shared memory load latency of 23 cycles</strong> is confirmed by microbenchmarks (<em>Luitjens</em> 2011, <em>Volkov</em> 2016, and more recently by <em>Yan et al.</em> in their SM scheduling simulator). </p><p>The <strong>official CUDA documentation</strong> says &#8220;~20 cycles&#8221; without precision; 23 cycles is the empirically correct number for Ampere under normal bank-conflict-free access.</p><p> With <strong>4-way bank conflicts</strong> the effective latency compounds because the MIO pipe is occupied for additional cycles while the bank serialization completes.</p><h3>The scoreboards in detail</h3><p>Each SMSP has two scoreboards, as described in <strong>Part V</strong>. Understanding their interaction with execution units is worth revisiting with more precision:</p><p><strong>Short scoreboard</strong>: covers arithmetic results from the FMA pipe, <strong>INT32 ALU</strong>, and SFU. Latency tracked: 4 cycles (FMA/INT32) and 16 cycles (SFU). The scoreboard has one bit per register per warp. </p><p>When an <strong>FFMA issues</strong> with destination R4, bit R4 for that warp is set in the short scoreboard. It is cleared 4 cycles later (for FMA results) by the pipeline&#8217;s bypass network. </p><p>An instruction in another warp that reads R4 of the issuing warp is unaffected: scoreboards are <strong>per-warp</strong>, not global.</p><p><strong>Long scoreboard</strong>: covers memory results: any instruction that issues to the <strong>MIO unit </strong>(loads from global/shared/local memory, atomic operations). </p><p>The long scoreboard bit is set when the load issues and is <strong>not cleared</strong> until the data physically arrives and is written to the register file. </p><p>For an HBM access this can be <strong>400+ cycles. </strong>The SMSP does not know in advance how long an HBM access will take (it depends on <strong>DRAM row buffer state</strong>, competing traffic, etc.); it just waits for the completion signal from the memory system.</p><p>An important subtlety: <code>cp.async</code> instructions <strong>do not set the long scoreboard</strong>. This is the mechanism by which they achieve asynchrony. </p><p>The register file is not involved, so no register&#8217;s bit is marked pending. </p><p>The SMSP issues the <code>cp.async</code>, the copy engine takes it, and the SMSP is immediately free to issue the next instruction for that warp. </p><p>We will return to the exact implications of this in future posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The SFU, quantified completely</h2><p>The <strong>Special Function Unit</strong> executes MUFU instructions. Let&#8217;s be more precise than &#8220;the SFU is slow.&#8221;</p><p>On Ampere, one SMSP has one SFU. The SFU pipeline is <strong>4 stages deep</strong>; this is why it has a 4-cycle throughput: one new instruction can enter the pipeline every 4 cycles (this is the initiation interval, II), and the result is available 16 cycles after issue (this is the latency, L = 4 &#215; II). </p><p>This is a <strong>reasonable structural design</strong> for a unit that computes hardware approximations to transcendentals: the underlying <strong>Newton-Raphson </strong>iterations take multiple stages.</p><p>The key distinction: <strong>throughput</strong> (4 cycles/instruction) limits how often you can <em>issue</em> MUFU instructions from the same SMSP. </p><p><strong>Latency</strong> (16 cycles) limits how soon a downstream instruction can <em>use</em> the MUFU result. </p><p>Both matter; they fail you in different scenarios.</p><h3>What MUFU opcodes actually compute</h3><p>MUFU is not one instruction. It is one instruction format with an operation selector.</p><p>The compiler maps <strong>standard C math</strong> functions to MUFU as follows. </p><p>This mapping is important because the additional <strong>FFMA instructions</strong> required for argument scaling and result scaling come for free (they don&#8217;t touch the SFU), but they do consume FP32 pipe cycles:</p><p><code>expf(x)</code><strong> &#8594; </strong><code>__expf(x)</code><strong> (with </strong><code>-use_fast_math</code><strong>):</strong></p><pre><code><code>// Argument reduction: convert from base-e to base-2
// exp(x) = 2^(x * log2(e)) = 2^(x * 1.44269504...)
FMUL   R1, R0, 1.44269502f          ; x * log2(e), FP32 pipe, 0.25 cycles throughput
MUFU.EX2  R2, R1                    ; 2^(x*log2e), SFU, 4 cycles throughput
</code></code></pre><p><code>expf(x)</code><strong> (IEEE-compliant, without fast-math):</strong></p><pre><code><code>// Range check and reduction (compiler-generated, varies)
FMNMX  R1, R0, 88.722839f, ...      ; clamp to avoid overflow  
FFMA   R2, R1, 1.44269502f, ...     ; argument reduction with correction term
MUFU.EX2  R3, R2                    ; core computation
FMUL   R4, R3, ...                  ; reconstruction (potentially)
// Plus additional corrections for subnormals, NaN, INF
</code></code></pre><p>The <strong>IEEE-compliant version </strong>may issue conditional branches for edge cases. When your kernel has inputs that might be NaN, INF, or very large/small, the compiler generates defensive code.</p><p> <code>__expf()</code> removes these guards entirely: it is <strong>undefined behavior for inputs outside [&#8722;87.3, 88.7]</strong> (the approximate FP32 range of exp before overflow/underflow). </p><p>If you know your <strong>inputs are bounded</strong>, and in softmax after max-subtraction they are, since all values are &#8804; 0,  <code>__expf()</code> is always the correct choice.</p><p><code>tanhf(x)</code><strong> (any mode):</strong></p><p>tanh has no single MUFU opcode. The compiler implements it using the identity: <code>tanh(x) = 1 - 2/(exp(2x)+1)</code>. </p><p>The resulting <strong>SASS</strong> (approximately, varies by compiler version) includes:</p><pre><code><code>FMUL   R1, R0, 2.0f                 ; 2x
FMUL   R2, R1, 1.44269502f          ; 2x * log2(e)
MUFU.EX2  R3, R2                    ; 2^(2x * log2e) = exp(2x)
FADD   R4, R3, 1.0f                 ; exp(2x) + 1
MUFU.RCP  R5, R4                    ; 1/(exp(2x)+1)
FMUL   R6, R5, 2.0f                 ; 2/(exp(2x)+1)
FADD   R7, -R6, 1.0f                ; 1 - 2/(exp(2x)+1) = tanh(x)
</code></code></pre><p>That&#8217;s <strong>two MUFU instructions</strong> (one EX2, one RCP) per <code>tanhf</code> call;  8 cycles of SFU pipe occupied per call in throughput terms. </p><p>For GELU, which uses <code>tanhf</code> internally (the fast approximation <code>0.5x(1+tanh(&#8730;(2/&#960;)(x+0.044715x&#179;)))</code>), you have additional FFMAs on top.</p><p><strong>GELU</strong> activation in a fused kernel is expensive in SFU terms, which is one motivation for the simpler SiLU activation (<code>x * &#963;(x) = x / (1 + exp(-x))</code>): it requires one MUFU.EX2 plus a few FMAs versus two MUFUs for tanh.</p><h3>Throughput model for an SFU-bottlenecked loop</h3><p>Suppose your <strong>kernel&#8217;s inner loop body</strong>, after compilation, contains:</p><ul><li><p>1&#215; MUFU.EX2 (4-cycle throughput, SFU pipe)</p></li><li><p>3&#215; FFMA (0.25-cycle throughput each, FMA pipe)</p></li><li><p>2&#215; FADD (0.25-cycle throughput each, FMA pipe)</p></li><li><p>1&#215; LDS (shared memory load, ~1-cycle throughput assuming no bank conflict)</p></li></ul><p>Total FMA pipe demand: 5 &#215; 0.25 = <strong>1.25 cycles</strong><br>Total SFU pipe demand: 1 &#215; 4.0 = <strong>4.0 cycles</strong><br>Total MIO demand: 1 &#215; ~1.0 = <strong>~1.0 cycles</strong></p><p>The SFU is the bottleneck: the loop cannot issue faster than <strong>4.0 cycles per iteration</strong>. </p><p>The FMA pipe is occupied 1.25/4.0 = <strong>31% of the time</strong>. The remaining 69% of FMA pipe capacity is wasted, waiting for the SFU to finish so the next iteration can begin.</p><p>You can fill this gap in two ways: <strong>more ILP within the loop</strong> (unroll and issue multiple independent MUFU calls, keeping both the SFU and FMA pipe busier) or <strong>replace MUFU with FMA-pipe arithmetic</strong>. </p><p>The first approach doesn&#8217;t change the SFU ceiling; it just makes better use of the FMA pipe in parallel. </p><p>The second moves the ceiling.</p><h3>Polynomial exp replacement: the real implementation</h3><p>The &#8220;<em>4th order polynomial</em>&#8221; approach described in the previous version of this article is plausible but underspecified. </p><p>Here is a properly validated implementation using a <strong>piecewise approach</strong> compatible with softmax use cases:</p><pre><code><code>// Fast exp2f approximation &#8212; pure FP32, no SFU
// Maps to ~6 FFMAs in SASS
// Valid for x &#8712; [-126, 127] (FP32 normal range for 2^x)
// Error: &lt; 2^-23 relative for x &#8712; [-16, 16] (sufficient for softmax)
__device__ __forceinline__ float fast_exp2f_fma(float x) {
    // Decompose x = n + f where n is integer, f &#8712; [-0.5, 0.5]
    float n = __float2int_rn(x);      // round to nearest int &#8212; FMUL-based  
    float f = x - n;                  // fractional part

    // Minimax polynomial for 2^f over [-0.5, 0.5]
    // Coefficients: Sollya minimax degree-4 in Horner form
    // 2^f &#8776; 1 + f*(0.693147 + f*(0.240227 + f*(0.055504 + f*0.009618)))
    float p = 0.009618f;
    p = fmaf(p, f, 0.055504f);
    p = fmaf(p, f, 0.240227f);
    p = fmaf(p, f, 0.693147f);
    p = fmaf(p, f, 1.0f);             // 2^f approximation

    // Reconstruct 2^x = 2^n * 2^f via integer exponent manipulation
    // Pack n into FP32 exponent bits: (int)(n + 127) &lt;&lt; 23
    int e = __float2int_rn(n) + 127;
    float scale = __int_as_float(e &lt;&lt; 23); // exact power of 2, no error

    return p * scale;
}

// For expf(x): expf(x) = exp2f(x * log2(e))
__device__ __forceinline__ float fast_expf_fma(float x) {
    return fast_exp2f_fma(x * 1.4426950408889634f);
}</code></code></pre><p>SASS output for <code>fast_expf_fma</code>: approximately 8 FFMAs, 1 F2I, 1 I2F, 1 integer SHL, 1 FMUL. No MUFU. </p><p>Throughput: ~2&#8211;2.5 cycles per call on the FMA pipe. Versus MUFU.EX2 at 4 cycles: a genuine <strong>1.6&#8211;2&#215; throughput improvement</strong> for softmax inner loops on Ampere.</p><p>The catch: verify SASS output yourself. The compiler has latitude with <code>__int_as_float</code> and <code>__float2int_rn</code>. </p><p>Confirm with <code>nvdisasm</code> that no MUFU instructions appear in the compiled output.</p><h3>Measuring SFU utilization precisely</h3><p>The two relevant Nsight Compute metrics:</p><pre><code><code>smsp__pipe_fma_cycles_active.avg.pct_of_peak_sustained_active
smsp__pipe_xu_cycles_active.avg.pct_of_peak_sustained_active
</code></code></pre><p>On an <strong>SFU-bottlenecked kernel</strong>, <code>xu</code> (XU = execution unit, NVIDIA&#8217;s internal name for the SFU pipe) will be near 100% and <code>fma</code> will be proportionally lower. </p><p>The ratio <code>xu_cycles / fma_cycles</code> tells you the SFU/FMA throughput imbalance directly.</p><p>Also useful: <code>smsp__average_warp_latency_per_inst_executed.ratio</code>; if this is high while <code>xu_cycles_active</code> is also high, the warp latency is being driven by MUFU&#8217;s 16-cycle result latency, not just its 4-cycle throughput. </p><p>Both cost you, via different mechanisms.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thesoftwarefrontier.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>The L0 Instruction cache </h2><p>Each SMSP on Ampere has a <strong>dedicated 32 KB L0 instruction cache</strong> (also referred to as the I-cache in some microarchitecture literature). </p><p>This is <strong>physically separate </strong>from the unified L1 data/shared memory: it is not carved from the 192 KB L1 pool. </p><p>The <strong>L0 is private</strong> to each SMSP; four SMSPs per SM means four independent L0 caches per SM.</p><p>Instructions on Ampere are 128 bits (16 bytes) wide. The L0 holds 32 KB / 16 B = <strong>2048 instructions</strong>. </p><p>A typical kernel loop body of 100&#8211;300 instructions fits comfortably; the L0 warms up on the <strong>first iteration</strong> and subsequent fetches are essentially free (one cycle or less).</p><p>The exception: kernels generated from heavily templated <strong>C++ code</strong> (think Thrust or hand-unrolled matrix multiplication with large tile sizes) can have loop bodies exceeding 500&#8211;1000 instructions. </p><p>A kernel that fully unrolls a <strong>256-wide loop body</strong> with 8 FMAs per iteration emits 2048 instructions for that loop; exactly filling the L0 and leaving nothing for the rest of the kernel. </p><p>Add one more instruction and you start thrashing.</p><p>When the L0 misses, the SMSP must fetch from L1 <strong>instruction cache</strong> (shared with data traffic, with associated latency) or, worse, from L2. </p><p>L1 instruction fetch latency is approximately 20&#8211;30 cycles. The miss is captured by:</p><pre><code><code>smsp__pcsamp_warps_issue_stalled_imc_miss.sum</code></code></pre><p>Values above 2% indicate a structural code-size problem. Values above 10% are severe.</p><p>There is no runtime mechanism to manage L0 occupancy. The only intervention is <strong>compile-time code size reduction</strong>:</p><ul><li><p>Replace <code>#pragma unroll N</code> with smaller N or <code>#pragma unroll 1</code> for large N</p></li><li><p>Mark non-critical helper functions with <code>__noinline__</code></p></li><li><p>Split large kernels into kernel launch sequences (costs launch overhead; evaluate the trade-off)</p></li><li><p>Use <code>--maxrregcount</code> to limit register count, which sometimes causes the compiler to generate shorter instruction sequences</p></li></ul><h3>Instruction decode bandwidth</h3><p>Decoded instructions are held in per-warp instruction buffers before issue. </p><p>On Ampere, these buffers are approximately <strong>2 entries deep per warp</strong> (this is not officially documented; it is reverse-engineered from microbenchmarks. </p><p>Specifically, from observing that back-to-back dependent instructions with <strong>1-cycle-latency arithmetic</strong> <strong>operations</strong> still issue without stall, implying at least 2-deep pre-decoding).</p><p>The decoder can process approximately <strong>1 instruction per cycle per SMSP</strong> (across all warps). </p><p>This exceeds the issue rate for any single warp (maximum 1 instruction every 4 cycles for a compute-bound warp at peak), so the decoder runs ahead and the per-warp instruction buffer is almost always populated.</p><p>The <strong>pathological case</strong>: a kernel at very high occupancy (32 warps per SMSP, the A100 maximum) with a simple loop body of 3 instructions (say, a vectorized element-wise operation: LDG.128, FFMA.x4, STG.128). </p><p>All 32 warps are eligible every cycle. The decoder must keep all 32 instruction buffers populated. </p><p>At <strong>1 decode per cycle</strong> and 32 warps each needing fresh instructions, the decoder is stretched. </p><p>If the instruction stream is not in L0 (forcing L1 fetch at 20+ cycle latency), the buffers drain and the schedulers stall even though 32 eligible warps exist.</p><p>This is rare but real. It manifests as a high <code>smsp__pcsamp_warps_issue_stalled_imc_miss</code> combined with near-100% occupancy; </p><p>confusing until you understand that 32 resident warps generates 32&#215; the instruction fetch pressure of 1 warp.</p><div><hr></div><h2>Predicated execution</h2><p>Each thread on Ampere has <strong>7 predicate registers</strong> (P0 through P6). </p><p>These are separate from the 255 available scalar registers (R0&#8211;R254, with R255 reserved as the zero register). </p><p>Predicate registers are<strong> 1-bit values</strong> set by comparison instructions:</p><pre><code><code>// Source: if (a &gt; b) { ... }
FSETP.GT.AND P0, PT, R0, R1, PT   ; set P0 = (R0 &gt; R1), unconditional (PT = true predicate)</code></code></pre><p><code>FSETP.GT.AND P0, PT, R0, R1, PT</code> reads as: &#8220;set predicate P0 to (R0 &gt; R1) AND PT, and set the complement predicate (implicit) to the inverse, and all of this unconditionally (final PT).&#8221; </p><p>The <strong>AND/OR suffix </strong>specifies the combining mode for nested predicate logic. </p><p>This instruction issues on the FP32 pipe, costs 4-cycle latency, and produces a predicate bit, not a register value.</p><p>An instruction with a predicate prefix:</p><pre><code><code>@P0    FFMA  R3, R1, R2, R3    ; execute FFMA only if P0 is true
@!P0   FFMA  R5, R1, R2, R5   ; execute FFMA only if P0 is false</code></code></pre><p>The semantics at the hardware level: <strong>all lanes in the warp issue the instruction</strong>. The instruction traverses the pipeline. </p><p>When the result write-back occurs, it is gated by the predicate: lanes where the predicate is true write their result; lanes where it is false suppress the write-back.</p><p> No branch. No warp divergence. No reconvergence stack manipulation.</p><p>Consequence: predicated instructions consume <strong>throughput proportional to the total number of instructions</strong>, not proportional to the number of active lanes.</p><p> A 32-thread warp where 16 threads have P0=true and 16 have P0=false, executing <code>@P0 FFMA R3, R1, R2, R3</code>, consumes exactly the same FFMA pipe resources as all 32 threads having P0=true. </p><p>The 16 non-writing threads waste their execution slots.</p><p>This is the precise definition of &#8220;predicated execution trades throughput for divergence avoidance.&#8221;</p><h3>The compiler&#8217;s branch/predicate decision heuristic</h3><p>The CUDA compiler (nvcc, using the LLVM PTX backend) uses a cost model to decide between a BRA (branch) and predication. The model is approximately:</p><p><strong>Predication is chosen when:</strong></p><ul><li><p>The combined instruction count of both branch arms is &#8804; ~8&#8211;12 instructions total</p></li><li><p>OR the divergence probability is estimated to be high (many warps will have mixed predicate values)</p></li><li><p>OR the branch target is not cache-resident (branch prediction overhead is higher)</p></li></ul><p><strong>Branch is chosen when:</strong></p><ul><li><p>One arm is long (&gt; ~6 instructions) and the other is short</p></li><li><p>The compiler can estimate that the majority of warps will take one branch uniformly</p></li><li><p>The branch condition is amenable to warp-uniform evaluation (all threads agree)</p></li></ul><p>The threshold is <strong>not a hard constant</strong>: it depends on the compiler version, optimization level, and the surrounding code structure. </p><p>The reliable way to check what the compiler chose is to inspect SASS:</p><pre><code><code># Disassemble a compiled kernel to SASS
nvdisasm --print-instruction-types mykernel.cubin | grep -E "BRA|@P[0-9]"</code></code></pre><p>Or, within Nsight Compute:<br><strong>Source</strong> tab &#8594; enable &#8220;Source Counters&#8221; &#8594; switch to &#8220;SASS&#8221; view &#8594; look for <code>@P0</code> prefixes versus <code>BRA</code> instructions in the hot loop.</p><h3>When to override the compiler&#8217;s choice</h3><p>The compiler is generally right. The cases where it is wrong:</p><p><strong>Case 1: Long rare branch incorrectly predicated.</strong> If your hot loop has a condition triggered 1% of the time (e.g., an overflow check, a boundary condition), and the expensive handler is 15 instructions, the compiler might still predicate if the loop body is otherwise short and the combined instruction count falls under the threshold. </p><p>But 15 instructions &#215; 32 threads &#215; 1% frequency = the equivalent of 0.15 &#215; 32 = ~5 instructions of wasted throughput per loop iteration, running at full throughput instead of 1% of it. Branch would cost nothing for the 99% case.</p><p>Fix: restructure the code to make the &#8220;expensive&#8221; path obviously large and separated: e.g., a function call rather than inlined code, which the compiler treats as a definite branch site.</p><p><strong>Case 2: Warp-uniform condition incorrectly compiled as branch.</strong> If every thread in a warp evaluates the same condition (e.g., based on <code>blockIdx.x</code> or a value loaded from constant memory that all threads share), the warp takes the branch uniformly and pays zero divergence cost.</p><p> The compiler sometimes generates a branch here and sometimes predicates. When the branch is warp-uniform and the body is long, you want a branch (all threads skip the long body together); predication would execute the long body for all threads on every iteration.</p><p>You can encourage warp-uniform branch treatment by computing the predicate with <code>__all_sync(__activemask(), condition)</code> when you know it&#8217;s warp-uniform &#8212; this makes the intent explicit.</p><div><hr></div><h2>Conclusion </h2><p>Predication is not a free lunch, and it is not free branching. </p><p>It is a <strong>specific trade</strong>: you pay throughput for all threads to avoid the divergence tax of splitting and reconverging a warp. </p><p>That trade is profitable when the branch body is short and divergence is likely. </p><p>It is catastrophically unprofitable when the <strong>branch body</strong> is long and most threads would have skipped it entirely.</p><p>The compiler&#8217;s heuristic gets this right most of the time, because most conditionals in well-written kernels are short. </p><p>The cases where it fails: a rare overflow handler that gets predicated, a warp-<strong>uniform load flag</strong> that gets branched,  are invisible at the source level and only show up as unexplained throughput loss in the profiler. </p><p>The smsp__warp_issue_stalled_not_selected stall counter rising without a corresponding increase in occupancy is one signal; <strong>anomalously low FMA pipe </strong>utilization relative to the instruction count is another.</p><p>The discipline is the same as everywhere else in this series: don&#8217;t assume the compiler made the optimal choice. </p><p>Inspect the SASS, verify the @P prefixes are where you expect them and absent where you don&#8217;t, and use __all_sync to make <strong>warp-uniform conditions</strong> structurally explicit rather than relying on the compiler to infer them. </p><p>A predicate register costs nothing. A 15-instruction predicated block running at full throughput for <strong>99% of warps</strong> that didn&#8217;t need it costs exactly as much as running it unconditionally; which is, in fact, what you did.&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thesoftwarefrontier.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Software Frontier! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>