[{"data":1,"prerenderedAt":1859},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark":70,"posts":553,"blog-list-\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark":647,"chart-gpu-unlock\u002Ftensor-hive":676,"chart-gpu-unlock\u002Fthe-run":774,"chart-gpu-unlock\u002Fwhat-decides-the-gain":858,"chart-gpu-unlock\u002Fsame-model-pairs":1105,"chart-gpu-unlock\u002Frender-race":1153,"chart-gpu-unlock\u002Fprefill-vs-decode":1252,"chart-gpu-unlock\u002Ftime-to-first-token":1342,"chart-gpu-unlock\u002Fcontext-depth":1422,"chart-gpu-unlock\u002Fevery-model":1501,"chart-gpu-unlock\u002Fenergy-vs-speed":1689,"chart-gpu-unlock\u002Fpower-curve":1792},[4],{"title":5,"path":6,"stem":7,"children":8,"page":69},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65],{"title":10,"path":11,"stem":12},"My First Local AI Model Was an Autocomplete Server. Its Last Customer Was an AI Agent.","\u002Fblog\u002Fautocomplete-retired","blog\u002Fautocomplete-retired",{"title":14,"path":15,"stem":16},"I Gave an AI Agent the Keys to Navisworks, and Five Trades of Takeoff Took Four Days","\u002Fblog\u002Fautomated-bim-takeoff","blog\u002Fautomated-bim-takeoff",{"title":18,"path":19,"stem":20},"I Benchmarked Nine Models to Spec a Four-GPU Node. Every Single Number Crowned the Wrong Winner.","\u002Fblog\u002Fblackwell-bakeoff","blog\u002Fblackwell-bakeoff",{"title":22,"path":23,"stem":24},"Chart Gallery","\u002Fblog\u002Fchart-gallery","blog\u002Fchart-gallery",{"title":26,"path":27,"stem":28},"On an EPC Job, 'Sure, No Problem' Is the Most Expensive Sentence Onsite. An Agent Would Have Checked the Contract First.","\u002Fblog\u002Fconstruction-agents","blog\u002Fconstruction-agents",{"title":30,"path":31,"stem":32},"I Run AI Agents Around the Clock and My Best Productivity Tool This Year Has No Battery","\u002Fblog\u002Fde-digitizing","blog\u002Fde-digitizing",{"title":34,"path":35,"stem":36},"I Built a Bot Army to Attack My Own Game Server, and 45 of Them Took It Down","\u002Fblog\u002Fgame-server-scaling","blog\u002Fgame-server-scaling",{"title":38,"path":39,"stem":40},"NVIDIA Sold Me Half of My Tensor Cores","\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark","blog\u002Fgpu-unlock-rtx-3090-benchmark",{"title":42,"path":43,"stem":44},"I Chased Four Benchmark Points and Almost Missed the Model That's Twice as Fast","\u002Fblog\u002Flocal-ai-moe-vs-dense","blog\u002Flocal-ai-moe-vs-dense",{"title":46,"path":47,"stem":48},"I Spent $5K on GPUs Just to Learn That One GPU Was Enough","\u002Fblog\u002Flocal-ai-rig","blog\u002Flocal-ai-rig",{"title":50,"path":51,"stem":52},"I Billed Myself for 6.7 Billion Tokens and the Total Came Out to $35.85","\u002Fblog\u002Flocal-ai-true-cost","blog\u002Flocal-ai-true-cost",{"title":54,"path":55,"stem":56},"I Spent a Saturday Trying to Replace My Local AI to Save on Tokens. The Server Voted No.","\u002Fblog\u002Flocal-ai-upgrade","blog\u002Flocal-ai-upgrade",{"title":58,"path":59,"stem":60},"Building a Roguelike Game with Amazon Q","\u002Fblog\u002Fq-roguelike","blog\u002Fq-roguelike",{"title":62,"path":63,"stem":64},"I Spent 22 Years Programming Just to Fail at Making a Skeleton Swing a Sword","\u002Fblog\u002Fthundoria-architecture","blog\u002Fthundoria-architecture",{"title":66,"path":67,"stem":68},"Build First - Learn Later","\u002Fblog\u002Fvectly-scaling","blog\u002Fvectly-scaling",false,{"id":71,"title":38,"author":72,"body":73,"date":535,"description":536,"draft":69,"extension":537,"image":538,"imageHeight":539,"imageWidth":540,"meta":541,"navigation":542,"path":39,"seo":543,"seoTitle":544,"sitemap":545,"stem":40,"tags":547,"updated":551,"__hash__":552},"blog\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark.md","Tony Costanzo",{"type":74,"value":75,"toc":518},"minimark",[76,79,84,128,132,136,139,142,145,149,152,155,158,161,165,168,171,174,178,181,212,216,219,222,248,251,255,258,261,264,267,270,273,277,280,284,287,290,296,299,303,306,309,335,338,341,344,347,350,353,357,360,363,389,393,396,399,402,405,408,411,415,418,472,475,479,482,485,505,509,512,515],[77,78],"audio-player",{},[80,81,83],"h2",{"id":82},"links","Links",[85,86,87,97,104,111,116,121],"ul",{},[88,89,90],"li",{},[91,92,96],"a",{"href":93,"rel":94},"https:\u002F\u002Fgithub.com\u002FZagitta\u002Fgpu-unlock",[95],"nofollow","gpu-unlock on GitHub",[88,98,99],{},[91,100,103],{"href":101,"rel":102},"https:\u002F\u002Fwww.nvidia.com\u002Fcontent\u002FPDF\u002Fnvidia-ampere-ga-102-gpu-architecture-whitepaper-v2.1.pdf",[95],"NVIDIA's Ampere GA102 whitepaper",[88,105,106],{},[91,107,110],{"href":108,"rel":109},"https:\u002F\u002Fwww.airealist.ai\u002Fp\u002Fnvidia-geforce-half-rate",[95],"Julien Simon's half rate writeup",[88,112,113],{},[91,114,115],{"href":47},"The original rig writeup",[88,117,118],{},[91,119,120],{"href":19},"The Blackwell bake-off",[88,122,123],{},[91,124,127],{"href":125,"rel":126},"https:\u002F\u002Fwww.techhivelabs.net\u002Fdata\u002Fblog\u002Fgpu-unlock\u002Fsummary.csv",[95],"Every result from this run (CSV)",[80,129,131],{"id":130},"i-paid-for-the-whole-card","I Paid for the Whole Card",[133,134,135],"p",{},"I own four RTX 3090s. They render my images, embed my documents, run my models, and chew through video, and when I ask for something, I want it now.",[133,137,138],{},"So when a kernel module called gpu-unlock showed up claiming those cards run AI math at half speed because NVIDIA set them that way, I had one question: how much of the card I paid for have I actually been using?",[133,140,141],{},"The repo already has plenty of matrix math benchmarks and a growing pile of news articles repeating them. What I wanted was everything I actually run, before and after, on one rig: image models, video models, LLMs on two engines, embeddings, rerankers, speech, vision, and decision models. More than 30 model and format setups, with controls good enough that I'd believe a bad result.",[133,143,144],{},"I expected to write \"images got faster, LLMs didn't.\" The data had other plans.",[80,146,148],{"id":147},"the-receipt-was-in-nvidias-own-whitepaper","The Receipt Was in NVIDIA's Own Whitepaper",[133,150,151],{},"I went looking for proof this was a conspiracy and found a spec table instead.",[133,153,154],{},"NVIDIA's Ampere whitepaper rates the RTX 3090 at 142 TFLOPS for FP16 math with FP16 accumulation. Lovely. Then the next rows drop it to 71 TFLOPS for FP16 or BF16 with FP32 accumulation, which, according to the gpu-unlock README, is the flavor nearly all unquantized AI work uses.",[133,156,157],{},"Same whitepaper, Table 3, the RTX A6000 on the same GA102 chip: 154.8 TFLOPS in both modes. No asterisk. (The table with the 3090 also lists a Titan RTX from the previous generation, at 130.5 in both modes, just to twist the knife.)",[133,159,160],{},"So my stock card should do about 71. I measured it.",[162,163],"data-chart",{"chart":164},"gpu-unlock\u002Ftensor-hive",[133,166,167],{},"72.0. NVIDIA's spec sheet is extremely honest, in the way a gym contract is honest. It's all in there, you just have to read the appendix.",[133,169,170],{},"I can't tell you why NVIDIA did it, because I couldn't find an NVIDIA statement on it. The gpu-unlock FAQ calls it market segmentation, a way to get businesses to pay for the professional cards. That's the author's read, and I happen to share it. Julien Simon's price tracking puts a new RTX A6000 around $5,990 and a used 3090 at $1,100 to $1,400, which doesn't exactly argue with him.",[133,172,173],{},"What I can tell you is what I measured: a boot-time kernel module, no hardware change, no driver patch, and the same card did 62.6% more BF16 math. Across the three cards I benchmarked individually, that's 130 extra TFLOPS, or about 1.8 stock 3090s' worth of BF16 math that was already sitting in my rack.",[80,175,177],{"id":176},"how-gpu-unlock-works-on-an-rtx-3090","How gpu-unlock Works on an RTX 3090",[133,179,180],{},"The module loads before the NVIDIA driver, rewrites the speed selectors on the card, resets it, and then the unmodified driver comes up none the wiser. It's opt-in through a kernel parameter, so I targeted my four 3090s by PCI address and left the RTX PRO 6000 alone.",[85,182,183,190,196,202],{},[88,184,185,189],{},[186,187,188],"strong",{},"Rig:"," EPYC 7532, 128 GB of RAM, Ubuntu 24.04, driver 580.173.02",[88,191,192,195],{},[186,193,194],{},"Cards:"," ASUS Strix (I call the one I tested Strix-B), Zotac, and PNY 3090s, with the PRO 6000 as a control",[88,197,198,201],{},[186,199,200],{},"Software:"," ComfyUI, vLLM, llama.cpp, transformers, sentence-transformers",[88,203,204,207,208],{},[186,205,206],{},"gpu-unlock:"," v2.0.0 at commit ",[209,210,211],"code",{},"7eb51bc",[80,213,215],{"id":214},"trying-to-prove-myself-wrong","Trying to Prove Myself Wrong",[133,217,218],{},"A 60% number deserves suspicion, so I built the run to catch me.",[162,220],{"chart":221},"gpu-unlock\u002Fthe-run",[85,223,224,230,236,242],{},[88,225,226,229],{},[186,227,228],{},"Same everything:"," same seeds, same prompts, same 350 W limit on the 3090s, all AI services stopped for both phases",[88,231,232,235],{},[186,233,234],{},"FP32 control:"," FP32 math doesn't use the capped path, so it shouldn't move. It went from 24.85 to 24.84 TFLOPS.",[88,237,238,241],{},[186,239,240],{},"PRO 6000 control:"," never unlocked, so any change there is drift. Every metric stayed within 2%.",[88,243,244,247],{},[186,245,246],{},"Solo reruns:"," the cards run tests side by side, so I repeated a batch with Strix-B alone. Same numbers.",[133,249,250],{},"One note on this bench.. my 4-card Z-Image throughput test had a metric bug on my end (the slowest card set the score), and I overwrote the stock logs before I caught it. It's out of the results.",[80,252,254],{"id":253},"it-was-never-images-vs-llms","It Was Never Images vs LLMs",[133,256,257],{},"Here's the whole post in one picture. Pick any job on the left, follow it through how it does its math, and see what it got.",[162,259],{"chart":260},"gpu-unlock\u002Fwhat-decides-the-gain",[133,262,263],{},"The category barely predicts anything. The math path predicts almost everything. All 40 of my Q4 and Q8 GGUF measurements gained under 5%, and that includes LLMs, speech, vision, and a decision model. Meanwhile a heavily quantized INT4 model on vLLM picked up as much as 52% on prefill, because a low-bit label on the weights doesn't tell you what the rest of the pipeline is doing.",[133,265,266],{},"The cleanest proof I have is running the same model twice.",[162,268],{"chart":269},"gpu-unlock\u002Fsame-model-pairs",[133,271,272],{},"Same weights family, same card, same engine. FLUX.3 Klein gains 54% as BF16 and nothing as INT8. That INT8 result also means the fastest way to dodge NVIDIA's cap is to not use the capped math in the first place, which is a pretty funny thing to learn about a card you bought for AI.",[80,274,276],{"id":275},"does-gpu-unlock-speed-up-stable-diffusion-flux-and-wan","Does gpu-unlock Speed Up Stable Diffusion, FLUX, and Wan?",[133,278,279],{},"Yes. Holy shit, yes. Go ahead and play with this one, because the numbers are a lot more fun when you have to sit through them.",[281,282],"render-race",{"chart":283},"gpu-unlock\u002Frender-race",[133,285,286],{},"Every 16-bit image model landed between 32 and 58%. Qwen-Image went from 26.15 seconds an image to 16.60. Wan 2.2 went from 107 seconds a video to 73, which is the kind of number that changes what you bother trying. Then there are the INT8 video models: LTX 2.5 got 11% and MiniMax H3 got 8%.",[133,288,289],{},"And the output? Same seed, same pixels.",[291,292],"content-image",{"alt":293,"caption":294,"src":295},"Two identical SDXL renders of a fox in the snow, stock on the left and unlocked on the right, with zero pixel difference between them","SDXL on Strix-B, stock and unlocked. The files are byte-identical, so if you can spot a difference, please see someone.","\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsdxl-stock-vs-unlocked.webp",[133,297,298],{},"That held for 75 of the 81 test groups I could compare across phases. Z-Image on Strix-B wouldn't even reproduce against itself within a single phase, and a few vLLM and SDXL runs only partly matched. The other cards matched exactly on Z-Image, so that looks like a Strix-B quirk. I had enough data and didn't chase it.",[80,300,302],{"id":301},"does-gpu-unlock-help-llms-and-llamacpp","Does gpu-unlock Help LLMs and llama.cpp?",[133,304,305],{},"This is where I nearly wrote the wrong post. If you only look at decode, the answer is no. Look at the whole request and LLMs split into two completely different stories.",[162,307],{"chart":308},"gpu-unlock\u002Fprefill-vs-decode",[85,310,311,317,323,329],{},[88,312,313,316],{},[186,314,315],{},"Prefill on vLLM:"," Qwen3.5-9B gained 48 to 60% depending on the card. Gemma 4 E4B gained 38%. Qwen3-VL-8B at INT4 gained 52%.",[88,318,319,322],{},[186,320,321],{},"Prefill on llama.cpp:"," Ornith-1.5-9B as BF16 GGUF gained 35%, so llama.cpp isn't immune. As Q4 GGUF, the same model gained 2%.",[88,324,325,328],{},[186,326,327],{},"Decode everywhere:"," about 4 to 5% on vLLM at 8K, and flat on llama.cpp.",[88,330,331,334],{},[186,332,333],{},"Splitting across cards:"," 2-card prefill gained 17% and 4-card gained 11%, a lot less than one card alone (more on that below).",[133,336,337],{},"Prefill is the wait before the model starts talking, and it scales with how much you send it. I run coding agents, and they send a lot.",[162,339],{"chart":340},"gpu-unlock\u002Ftime-to-first-token",[133,342,343],{},"Three seconds off a long prompt adds up fast when an agent makes dozens of turns in a session. (Prompt caching will claw some of that back on a real agent loop, since my test prompts were deliberately uncached.) The decode number looks boring in a benchmark table, but this is the part you feel. Long contexts even pull decode up a little: Qwen3-VL-8B hit +7.9% at 32K.",[162,345],{"chart":346},"gpu-unlock\u002Fcontext-depth",[133,348,349],{},"Decode itself is memory bound and this unlock doesn't touch memory. I sanity checked that on the PRO 6000: Qwen3.8-27B decodes at 28 tok\u002Fs with 55.6 GB of weights, which works out to about 1.56 TB\u002Fs against a measured 1.64 TB\u002Fs of read bandwidth. It's an estimate, but it's hard to argue with.",[133,351,352],{},"So yes, if your whole world is chatting with a Q4 GGUF in Ollama, you get nothing here. A lot of hobbyists run exactly that, so plenty of people are going to try this, see no change, and call it fake. It isn't fake. They're just standing in the one spot it doesn't reach.",[80,354,356],{"id":355},"embeddings-reranking-speech-vision-and-everything-else","Embeddings, Reranking, Speech, Vision, and Everything Else",[133,358,359],{},"Here's every model I ran. Filter it to whatever you care about.",[162,361],{"chart":362},"gpu-unlock\u002Fevery-model",[85,364,365,371,377,383],{},[88,366,367,370],{},[186,368,369],{},"Embeddings:"," bge-m3 and Qwen3-Embedding-4B both gained about 40%, on every card I ran them on.",[88,372,373,376],{},[186,374,375],{},"Reranking:"," mxbai-rerank-large-v2 gained 43% and Qwen3-Reranker-4B gained 41%. Stack those on the embeddings and my whole search pipeline gets faster at both ends, which matters because MyMind leans on it all day.",[88,378,379,382],{},[186,380,381],{},"Transcription:"," Whisper large-v3-turbo went from 83x to 93x realtime, or +12%. Qwen3-ASR gained 2 to 4% even though it's BF16, and I can't tell you why.",[88,384,385,388],{},[186,386,387],{},"Q8 and Q4 GGUF voice, vision, and decisions:"," Breeze TTS +1%, Parakeet +0%, Qwen3-VL vision +0.3%, and Clef-Flash decisions +0.3%. The cap never touched them.",[80,390,392],{"id":391},"does-gpu-unlock-use-more-power","Does gpu-unlock Use More Power?",[133,394,395],{},"This one surprised me. The cards pull about the same watts and finish sooner, so each job costs less.",[162,397],{"chart":398},"gpu-unlock\u002Fenergy-vs-speed",[133,400,401],{},"A third less energy per image, for free, from a kernel parameter. Whisper is the exception, and I'd love for someone to tell me why.",[133,403,404],{},"The catch shows up when you lower the power cap. The unlock needs headroom to spend, so at 200 W the gain falls to about 21 to 27%. If you've capped your cards hard to keep the breaker happy, you get a much smaller prize than the headline number.",[162,406],{"chart":407},"gpu-unlock\u002Fpower-curve",[133,409,410],{},"That's also my best read on why it isn't double, even though the rating doubles. At 350 W the card hits the same power wall and spends the budget at lower clocks: Strix-B sustained around 1,644 MHz stock and 1,347 MHz unlocked at the same 347 W.",[80,412,414],{"id":413},"is-gpu-unlock-safe","Is gpu-unlock Safe?",[133,416,417],{},"Short version: it ran clean for me, and it still pokes hardware in ways you should understand first.",[85,419,420,426,432,442,448,454,460,466],{},[88,421,422,425],{},[186,423,424],{},"Stability:"," 0 Xid errors across the entire run, stock and unlocked.",[88,427,428,431],{},[186,429,430],{},"Kernel:"," the module is unsigned and taints the kernel. Your logs will say so.",[88,433,434,437,438,441],{},[186,435,436],{},"Privilege masks:"," my boot log shows it rewriting the FEAT and WPR_CFG privilege masks from ",[209,439,440],{},"0x4cb8f"," to wide open values. I'd think twice about that on a shared machine.",[88,443,444,447],{},[186,445,446],{},"Getting back:"," drop the kernel parameter, then do a real power off. A kernel or driver change means DKMS has to rebuild the module.",[88,449,450,453],{},[186,451,452],{},"Warranty:"," the README doesn't address it. I'd assume you're on your own.",[88,455,456,459],{},[186,457,458],{},"Windows:"," the author doesn't maintain a port and warns about sketchy installers. Believe him.",[88,461,462,465],{},[186,463,464],{},"RTX 40 series:"," listed as experimental, and I didn't test it.",[88,467,468,471],{},[186,469,470],{},"RTX 50 series:"," not supported, and the FAQ says it's unlikely to happen. According to Julien Simon's writeup, NVIDIA rates the 5090 at half too, so the newest cards get the cap with no way out.",[133,473,474],{},"I've left it on. All four cards have been unlocked since the benchmark finished.",[80,476,478],{"id":477},"the-part-i-cant-explain","The Part I Can't Explain",[133,480,481],{},"Four 3090s running Qwen3.8-27B BF16 prefill only gained about 11%, going from 1,046 to 1,159 tok\u002Fs. A single PRO 6000 does around 6,200 on the same model. Each card on its own gets a huge lift, so something in the 4-card setup is eating it, and I haven't isolated what.",[133,483,484],{},"I'm also still chewing on Krea-2. It ships as FP8 weights and gained 50%, while upstream lists FP8 as no change. The ComfyUI logs on my rig only show BF16 and FP16 compute, which would explain it, but I never tied that to the Krea run itself.",[133,486,487,488,492,493,498,499,504],{},"Every number here is in the ",[91,489,491],{"href":125,"rel":490},[95],"summary CSV",", and the ",[91,494,497],{"href":495,"rel":496},"https:\u002F\u002Fwww.techhivelabs.net\u002Fdata\u002Fblog\u002Fgpu-unlock\u002Fresults.jsonl",[95],"raw results"," and ",[91,500,503],{"href":501,"rel":502},"https:\u002F\u002Fwww.techhivelabs.net\u002Fdata\u002Fblog\u002Fgpu-unlock\u002Fresults-390w.jsonl",[95],"390 W runs"," are up too. Each chart has its own download as well. If your card disagrees with me, I want to hear about it.",[80,506,508],{"id":507},"so-did-nvidia-sell-me-half","So Did NVIDIA Sell Me Half?",[133,510,511],{},"Technically they sold me all of it and rated half of it, right there in the whitepaper. Six years after the 3090 launched, the fix was one kernel module and one line on a command line.",[133,513,514],{},"It's a stranger cap than the headlines make it sound. It doesn't care whether you're making images, searching notes, or talking to an LLM. It cares what math you're doing when you do it, and it's been charging a toll on 16-bit math this whole time.",[133,516,517],{},"I'd feel worse about it if I weren't currently rendering images 57% faster out of spite.",{"title":519,"searchDepth":520,"depth":520,"links":521},"",2,[522,523,524,525,526,527,528,529,530,531,532,533,534],{"id":82,"depth":520,"text":83},{"id":130,"depth":520,"text":131},{"id":147,"depth":520,"text":148},{"id":176,"depth":520,"text":177},{"id":214,"depth":520,"text":215},{"id":253,"depth":520,"text":254},{"id":275,"depth":520,"text":276},{"id":301,"depth":520,"text":302},{"id":355,"depth":520,"text":356},{"id":391,"depth":520,"text":392},{"id":413,"depth":520,"text":414},{"id":477,"depth":520,"text":478},{"id":507,"depth":520,"text":508},"2026-11-04T00:00:00.000Z","NVIDIA rates the RTX 3090 at half rate for BF16 and FP16. I ran gpu-unlock on image, video, LLM, embedding, and speech models. The gain follows the math path.","md","\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fhero.webp",1075,1920,{},true,{"title":38,"description":536},"gpu-unlock Benchmark: RTX 3090 Tested on Real AI Models",{"loc":39,"lastmod":546},"2026-11-04",[548,549,550],"AI","Self Hosting","GPU",null,"0jauxOyoSukwigS5YVgdSUQzJI11uRPtTfC443G9tmI",[554,556,564,570,579,586,592,600,606,614,620,626,633,641],{"title":38,"author":72,"date":535,"draft":69,"description":536,"image":538,"tags":555,"navigation":542,"path":39,"stem":40,"id":71},[548,549,550],{"title":10,"author":72,"date":557,"draft":69,"description":558,"image":559,"tags":560,"navigation":542,"path":11,"stem":12,"id":563},"2026-10-15T00:00:00.000Z","I evicted my self-hosted autocomplete model to make room for Cloudflare's Clef, a local Jev alternative, and found its only remaining user was an AI agent.","\u002Fimages\u002Fblog\u002Fautocomplete-retired\u002Fhero.webp",[548,549,561,562],"Developer Workflow","AI Agents","blog\u002Fblog\u002Fautocomplete-retired.md",{"title":18,"author":72,"date":565,"draft":69,"description":566,"image":567,"tags":568,"navigation":542,"path":19,"stem":20,"id":569},"2026-09-14T00:00:00.000Z","I have to spec a two-to-four card inference node, so one Blackwell went on the bench first. Every throughput test picked one winner. Then a benchmark that actually compiles the code scored it 28.9% against 64.4%.","\u002Fimages\u002Fblog\u002Fblackwell-bakeoff\u002Fhero.webp",[548,549],"blog\u002Fblog\u002Fblackwell-bakeoff.md",{"title":14,"author":72,"date":571,"draft":69,"description":572,"image":573,"tags":574,"navigation":542,"path":15,"stem":16,"id":578},"2026-08-19T00:00:00.000Z","Automated BIM takeoff platforms assume your model followed the rules. Real models never do. So an AI agent drove Navisworks headless.. and five trades of takeoff took four days.","\u002Fimages\u002Fblog\u002Fautomated-bim-takeoff\u002Fhero.webp",[548,575,576,577],"Agents","Construction","BIM","blog\u002Fblog\u002Fautomated-bim-takeoff.md",{"title":34,"author":72,"date":580,"draft":69,"description":581,"image":582,"tags":583,"navigation":542,"path":35,"stem":36,"id":585},"2026-07-25T00:00:00.000Z","My movement bots said the server could hold hundreds. Then I taught them to swing a sword and the whole thing fell over at 45.. which is how I ended up shopping for CPUs instead of RAM.","\u002Fimages\u002Fblog\u002Fgame-server-scaling\u002Fhero.webp",[584,549],"Game Development","blog\u002Fblog\u002Fgame-server-scaling.md",{"title":50,"author":72,"date":587,"draft":69,"description":588,"image":589,"tags":590,"navigation":542,"path":51,"stem":52,"id":591},"2026-07-07T00:00:00.000Z","My friends said the new model on my rig was drunk. Root-causing that from LiteLLM request logs turned into pricing every token my GPUs have ever produced.. and a $961 cloud comparison.","\u002Fimages\u002Fblog\u002Flocal-ai-true-cost\u002Fhero.webp",[548,549],"blog\u002Fblog\u002Flocal-ai-true-cost.md",{"title":30,"author":72,"date":593,"draft":69,"description":594,"image":595,"tags":596,"navigation":542,"path":31,"stem":32,"id":599},"2026-06-17T00:00:00.000Z","I built a homelab full of AI agents to run my life, then got actually organized with a pen, an A5 notebook, and a bullet journal key I bent to fit my markdown brain.","\u002Fimages\u002Fblog\u002Fde-digitizing\u002Fhero.webp",[597,598],"Productivity","Journaling","blog\u002Fblog\u002Fde-digitizing.md",{"title":42,"author":72,"date":601,"draft":69,"description":602,"image":603,"tags":604,"navigation":542,"path":43,"stem":44,"id":605},"2026-06-08T00:00:00.000Z","I finally got Qwen3.6 running locally, ran the dense flagship against the sparse MoE, and learned that four benchmark points are worth a lot less than 5x prefill.","\u002Fimages\u002Fblog\u002Flocal-ai-moe-vs-dense\u002Fhero.webp",[548,549],"blog\u002Fblog\u002Flocal-ai-moe-vs-dense.md",{"title":26,"author":72,"date":607,"draft":69,"description":608,"image":609,"tags":610,"navigation":542,"path":27,"stem":28,"id":613},"2026-06-02T00:00:00.000Z","A client asks your superintendent for a small favor. He says yes. Months later it's a claim nobody can reconstruct. The case for AI agents on EPC jobs.","\u002Fimages\u002Fblog\u002Fconstruction-agents\u002Fhero.webp",[548,575,576,611,612],"EPC","Project Controls","blog\u002Fblog\u002Fconstruction-agents.md",{"title":54,"author":72,"date":615,"draft":69,"description":616,"image":617,"tags":618,"navigation":542,"path":55,"stem":56,"id":619},"2026-04-28T00:00:00.000Z","Six hours, five models, one IPMI reboot, zero upgrades -- a field report on why the bleeding edge of local LLM hosting is mostly bleeding.","\u002Fimages\u002Fblog\u002Flocal-ai-upgrade\u002Fhero.webp",[548,549],"blog\u002Fblog\u002Flocal-ai-upgrade.md",{"title":46,"author":72,"date":621,"draft":69,"description":622,"image":623,"tags":624,"navigation":542,"path":47,"stem":48,"id":625},"2026-03-25T00:00:00.000Z","Four RTX 3090s, an EPYC server, and a 122B parameter model -- the journey from underwhelming to overkill and back to surprisingly elegant.","\u002Fimages\u002Fblog\u002Fai-server\u002Fhero.webp",[548,549],"blog\u002Fblog\u002Flocal-ai-rig.md",{"title":62,"author":72,"date":627,"draft":69,"description":628,"image":629,"tags":630,"navigation":542,"path":63,"stem":64,"id":632},"2025-08-27T00:00:00.000Z","REST APIs to roguelikes: How I'm using a smaller game to learn the fundamentals before building my dream MMORPG. A honest indie gamedev journey.","\u002Fimages\u002Fblog\u002Fthundoria\u002Fhero.webp",[584,631],"Nuxt","blog\u002Fblog\u002Fthundoria-architecture.md",{"title":66,"author":72,"date":634,"draft":69,"description":635,"image":636,"tags":637,"navigation":542,"path":67,"stem":68,"id":640},"2025-06-25T00:00:00.000Z","Building an AI app with zero knowledge of AI, hitting deployment walls, and evolving architecture to meet real-world needs.","\u002Fimages\u002Fblog\u002Fvectly\u002Fhero.webp",[548,638,639,631],"Web Development","Side Projects","blog\u002Fblog\u002Fvectly-scaling.md",{"title":58,"author":72,"date":642,"draft":69,"description":643,"image":644,"tags":645,"navigation":542,"path":59,"stem":60,"id":646},"2025-06-17T00:00:00.000Z","Using Amazon's AI coding assistant, Q, to build a browser-based roguelike with Nuxt.js — the potential and the limits of AI-assisted development.","\u002Fimages\u002Fblog\u002Fq-roguelike\u002Fhero.webp",[548,584,631],"blog\u002Fblog\u002Fq-roguelike.md",[648,650,652,654,656,658,660,662,664,666,668,670,672,674],{"title":38,"path":39,"date":535,"tags":649,"image":538,"draft":69},[548,549,550],{"title":10,"path":11,"date":557,"tags":651,"image":559,"draft":69},[548,549,561,562],{"title":18,"path":19,"date":565,"tags":653,"image":567,"draft":69},[548,549],{"title":14,"path":15,"date":571,"tags":655,"image":573,"draft":69},[548,575,576,577],{"title":34,"path":35,"date":580,"tags":657,"image":582,"draft":69},[584,549],{"title":50,"path":51,"date":587,"tags":659,"image":589,"draft":69},[548,549],{"title":30,"path":31,"date":593,"tags":661,"image":595,"draft":69},[597,598],{"title":42,"path":43,"date":601,"tags":663,"image":603,"draft":69},[548,549],{"title":26,"path":27,"date":607,"tags":665,"image":609,"draft":69},[548,575,576,611,612],{"title":54,"path":55,"date":615,"tags":667,"image":617,"draft":69},[548,549],{"title":46,"path":47,"date":621,"tags":669,"image":623,"draft":69},[548,549],{"title":62,"path":63,"date":627,"tags":671,"image":629,"draft":69},[584,631],{"title":66,"path":67,"date":634,"tags":673,"image":636,"draft":69},[548,638,639,631],{"title":58,"path":59,"date":642,"tags":675,"image":644,"draft":69},[548,584,631],{"id":677,"title":678,"extension":679,"footnote":680,"height":551,"kind":681,"max":551,"meta":682,"min":551,"options":751,"orientation":551,"panels":551,"reference":551,"rows":758,"series":765,"stats":767,"stem":772,"subtitle":685,"x":551,"xLabel":551,"yLabel":551,"__hash__":773},"charts\u002Fcharts\u002Fgpu-unlock\u002Ftensor-hive.json","The half NVIDIA sold me","json","Nothing is physically switched off, so read the hexes as a share of the full rate. All 328 cores run, at half speed for this math. Measured values are medians of three runs. Ratings are peak figures from NVIDIA's Ampere GA102 whitepaper v2.1, Tables 3 and 9.","hive",{"path":683,"body":684},"\u002Fcharts\u002Fgpu-unlock\u002Ftensor-hive",{"title":678,"subtitle":685,"kind":681,"stats":686,"options":699,"rows":728,"series":747,"footnote":680},"An RTX 3090 has 328 tensor cores. Each hex is one, lit by how much of NVIDIA's 142 TFLOPS full-rate figure the card actually delivers for BF16 math.",[687,690,693,696],{"value":688,"label":689},"72.0","TFLOPS stock. NVIDIA rates it at 71.",{"value":691,"label":692},"117.0","TFLOPS unlocked, same 350 W",{"value":694,"label":695},"+130","TFLOPS across my three benchmarked cards",{"value":697,"label":698},"1.8","extra stock 3090s' worth of BF16 math",{"columns":700,"total":701,"start":702,"autoplay":703,"states":704},41,328,1,[520],[705,711,717,722],{"short":706,"label":707,"note":708,"lit":709,"value":710},"NVIDIA's rating","What NVIDIA rates a GeForce RTX 3090 at","FP32 accumulation, GA102 whitepaper, Table 9",164,"71 TFLOPS",{"short":712,"label":713,"note":714,"lit":715,"value":716},"Stock","My 3090 before the unlock","Measured on Strix-B at 350 W",166,"72.0 TFLOPS",{"short":718,"label":719,"note":714,"lit":720,"value":721},"Unlocked","The same 3090 after the unlock",270,"117.0 TFLOPS",{"short":723,"label":724,"note":725,"lit":726,"value":727},"Unlocked, 390 W","The same 3090 with more power","Measured on Strix-B at 390 W",287,"124.4 TFLOPS",[729,732,735,738,741,744],{"label":730,"t":731},"RTX 3090, NVIDIA's rating",71,{"label":733,"t":734},"My 3090, stock (350 W)",71.973,{"label":736,"t":737},"My 3090, unlocked (350 W)",117.04,{"label":739,"t":740},"My 3090, unlocked (390 W)",124.44,{"label":742,"t":743},"RTX 3090, NVIDIA's FP16-accumulate peak",142,{"label":745,"t":746},"RTX A6000, NVIDIA's rating (same GA102)",154.8,[748],{"key":749,"label":750,"decimals":702},"t","BF16 TFLOPS",{"columns":700,"total":701,"start":702,"autoplay":752,"states":753},[520],[754,755,756,757],{"short":706,"label":707,"note":708,"lit":709,"value":710},{"short":712,"label":713,"note":714,"lit":715,"value":716},{"short":718,"label":719,"note":714,"lit":720,"value":721},{"short":723,"label":724,"note":725,"lit":726,"value":727},[759,760,761,762,763,764],{"label":730,"t":731},{"label":733,"t":734},{"label":736,"t":737},{"label":739,"t":740},{"label":742,"t":743},{"label":745,"t":746},[766],{"key":749,"label":750,"decimals":702},[768,769,770,771],{"value":688,"label":689},{"value":691,"label":692},{"value":694,"label":695},{"value":697,"label":698},"charts\u002Fgpu-unlock\u002Ftensor-hive","mvnImvKAxVlm9s0CTf14cXEOKD_wzLpH7wbzklANv8A",{"id":775,"title":776,"extension":679,"footnote":777,"height":778,"kind":779,"max":551,"meta":780,"min":551,"options":836,"orientation":551,"panels":551,"reference":551,"rows":840,"series":853,"stats":551,"stem":856,"subtitle":783,"x":784,"xLabel":551,"yLabel":551,"__hash__":857},"charts\u002Fcharts\u002Fgpu-unlock\u002Fthe-run.json","One install, one power cycle, about five hours","Each bar runs from a group's first result to its last. Stock ran longer because I reran part of it after moving a 2-card test onto different cards.",250,"timeline",{"path":781,"body":782},"\u002Fcharts\u002Fgpu-unlock\u002Fthe-run",{"title":776,"subtitle":783,"kind":779,"x":784,"height":778,"rows":785,"series":823,"options":830,"footnote":777},"The whole run by minutes elapsed. Gray is stock, green is unlocked, and the gap is the install and power cycle.","label",[786,791,794,797,799,802,804,808,810,814,817,821],{"label":787,"phase":788,"start":789,"length":743,"_color":790},"Strix-B","stock",0,"muted",{"label":787,"phase":792,"start":793,"length":700,"_color":702},"unlocked",194,{"label":795,"phase":788,"start":789,"length":796,"_color":790},"Zotac",160,{"label":795,"phase":792,"start":793,"length":798,"_color":702},46,{"label":800,"phase":788,"start":789,"length":801,"_color":790},"PNY",138,{"label":800,"phase":792,"start":793,"length":803,"_color":702},30,{"label":805,"phase":788,"start":806,"length":807,"_color":790},"Multi-card",63,116,{"label":805,"phase":792,"start":778,"length":809,"_color":702},21,{"label":811,"phase":788,"start":812,"length":813,"_color":790},"Solo reruns",88,75,{"label":811,"phase":792,"start":815,"length":816,"_color":702},274,13,{"label":818,"phase":788,"start":819,"length":820,"_color":790},"PRO 6000 control",99,66,{"label":818,"phase":792,"start":726,"length":822,"_color":702},17,[824,827],{"key":825,"label":826},"start","Started (min)",{"key":828,"label":829},"length","Lasted (min)",{"typeKey":784,"startKey":825,"lengthKey":828,"rowLabelWidth":831,"xSuffix":832,"legend":833},120," min",[834,835],{"name":712,"color":790},{"name":718,"color":702},{"typeKey":784,"startKey":825,"lengthKey":828,"rowLabelWidth":831,"xSuffix":832,"legend":837},[838,839],{"name":712,"color":790},{"name":718,"color":702},[841,842,843,844,845,846,847,848,849,850,851,852],{"label":787,"phase":788,"start":789,"length":743,"_color":790},{"label":787,"phase":792,"start":793,"length":700,"_color":702},{"label":795,"phase":788,"start":789,"length":796,"_color":790},{"label":795,"phase":792,"start":793,"length":798,"_color":702},{"label":800,"phase":788,"start":789,"length":801,"_color":790},{"label":800,"phase":792,"start":793,"length":803,"_color":702},{"label":805,"phase":788,"start":806,"length":807,"_color":790},{"label":805,"phase":792,"start":778,"length":809,"_color":702},{"label":811,"phase":788,"start":812,"length":813,"_color":790},{"label":811,"phase":792,"start":815,"length":816,"_color":702},{"label":818,"phase":788,"start":819,"length":820,"_color":790},{"label":818,"phase":792,"start":726,"length":822,"_color":702},[854,855],{"key":825,"label":826},{"key":828,"label":829},"charts\u002Fgpu-unlock\u002Fthe-run","gCPMAEphP7zr4shyK95jjtkcDYZGUPBHqaVGZQHQ2og",{"id":859,"title":860,"extension":679,"footnote":861,"height":862,"kind":863,"max":551,"meta":864,"min":551,"options":1015,"orientation":551,"panels":551,"reference":551,"rows":1068,"series":1101,"stats":551,"stem":1103,"subtitle":867,"x":551,"xLabel":551,"yLabel":551,"__hash__":1104},"charts\u002Fcharts\u002Fgpu-unlock\u002Fwhat-decides-the-gain.json","Follow the math path","Each measurement is one model on one card, at one prompt size for LLMs. Time-to-first-token is left out because it mirrors prefill. Green paths gained 30% or more, gold paths 5 to 30%, gray paths under 5%.",560,"sankey",{"path":865,"body":866},"\u002Fcharts\u002Fgpu-unlock\u002Fwhat-decides-the-gain",{"title":860,"subtitle":867,"kind":863,"height":862,"options":868,"rows":946,"series":1011,"footnote":861},"117 before and after measurements across every workload. Left to right: what the job is, how it computes, what it gained.",{"nodes":869,"links":907,"nodePadding":944,"labelMaxWidth":945},[870,872,874,876,878,880,882,884,886,888,890,892,894,896,898,900,902,905],{"id":871,"label":871,"_color":790},"LLM prefill",{"id":873,"label":873,"_color":790},"LLM decode",{"id":875,"label":875,"_color":790},"Image",{"id":877,"label":877,"_color":790},"Video",{"id":879,"label":879,"_color":790},"Embeddings",{"id":881,"label":881,"_color":790},"Reranking",{"id":883,"label":883,"_color":790},"Speech",{"id":885,"label":885,"_color":790},"Vision",{"id":887,"label":887,"_color":790},"Decision",{"id":889,"label":889,"_color":520},"16-bit float (BF16, FP16)",{"id":891,"label":891,"_color":520},"INT4 on vLLM",{"id":893,"label":893,"_color":520},"BF16 GGUF on llama.cpp",{"id":895,"label":895,"_color":520},"FP8 weights in ComfyUI",{"id":897,"label":897,"_color":520},"INT8 in ComfyUI",{"id":899,"label":899,"_color":520},"Q4 or Q8 GGUF",{"id":901,"label":901,"_color":702},"+30% or more",{"id":903,"label":903,"_color":904},"+5 to 30%",6,{"id":906,"label":906,"_color":790},"Under 5%",[908,910,911,912,913,915,916,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,935,936,937,938,939,940,941,942,943],{"source":883,"target":889,"value":909,"_color":790},4,{"source":879,"target":889,"value":909,"_color":790},{"source":875,"target":889,"value":816,"_color":790},{"source":875,"target":897,"value":520,"_color":790},{"source":873,"target":899,"value":914,"_color":790},18,{"source":871,"target":899,"value":914,"_color":790},{"source":873,"target":891,"value":917,"_color":790},3,{"source":871,"target":891,"value":917,"_color":790},{"source":873,"target":889,"value":914,"_color":790},{"source":871,"target":889,"value":914,"_color":790},{"source":881,"target":889,"value":520,"_color":790},{"source":883,"target":899,"value":520,"_color":790},{"source":885,"target":899,"value":702,"_color":790},{"source":875,"target":895,"value":702,"_color":790},{"source":877,"target":889,"value":702,"_color":790},{"source":887,"target":899,"value":702,"_color":790},{"source":873,"target":893,"value":917,"_color":790},{"source":871,"target":893,"value":917,"_color":790},{"source":877,"target":897,"value":520,"_color":790},{"source":889,"target":906,"value":822,"_color":790},{"source":889,"target":901,"value":803,"_color":702},{"source":897,"target":906,"value":702,"_color":790},{"source":899,"target":906,"value":934,"_color":790},40,{"source":891,"target":903,"value":520,"_color":904},{"source":891,"target":906,"value":702,"_color":790},{"source":891,"target":901,"value":917,"_color":702},{"source":889,"target":903,"value":816,"_color":904},{"source":895,"target":901,"value":702,"_color":702},{"source":897,"target":903,"value":917,"_color":904},{"source":893,"target":906,"value":917,"_color":790},{"source":893,"target":901,"value":520,"_color":702},{"source":893,"target":903,"value":702,"_color":904},10,150,[947,949,951,953,955,957,959,961,963,965,967,969,971,973,975,977,979,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009],{"label":948,"count":702},"Decision via Q4 or Q8 GGUF",{"label":950,"count":909},"Embeddings via 16-bit float (BF16, FP16)",{"label":952,"count":816},"Image via 16-bit float (BF16, FP16)",{"label":954,"count":702},"Image via FP8 weights in ComfyUI",{"label":956,"count":520},"Image via INT8 in ComfyUI",{"label":958,"count":914},"LLM decode via 16-bit float (BF16, FP16)",{"label":960,"count":917},"LLM decode via BF16 GGUF on llama.cpp",{"label":962,"count":917},"LLM decode via INT4 on vLLM",{"label":964,"count":914},"LLM decode via Q4 or Q8 GGUF",{"label":966,"count":914},"LLM prefill via 16-bit float (BF16, FP16)",{"label":968,"count":917},"LLM prefill via BF16 GGUF on llama.cpp",{"label":970,"count":917},"LLM prefill via INT4 on vLLM",{"label":972,"count":914},"LLM prefill via Q4 or Q8 GGUF",{"label":974,"count":520},"Reranking via 16-bit float (BF16, FP16)",{"label":976,"count":909},"Speech via 16-bit float (BF16, FP16)",{"label":978,"count":520},"Speech via Q4 or Q8 GGUF",{"label":980,"count":702},"Video via 16-bit float (BF16, FP16)",{"label":982,"count":520},"Video via INT8 in ComfyUI",{"label":984,"count":702},"Vision via Q4 or Q8 GGUF",{"label":986,"count":803},"16-bit float (BF16, FP16) to +30% or more",{"label":988,"count":816},"16-bit float (BF16, FP16) to +5 to 30%",{"label":990,"count":822},"16-bit float (BF16, FP16) to Under 5%",{"label":992,"count":520},"BF16 GGUF on llama.cpp to +30% or more",{"label":994,"count":702},"BF16 GGUF on llama.cpp to +5 to 30%",{"label":996,"count":917},"BF16 GGUF on llama.cpp to Under 5%",{"label":998,"count":702},"FP8 weights in ComfyUI to +30% or more",{"label":1000,"count":917},"INT4 on vLLM to +30% or more",{"label":1002,"count":520},"INT4 on vLLM to +5 to 30%",{"label":1004,"count":702},"INT4 on vLLM to Under 5%",{"label":1006,"count":917},"INT8 in ComfyUI to +5 to 30%",{"label":1008,"count":702},"INT8 in ComfyUI to Under 5%",{"label":1010,"count":934},"Q4 or Q8 GGUF to Under 5%",[1012],{"key":1013,"label":1014},"count","Measurements",{"nodes":1016,"links":1035,"nodePadding":944,"labelMaxWidth":945},[1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034],{"id":871,"label":871,"_color":790},{"id":873,"label":873,"_color":790},{"id":875,"label":875,"_color":790},{"id":877,"label":877,"_color":790},{"id":879,"label":879,"_color":790},{"id":881,"label":881,"_color":790},{"id":883,"label":883,"_color":790},{"id":885,"label":885,"_color":790},{"id":887,"label":887,"_color":790},{"id":889,"label":889,"_color":520},{"id":891,"label":891,"_color":520},{"id":893,"label":893,"_color":520},{"id":895,"label":895,"_color":520},{"id":897,"label":897,"_color":520},{"id":899,"label":899,"_color":520},{"id":901,"label":901,"_color":702},{"id":903,"label":903,"_color":904},{"id":906,"label":906,"_color":790},[1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067],{"source":883,"target":889,"value":909,"_color":790},{"source":879,"target":889,"value":909,"_color":790},{"source":875,"target":889,"value":816,"_color":790},{"source":875,"target":897,"value":520,"_color":790},{"source":873,"target":899,"value":914,"_color":790},{"source":871,"target":899,"value":914,"_color":790},{"source":873,"target":891,"value":917,"_color":790},{"source":871,"target":891,"value":917,"_color":790},{"source":873,"target":889,"value":914,"_color":790},{"source":871,"target":889,"value":914,"_color":790},{"source":881,"target":889,"value":520,"_color":790},{"source":883,"target":899,"value":520,"_color":790},{"source":885,"target":899,"value":702,"_color":790},{"source":875,"target":895,"value":702,"_color":790},{"source":877,"target":889,"value":702,"_color":790},{"source":887,"target":899,"value":702,"_color":790},{"source":873,"target":893,"value":917,"_color":790},{"source":871,"target":893,"value":917,"_color":790},{"source":877,"target":897,"value":520,"_color":790},{"source":889,"target":906,"value":822,"_color":790},{"source":889,"target":901,"value":803,"_color":702},{"source":897,"target":906,"value":702,"_color":790},{"source":899,"target":906,"value":934,"_color":790},{"source":891,"target":903,"value":520,"_color":904},{"source":891,"target":906,"value":702,"_color":790},{"source":891,"target":901,"value":917,"_color":702},{"source":889,"target":903,"value":816,"_color":904},{"source":895,"target":901,"value":702,"_color":702},{"source":897,"target":903,"value":917,"_color":904},{"source":893,"target":906,"value":917,"_color":790},{"source":893,"target":901,"value":520,"_color":702},{"source":893,"target":903,"value":702,"_color":904},[1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100],{"label":948,"count":702},{"label":950,"count":909},{"label":952,"count":816},{"label":954,"count":702},{"label":956,"count":520},{"label":958,"count":914},{"label":960,"count":917},{"label":962,"count":917},{"label":964,"count":914},{"label":966,"count":914},{"label":968,"count":917},{"label":970,"count":917},{"label":972,"count":914},{"label":974,"count":520},{"label":976,"count":909},{"label":978,"count":520},{"label":980,"count":702},{"label":982,"count":520},{"label":984,"count":702},{"label":986,"count":803},{"label":988,"count":816},{"label":990,"count":822},{"label":992,"count":520},{"label":994,"count":702},{"label":996,"count":917},{"label":998,"count":702},{"label":1000,"count":917},{"label":1002,"count":520},{"label":1004,"count":702},{"label":1006,"count":917},{"label":1008,"count":702},{"label":1010,"count":934},[1102],{"key":1013,"label":1014},"charts\u002Fgpu-unlock\u002Fwhat-decides-the-gain","tpAqFJEsP0iMP1k72VMUgPHQleCZngtHyorvZcrsDDk",{"id":1106,"title":1107,"extension":679,"footnote":1108,"height":551,"kind":1109,"max":551,"meta":1110,"min":551,"options":1143,"orientation":551,"panels":551,"reference":551,"rows":1144,"series":1148,"stats":551,"stem":1151,"subtitle":1113,"x":551,"xLabel":551,"yLabel":551,"__hash__":1152},"charts\u002Fcharts\u002Fgpu-unlock\u002Fsame-model-pairs.json","Same model. Same card. Different math.","Gain from the unlock on each version. The right column is the difference in percentage points.","dumbbell",{"path":1111,"body":1112},"\u002Fcharts\u002Fgpu-unlock\u002Fsame-model-pairs",{"title":1107,"subtitle":1113,"kind":1109,"rows":1114,"series":1133,"options":1140,"footnote":1108},"The cleanest test I've got: one model, quantized and not. The gap is the cap.",[1115,1121,1127],{"label":1116,"note":1117,"a":1118,"b":1119,"delta":1120},"FLUX.3 Klein","PNY, sec\u002Fimage",-3.9,53.6,"+58",{"label":1122,"note":1123,"a":1124,"b":1125,"delta":1126},"Qwen-Image 2.1","Zotac, sec\u002Fimage",8.6,54,"+45",{"label":1128,"note":1129,"a":1130,"b":1131,"delta":1132},"Ornith-1.5-9B prefill","Zotac on llama.cpp, 8K prompt",1.8,34.8,"+33",[1134,1137],{"key":91,"label":1135,"color":790,"prefix":519,"suffix":1136,"decimals":702},"Integer or Q4 weights","%",{"key":1138,"label":1139,"color":702,"suffix":1136,"decimals":702},"b","BF16 weights",{"min":1141,"max":1142},-10,60,{"min":1141,"max":1142},[1145,1146,1147],{"label":1116,"note":1117,"a":1118,"b":1119,"delta":1120},{"label":1122,"note":1123,"a":1124,"b":1125,"delta":1126},{"label":1128,"note":1129,"a":1130,"b":1131,"delta":1132},[1149,1150],{"key":91,"label":1135,"color":790,"prefix":519,"suffix":1136,"decimals":702},{"key":1138,"label":1139,"color":702,"suffix":1136,"decimals":702},"charts\u002Fgpu-unlock\u002Fsame-model-pairs","JvKesIRdY7Pl5FS3b4lZMzKCe56MITyr0ctuIauRsJg",{"id":1154,"title":1155,"extension":679,"footnote":1156,"height":551,"kind":551,"max":551,"meta":1157,"min":551,"options":551,"orientation":551,"panels":551,"reference":551,"rows":1236,"series":1247,"stats":551,"stem":1250,"subtitle":1160,"x":551,"xLabel":551,"yLabel":551,"__hash__":1251},"charts\u002Fcharts\u002Fgpu-unlock\u002Frender-race.json","Race your favorite model","Same seed in both phases. The stock and unlocked outputs are byte-identical, except Z-Image on Strix-B, which doesn't reproduce even against itself.",{"path":1158,"body":1159},"\u002Fcharts\u002Fgpu-unlock\u002Frender-race",{"title":1155,"subtitle":1160,"rows":1161,"series":1231,"footnote":1156},"Real medians from the benchmark, stock against unlocked, on real output from the run. Pick one. Then pick an INT8 one and watch the difference disappear.",[1162,1170,1175,1182,1188,1196,1202,1210,1218,1224],{"id":1163,"label":1122,"format":1164,"engine":1165,"stock":1166,"unlocked":1167,"media":1168,"unit":1169},"qwen","BF16","ComfyUI, Strix-B",26.151,16.599,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fqwen-image-2.1-strix-b.webp","image",{"id":1171,"label":1116,"format":1164,"engine":1165,"stock":1172,"unlocked":1173,"media":1174,"unit":1169},"flux",10.139,6.48,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fflux3-klein-strix-b.webp",{"id":1176,"label":1177,"format":1178,"engine":1165,"stock":1179,"unlocked":1180,"media":1181,"unit":1169},"krea","Krea-2 Turbo","FP8 on disk",14.956,9.962,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fkrea2-turbo-strix-b.webp",{"id":1183,"label":1184,"format":1164,"engine":1165,"stock":1185,"unlocked":1186,"media":1187,"unit":1169},"zimage","Z-Image Turbo",7.695,5.062,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fz-image-turbo-strix-b.webp",{"id":1189,"label":1190,"format":1191,"engine":1192,"stock":1193,"unlocked":1194,"media":1195,"unit":1169},"wai","WAI-Illustrious","FP16","ComfyUI, PNY",8.85,6.286,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fwai-illustrious-pny.webp",{"id":1197,"label":1198,"format":1191,"engine":1165,"stock":1199,"unlocked":1200,"media":1201,"unit":1169},"sdxl","SDXL base",8.505,6.281,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fsdxl-base-strix-b.webp",{"id":1203,"label":1204,"format":1191,"engine":1165,"stock":1205,"unlocked":1206,"media":1207,"unit":1208,"video":1209},"wan","Wan 2.2 video",107.063,73.379,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fwan-2.2-5b-strix-b.webp","video","\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fwan-2.2-5b-strix-b.mp4",{"id":1211,"label":1212,"format":1213,"engine":1214,"stock":1215,"unlocked":1216,"media":1217,"unit":1169},"qwen8","Qwen-Image INT8","INT8","ComfyUI, Zotac",13.75,12.665,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fqwen-image-2.1-int8-zotac.webp",{"id":1219,"label":1220,"format":1213,"engine":1192,"stock":1221,"unlocked":1222,"media":1223,"unit":1169},"flux8","FLUX.3 INT8",4.67,4.86,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fflux3-klein-int8-pny.webp",{"id":1225,"label":1226,"format":1213,"engine":1214,"stock":1227,"unlocked":1228,"media":1229,"unit":1208,"video":1230},"minimax","MiniMax H3 video",17.156,15.911,"\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fminimax-h3-zotac.webp","\u002Fimages\u002Fblog\u002Fgpu-unlock-rtx-3090-benchmark\u002Fsamples\u002Fminimax-h3-zotac.mp4",[1232,1234],{"key":788,"label":1233,"decimals":520},"Stock (s)",{"key":792,"label":1235,"decimals":520},"Unlocked (s)",[1237,1238,1239,1240,1241,1242,1243,1244,1245,1246],{"id":1163,"label":1122,"format":1164,"engine":1165,"stock":1166,"unlocked":1167,"media":1168,"unit":1169},{"id":1171,"label":1116,"format":1164,"engine":1165,"stock":1172,"unlocked":1173,"media":1174,"unit":1169},{"id":1176,"label":1177,"format":1178,"engine":1165,"stock":1179,"unlocked":1180,"media":1181,"unit":1169},{"id":1183,"label":1184,"format":1164,"engine":1165,"stock":1185,"unlocked":1186,"media":1187,"unit":1169},{"id":1189,"label":1190,"format":1191,"engine":1192,"stock":1193,"unlocked":1194,"media":1195,"unit":1169},{"id":1197,"label":1198,"format":1191,"engine":1165,"stock":1199,"unlocked":1200,"media":1201,"unit":1169},{"id":1203,"label":1204,"format":1191,"engine":1165,"stock":1205,"unlocked":1206,"media":1207,"unit":1208,"video":1209},{"id":1211,"label":1212,"format":1213,"engine":1214,"stock":1215,"unlocked":1216,"media":1217,"unit":1169},{"id":1219,"label":1220,"format":1213,"engine":1192,"stock":1221,"unlocked":1222,"media":1223,"unit":1169},{"id":1225,"label":1226,"format":1213,"engine":1214,"stock":1227,"unlocked":1228,"media":1229,"unit":1208,"video":1230},[1248,1249],{"key":788,"label":1233,"decimals":520},{"key":792,"label":1235,"decimals":520},"charts\u002Fgpu-unlock\u002Frender-race","Ciac9pdvAV5CIjF2Kus3PtzlXWMXQA_GTbDUyK8ePo8",{"id":1253,"title":1254,"extension":679,"footnote":1255,"height":1256,"kind":1257,"max":944,"meta":1258,"min":1265,"options":1324,"orientation":551,"panels":551,"reference":551,"rows":1325,"series":1338,"stats":551,"stem":1340,"subtitle":1261,"x":1262,"xLabel":1263,"yLabel":1264,"__hash__":1341},"charts\u002Fcharts\u002Fgpu-unlock\u002Fprefill-vs-decode.json","LLMs aren't flat. They're split.","Decode stays low across the board, while prefill spans from nothing to 54%. The multi-card decode points sit inside their own run-to-run spread.",420,"scatter",{"path":1259,"body":1260},"\u002Fcharts\u002Fgpu-unlock\u002Fprefill-vs-decode",{"title":1254,"subtitle":1261,"kind":1257,"x":1262,"xLabel":1263,"yLabel":1264,"height":1256,"min":1265,"max":944,"rows":1266,"series":1317,"options":1321,"footnote":1255},"Every LLM setup at an 8K prompt. Across: how much prefill gained. Up: how much decode gained.","x","Prefill gain (%)","Decode gain (%)",-2,[1267,1273,1277,1281,1285,1289,1292,1297,1302,1306,1310,1314],{"label":1268,"show":1268,"x":1125,"y":1269,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},"Qwen3.5-9B, Strix-B",3.9,"BF16 on vLLM","top",12,{"label":1274,"show":519,"x":1275,"y":1276,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},"Qwen3.5-9B, Zotac",47.5,4.6,{"label":1278,"show":519,"x":1279,"y":1280,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},"Qwen3.5-9B, PNY",60.4,5.1,{"label":1282,"show":1282,"x":1283,"y":1284,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},"Gemma 4 E4B",38.1,4.5,{"label":1286,"show":1286,"x":1287,"y":1288,"_group":891,"_color":520,"_pos":1271,"_size":1272,"_phone":542},"Qwen3-VL-8B (INT4)",52.3,5.4,{"label":1290,"show":1290,"x":1131,"y":789,"_group":1291,"_color":917,"_pos":1271,"_size":1272,"_phone":542},"Ornith-1.5-9B","BF16 GGUF",{"label":1293,"show":1293,"x":1294,"y":1295,"_group":1296,"_color":909,"_pos":1271,"_size":1272,"_phone":69},"Gemma 4 12B, 2 cards",17.3,3.7,"Split across cards",{"label":1298,"show":1298,"x":1299,"y":1300,"_group":1296,"_color":909,"_pos":1301,"_size":1272,"_phone":69},"Qwen3.8-27B, 4 cards",10.8,1.1,"bottom",{"label":1303,"show":519,"x":1130,"y":1304,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":69},"Ornith-1.5-9B Q4",0.6,"Q4 GGUF",{"label":1307,"show":519,"x":1308,"y":1309,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":69},"Ornith-1.5-35B Q4",0.7,-0.4,{"label":1311,"show":1311,"x":1312,"y":1313,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":542},"Qwen3.8-27B Q4",0.3,-0.3,{"label":1315,"show":519,"x":1316,"y":1312,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":69},"Gemma 12B QAT Q4",1.3,[1318],{"key":1319,"label":1320,"suffix":1136,"decimals":702},"y","Decode gain",{"xMin":1265,"xMax":1322,"pointLabelKey":1323,"xSuffix":1136},70,"show",{"xMin":1265,"xMax":1322,"pointLabelKey":1323,"xSuffix":1136},[1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337],{"label":1268,"show":1268,"x":1125,"y":1269,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},{"label":1274,"show":519,"x":1275,"y":1276,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},{"label":1278,"show":519,"x":1279,"y":1280,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},{"label":1282,"show":1282,"x":1283,"y":1284,"_group":1270,"_color":702,"_pos":1271,"_size":1272,"_phone":69},{"label":1286,"show":1286,"x":1287,"y":1288,"_group":891,"_color":520,"_pos":1271,"_size":1272,"_phone":542},{"label":1290,"show":1290,"x":1131,"y":789,"_group":1291,"_color":917,"_pos":1271,"_size":1272,"_phone":542},{"label":1293,"show":1293,"x":1294,"y":1295,"_group":1296,"_color":909,"_pos":1271,"_size":1272,"_phone":69},{"label":1298,"show":1298,"x":1299,"y":1300,"_group":1296,"_color":909,"_pos":1301,"_size":1272,"_phone":69},{"label":1303,"show":519,"x":1130,"y":1304,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":69},{"label":1307,"show":519,"x":1308,"y":1309,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":69},{"label":1311,"show":1311,"x":1312,"y":1313,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":542},{"label":1315,"show":519,"x":1316,"y":1312,"_group":1305,"_color":790,"_pos":1301,"_size":1272,"_phone":69},[1339],{"key":1319,"label":1320,"suffix":1136,"decimals":702},"charts\u002Fgpu-unlock\u002Fprefill-vs-decode","5NtFbbaRE29KHIRUaRvhCZBp4tFTG-EA5U8_6xPQLp8",{"id":1343,"title":1344,"extension":679,"footnote":1345,"height":551,"kind":1109,"max":551,"meta":1346,"min":551,"options":1406,"orientation":551,"panels":551,"reference":551,"rows":1407,"series":1417,"stats":551,"stem":1420,"subtitle":1349,"x":551,"xLabel":551,"yLabel":551,"__hash__":1421},"charts\u002Fcharts\u002Fgpu-unlock\u002Ftime-to-first-token.json","How long you stare at the cursor","Medians of five runs at 350 W. Same prompts in both phases, different per run, so prompt caching can't inflate this.",{"path":1347,"body":1348},"\u002Fcharts\u002Fgpu-unlock\u002Ftime-to-first-token",{"title":1344,"subtitle":1349,"kind":1109,"rows":1350,"series":1400,"options":1404,"footnote":1345},"Time to first token on a 32K prompt, which is about what a coding agent sends once it has read a few files.",[1351,1358,1364,1368,1373,1379,1384,1390,1395],{"label":1352,"note":1353,"a":1354,"b":1355,"delta":1356,"_group":1357},"Qwen3.5-9B","BF16 on vLLM, Strix-B",8.448,5.415,"-3.0s","Unquantized or vLLM",{"label":1359,"note":1360,"a":1361,"b":1362,"delta":1363,"_group":1357},"Qwen3-VL-8B","INT4 on vLLM, PNY",12.123,8.394,"-3.7s",{"label":1282,"note":1353,"a":1365,"b":1366,"delta":1367,"_group":1357},6.733,5.345,"-1.4s",{"label":1290,"note":1369,"a":1370,"b":1371,"delta":1372,"_group":1357},"BF16 GGUF, Zotac",12.109,8.998,"-3.1s",{"label":1374,"note":1375,"a":1376,"b":1377,"delta":1378,"_group":1296},"Gemma 4 12B","BF16 on vLLM, 2 cards",16.295,14.081,"-2.2s",{"label":1380,"note":1381,"a":1382,"b":1383,"delta":1372,"_group":1296},"Qwen3.8-27B","BF16 on vLLM, 4 cards",30.237,27.12,{"label":1380,"note":1385,"a":1386,"b":1387,"delta":1388,"_group":1389},"Q4 GGUF, Strix-B",27.907,27.339,"-0.6s","Q4 GGUF on llama.cpp",{"label":1391,"note":1392,"a":1393,"b":1394,"delta":1388,"_group":1389},"Gemma 4 12B QAT","Q4 GGUF, PNY",13.907,13.297,{"label":1396,"note":1385,"a":1397,"b":1398,"delta":1399,"_group":1389},"Ornith-1.5-35B",9.335,9.129,"-0.2s",[1401,1403],{"key":91,"label":712,"color":790,"suffix":1402,"decimals":702},"s",{"key":1138,"label":718,"color":702,"suffix":1402,"decimals":702},{"min":789,"max":1405},32,{"min":789,"max":1405},[1408,1409,1410,1411,1412,1413,1414,1415,1416],{"label":1352,"note":1353,"a":1354,"b":1355,"delta":1356,"_group":1357},{"label":1359,"note":1360,"a":1361,"b":1362,"delta":1363,"_group":1357},{"label":1282,"note":1353,"a":1365,"b":1366,"delta":1367,"_group":1357},{"label":1290,"note":1369,"a":1370,"b":1371,"delta":1372,"_group":1357},{"label":1374,"note":1375,"a":1376,"b":1377,"delta":1378,"_group":1296},{"label":1380,"note":1381,"a":1382,"b":1383,"delta":1372,"_group":1296},{"label":1380,"note":1385,"a":1386,"b":1387,"delta":1388,"_group":1389},{"label":1391,"note":1392,"a":1393,"b":1394,"delta":1388,"_group":1389},{"label":1396,"note":1385,"a":1397,"b":1398,"delta":1399,"_group":1389},[1418,1419],{"key":91,"label":712,"color":790,"suffix":1402,"decimals":702},{"key":1138,"label":718,"color":702,"suffix":1402,"decimals":702},"charts\u002Fgpu-unlock\u002Ftime-to-first-token","z4YoFXqHD3GqKnJWNxaqQm9RaI_y8GnIKWA2fGk6jqk",{"id":1423,"title":1424,"extension":679,"footnote":1425,"height":551,"kind":1426,"max":551,"meta":1427,"min":551,"options":1479,"orientation":551,"panels":551,"reference":551,"rows":1484,"series":1495,"stats":551,"stem":1499,"subtitle":1430,"x":551,"xLabel":1472,"yLabel":551,"__hash__":1500},"charts\u002Fcharts\u002Fgpu-unlock\u002Fcontext-depth.json","The longer the prompt, the more it matters","Prefill at 512 tokens is short enough that timing noise is high, so trust the 8K and 32K columns more.","matrix",{"path":1428,"body":1429},"\u002Fcharts\u002Fgpu-unlock\u002Fcontext-depth",{"title":1424,"subtitle":1430,"kind":1426,"rows":1431,"series":1463,"xLabel":1472,"options":1473,"footnote":1425},"Percent gain by prompt size in tokens, one card per model. Decode barely shows up until the context gets long.",[1432,1437,1440,1444,1447,1449,1453,1456,1459,1460],{"_group":1433,"label":1352,"note":1434,"s":1435,"m":1125,"l":1436},"Prefill","BF16, vLLM",43,56,{"_group":1433,"label":1282,"note":1434,"s":1438,"m":1283,"l":1439},35.3,26,{"_group":1433,"label":1359,"note":1441,"s":1442,"m":1287,"l":1443},"INT4, vLLM",46.4,44.4,{"_group":1433,"label":1290,"note":1291,"s":1445,"m":1131,"l":1446},19.5,34.6,{"_group":1433,"label":1380,"note":1305,"s":1312,"m":1312,"l":1448},2.1,{"_group":1450,"label":1352,"note":1434,"s":1451,"m":1269,"l":1452},"Decode",3.6,4.4,{"_group":1450,"label":1282,"note":1434,"s":1454,"m":1284,"l":1455},4.8,5,{"_group":1450,"label":1359,"note":1441,"s":1457,"m":1288,"l":1458},1.9,7.9,{"_group":1450,"label":1290,"note":1291,"s":789,"m":789,"l":789},{"_group":1450,"label":1380,"note":1305,"s":1461,"m":1313,"l":1462},-0.1,-0.6,[1464,1466,1469],{"key":1402,"label":1465,"suffix":1136,"decimals":702},"512",{"key":1467,"label":1468,"suffix":1136,"decimals":702},"m","8K",{"key":1470,"label":1471,"suffix":1136,"decimals":702},"l","32K","Model",{"columns":1474,"max":1478,"min":789,"flatBelow":917},[1475,1476,1477],{"key":1402,"label":1465},{"key":1467,"label":1468},{"key":1470,"label":1471},65,{"columns":1480,"max":1478,"min":789,"flatBelow":917},[1481,1482,1483],{"key":1402,"label":1465},{"key":1467,"label":1468},{"key":1470,"label":1471},[1485,1486,1487,1488,1489,1490,1491,1492,1493,1494],{"_group":1433,"label":1352,"note":1434,"s":1435,"m":1125,"l":1436},{"_group":1433,"label":1282,"note":1434,"s":1438,"m":1283,"l":1439},{"_group":1433,"label":1359,"note":1441,"s":1442,"m":1287,"l":1443},{"_group":1433,"label":1290,"note":1291,"s":1445,"m":1131,"l":1446},{"_group":1433,"label":1380,"note":1305,"s":1312,"m":1312,"l":1448},{"_group":1450,"label":1352,"note":1434,"s":1451,"m":1269,"l":1452},{"_group":1450,"label":1282,"note":1434,"s":1454,"m":1284,"l":1455},{"_group":1450,"label":1359,"note":1441,"s":1457,"m":1288,"l":1458},{"_group":1450,"label":1290,"note":1291,"s":789,"m":789,"l":789},{"_group":1450,"label":1380,"note":1305,"s":1461,"m":1313,"l":1462},[1496,1497,1498],{"key":1402,"label":1465,"suffix":1136,"decimals":702},{"key":1467,"label":1468,"suffix":1136,"decimals":702},{"key":1470,"label":1471,"suffix":1136,"decimals":702},"charts\u002Fgpu-unlock\u002Fcontext-depth","xtUD__l3TDcSeOaE9RXXnXRgVOhSZrg6UFqNJmJA_S8",{"id":1502,"title":1503,"extension":679,"footnote":1504,"height":551,"kind":1426,"max":551,"meta":1505,"min":551,"options":1629,"orientation":551,"panels":551,"reference":551,"rows":1635,"series":1682,"stats":551,"stem":1687,"subtitle":1508,"x":551,"xLabel":1472,"yLabel":551,"__hash__":1688},"charts\u002Fcharts\u002Fgpu-unlock\u002Fevery-model.json","Every model I ran, every card I ran it on","Medians of three to five runs. A few rows sit inside their own run-to-run spread, including the ASR rows, the multi-card decode rows, and FLUX.3 Klein on Zotac. FP32 on Zotac (+6%) is inside its spread too. The per-row noise flag is in the summary CSV. Multi-card numbers for Z-Image are left out because of a metric bug on my end.",{"path":1506,"body":1507},"\u002Fcharts\u002Fgpu-unlock\u002Fevery-model",{"title":1503,"subtitle":1508,"kind":1426,"rows":1509,"series":1614,"xLabel":1472,"options":1623,"footnote":1504},"Percent gain from the unlock at 350 W. The brighter the hex, the bigger the gain. Gray means under 3%. Blank means I didn't run that pairing.",[1510,1516,1520,1525,1530,1533,1535,1537,1540,1542,1544,1548,1549,1550,1553,1556,1559,1561,1562,1563,1564,1565,1566,1569,1570,1572,1574,1576,1577,1578,1579,1580,1581,1583,1584,1585,1586,1591,1594,1596,1598,1601,1605,1608,1610,1612],{"_group":1511,"label":1512,"note":551,"strix":1513,"zotac":1514,"pny":1515},"Raw matrix math","BF16 GEMM",62.6,62.1,58.6,{"_group":1511,"label":1517,"note":551,"strix":1518,"zotac":1142,"pny":1519},"FP16 GEMM",58.3,57.6,{"_group":1511,"label":1521,"note":551,"strix":1522,"zotac":1523,"pny":1524},"TF32 GEMM",64.8,77.2,64,{"_group":1511,"label":1526,"note":551,"strix":1527,"zotac":1528,"pny":1529},"BF16 attention (SDPA)",56.5,54.8,55.7,{"_group":1511,"label":1531,"note":551,"strix":789,"zotac":1532,"pny":1461},"FP32 GEMM (control)",6.1,{"_group":875,"label":1122,"note":1164,"strix":1534,"zotac":1125},57.5,{"_group":875,"label":1116,"note":1164,"strix":1527,"zotac":1536,"pny":1119},46.5,{"_group":875,"label":1184,"note":1164,"strix":1538,"zotac":934,"pny":1539},52,48.1,{"_group":875,"label":1177,"note":1178,"strix":1541},50.1,{"_group":875,"label":1190,"note":1191,"pny":1543},40.8,{"_group":875,"label":1198,"note":1191,"strix":1545,"zotac":1546,"pny":1547},35.4,31.8,31.9,{"_group":875,"label":1122,"note":1213,"zotac":1124},{"_group":875,"label":1116,"note":1213,"pny":1118},{"_group":877,"label":1551,"note":1191,"strix":1552},"Wan 2.2 5B",45.9,{"_group":877,"label":1554,"note":1213,"zotac":1555},"LTX 2.5",11.3,{"_group":877,"label":1557,"note":1213,"zotac":1558},"MiniMax H3",7.8,{"_group":1560,"label":1352,"note":1434,"strix":1125,"zotac":1275,"pny":1279},"LLM prefill, 8K prompt",{"_group":1560,"label":1282,"note":1434,"strix":1283},{"_group":1560,"label":1359,"note":1441,"pny":1287},{"_group":1560,"label":1290,"note":1291,"zotac":1131},{"_group":1560,"label":1290,"note":1305,"zotac":1130},{"_group":1560,"label":1396,"note":1305,"strix":1308},{"_group":1560,"label":1380,"note":1305,"strix":1312,"zotac":1567,"pny":1568},-1,0.5,{"_group":1560,"label":1391,"note":1305,"pny":1316},{"_group":1560,"label":1374,"note":1571,"multi":1294},"BF16, 2 cards",{"_group":1560,"label":1380,"note":1573,"multi":1299},"BF16, 4 cards",{"_group":1575,"label":1352,"note":1434,"strix":1269,"zotac":1276,"pny":1280},"LLM decode, 8K prompt",{"_group":1575,"label":1282,"note":1434,"strix":1284},{"_group":1575,"label":1359,"note":1441,"pny":1288},{"_group":1575,"label":1290,"note":1291,"zotac":789},{"_group":1575,"label":1290,"note":1305,"zotac":1304},{"_group":1575,"label":1396,"note":1305,"strix":1309},{"_group":1575,"label":1380,"note":1305,"strix":1313,"zotac":1582,"pny":1313},-0.7,{"_group":1575,"label":1391,"note":1305,"pny":1312},{"_group":1575,"label":1374,"note":1571,"multi":1295},{"_group":1575,"label":1380,"note":1573,"multi":1300},{"_group":1587,"label":1588,"note":1191,"strix":934,"zotac":1589,"pny":1590},"Embeddings and reranking","bge-m3",40.7,39.9,{"_group":1587,"label":1592,"note":1191,"strix":1593},"Qwen3-Embedding-4B",41.2,{"_group":1587,"label":1595,"note":1191,"pny":1435},"mxbai-rerank-large-v2",{"_group":1587,"label":1597,"note":1164,"zotac":1589},"Qwen3-Reranker-4B",{"_group":1599,"label":1600,"note":1191,"zotac":1272},"Speech, vision, and decisions","Whisper large-v3-turbo",{"_group":1599,"label":1602,"note":1164,"strix":1603,"zotac":1269,"pny":1604},"Qwen3-ASR 1.7B",2.4,2.2,{"_group":1599,"label":1606,"note":1607,"pny":1300},"Breeze TTS 2","Q8 GGUF",{"_group":1599,"label":1609,"note":1607,"pny":789},"Parakeet TDT 0.6B",{"_group":1599,"label":1611,"note":1305,"pny":1312},"Qwen3-VL-8B vision",{"_group":1599,"label":1613,"note":1305,"zotac":1312},"Clef-Flash 9B decisions",[1615,1617,1619,1621],{"key":1616,"label":787,"suffix":1136,"decimals":702},"strix",{"key":1618,"label":795,"suffix":1136,"decimals":702},"zotac",{"key":1620,"label":800,"suffix":1136,"decimals":702},"pny",{"key":1622,"label":805,"suffix":1136,"decimals":702},"multi",{"columns":1624,"max":1478,"min":789,"flatBelow":917},[1625,1626,1627,1628],{"key":1616,"label":787},{"key":1618,"label":795},{"key":1620,"label":800},{"key":1622,"label":805},{"columns":1630,"max":1478,"min":789,"flatBelow":917},[1631,1632,1633,1634],{"key":1616,"label":787},{"key":1618,"label":795},{"key":1620,"label":800},{"key":1622,"label":805},[1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681],{"_group":1511,"label":1512,"note":551,"strix":1513,"zotac":1514,"pny":1515},{"_group":1511,"label":1517,"note":551,"strix":1518,"zotac":1142,"pny":1519},{"_group":1511,"label":1521,"note":551,"strix":1522,"zotac":1523,"pny":1524},{"_group":1511,"label":1526,"note":551,"strix":1527,"zotac":1528,"pny":1529},{"_group":1511,"label":1531,"note":551,"strix":789,"zotac":1532,"pny":1461},{"_group":875,"label":1122,"note":1164,"strix":1534,"zotac":1125},{"_group":875,"label":1116,"note":1164,"strix":1527,"zotac":1536,"pny":1119},{"_group":875,"label":1184,"note":1164,"strix":1538,"zotac":934,"pny":1539},{"_group":875,"label":1177,"note":1178,"strix":1541},{"_group":875,"label":1190,"note":1191,"pny":1543},{"_group":875,"label":1198,"note":1191,"strix":1545,"zotac":1546,"pny":1547},{"_group":875,"label":1122,"note":1213,"zotac":1124},{"_group":875,"label":1116,"note":1213,"pny":1118},{"_group":877,"label":1551,"note":1191,"strix":1552},{"_group":877,"label":1554,"note":1213,"zotac":1555},{"_group":877,"label":1557,"note":1213,"zotac":1558},{"_group":1560,"label":1352,"note":1434,"strix":1125,"zotac":1275,"pny":1279},{"_group":1560,"label":1282,"note":1434,"strix":1283},{"_group":1560,"label":1359,"note":1441,"pny":1287},{"_group":1560,"label":1290,"note":1291,"zotac":1131},{"_group":1560,"label":1290,"note":1305,"zotac":1130},{"_group":1560,"label":1396,"note":1305,"strix":1308},{"_group":1560,"label":1380,"note":1305,"strix":1312,"zotac":1567,"pny":1568},{"_group":1560,"label":1391,"note":1305,"pny":1316},{"_group":1560,"label":1374,"note":1571,"multi":1294},{"_group":1560,"label":1380,"note":1573,"multi":1299},{"_group":1575,"label":1352,"note":1434,"strix":1269,"zotac":1276,"pny":1280},{"_group":1575,"label":1282,"note":1434,"strix":1284},{"_group":1575,"label":1359,"note":1441,"pny":1288},{"_group":1575,"label":1290,"note":1291,"zotac":789},{"_group":1575,"label":1290,"note":1305,"zotac":1304},{"_group":1575,"label":1396,"note":1305,"strix":1309},{"_group":1575,"label":1380,"note":1305,"strix":1313,"zotac":1582,"pny":1313},{"_group":1575,"label":1391,"note":1305,"pny":1312},{"_group":1575,"label":1374,"note":1571,"multi":1295},{"_group":1575,"label":1380,"note":1573,"multi":1300},{"_group":1587,"label":1588,"note":1191,"strix":934,"zotac":1589,"pny":1590},{"_group":1587,"label":1592,"note":1191,"strix":1593},{"_group":1587,"label":1595,"note":1191,"pny":1435},{"_group":1587,"label":1597,"note":1164,"zotac":1589},{"_group":1599,"label":1600,"note":1191,"zotac":1272},{"_group":1599,"label":1602,"note":1164,"strix":1603,"zotac":1269,"pny":1604},{"_group":1599,"label":1606,"note":1607,"pny":1300},{"_group":1599,"label":1609,"note":1607,"pny":789},{"_group":1599,"label":1611,"note":1305,"pny":1312},{"_group":1599,"label":1613,"note":1305,"zotac":1312},[1683,1684,1685,1686],{"key":1616,"label":787,"suffix":1136,"decimals":702},{"key":1618,"label":795,"suffix":1136,"decimals":702},{"key":1620,"label":800,"suffix":1136,"decimals":702},{"key":1622,"label":805,"suffix":1136,"decimals":702},"charts\u002Fgpu-unlock\u002Fevery-model","kbEoPVLMT1ywQDr4LQHSm-GtS7L9-HwxrTLeb8I35vA",{"id":1690,"title":1691,"extension":679,"footnote":1692,"height":1693,"kind":1257,"max":1694,"meta":1695,"min":1701,"options":1765,"orientation":551,"panels":551,"reference":551,"rows":1766,"series":1784,"stats":1786,"stem":1790,"subtitle":1698,"x":1262,"xLabel":1699,"yLabel":1700,"__hash__":1791},"charts\u002Fcharts\u002Fgpu-unlock\u002Fenergy-vs-speed.json","Faster also means cheaper","GPU power only, sampled across each job. Whisper is the odd one out: it got 12% faster and used 22.5% more energy, and I can't explain that yet. bge-m3 jobs last about a second, so its energy number is rough.",460,50,{"path":1696,"body":1697},"\u002Fcharts\u002Fgpu-unlock\u002Fenergy-vs-speed",{"title":1691,"subtitle":1698,"kind":1257,"x":1262,"xLabel":1699,"yLabel":1700,"height":1693,"min":1701,"max":1694,"rows":1702,"series":1749,"options":1752,"stats":1755,"footnote":1692},"GPU energy saved per job against speed gained. Up and to the right is free money. Hover a dot to see which model it is.","Speed gain (%)","Energy saved (%)",-30,[1703,1707,1710,1713,1716,1720,1723,1725,1727,1730,1731,1733,1736,1738,1741,1744,1747],{"label":1704,"show":1704,"x":1534,"y":1705,"_group":875,"_color":702,"_pos":1706,"_size":816,"_phone":69},"Qwen-Image",37.4,"right",{"label":1708,"show":1708,"x":1527,"y":1709,"_group":875,"_color":702,"_pos":1271,"_size":816,"_phone":542},"FLUX.3",41.1,{"label":1711,"show":519,"x":1538,"y":1712,"_group":875,"_color":702,"_pos":1301,"_size":816,"_phone":69},"Z-Image",35,{"label":1714,"show":1714,"x":1541,"y":1715,"_group":875,"_color":702,"_pos":1301,"_size":816,"_phone":69},"Krea-2",35.6,{"label":1717,"show":519,"x":1543,"y":1718,"_group":875,"_color":702,"_pos":1719,"_size":816,"_phone":69},"WAI",31.7,"left",{"label":1721,"show":1721,"x":1545,"y":1722,"_group":875,"_color":702,"_pos":1719,"_size":816,"_phone":69},"SDXL",30.5,{"label":1220,"show":1220,"x":1118,"y":1724,"_group":875,"_color":702,"_pos":1271,"_size":816,"_phone":542},1.7,{"label":1212,"show":519,"x":1124,"y":1726,"_group":875,"_color":702,"_pos":1706,"_size":816,"_phone":69},9.6,{"label":1728,"show":1728,"x":1552,"y":1729,"_group":877,"_color":520,"_pos":1301,"_size":816,"_phone":69},"Wan 2.2",32.1,{"label":1554,"show":1554,"x":1555,"y":944,"_group":877,"_color":520,"_pos":1271,"_size":816,"_phone":69},{"label":1557,"show":519,"x":1558,"y":1732,"_group":877,"_color":520,"_pos":1301,"_size":816,"_phone":69},9.4,{"label":1734,"show":519,"x":1593,"y":1735,"_group":1587,"_color":917,"_pos":1271,"_size":816,"_phone":69},"Qwen3 Embedding",29.1,{"label":1588,"show":1588,"x":934,"y":1737,"_group":1587,"_color":917,"_pos":1301,"_size":816,"_phone":542},3.4,{"label":1739,"show":519,"x":1435,"y":1740,"_group":1587,"_color":917,"_pos":1301,"_size":816,"_phone":69},"mxbai rerank",18.4,{"label":1742,"show":1742,"x":1589,"y":1743,"_group":1587,"_color":917,"_pos":1301,"_size":816,"_phone":69},"Qwen3 rerank",23,{"label":1745,"show":1745,"x":1272,"y":1746,"_group":883,"_color":909,"_pos":1706,"_size":816,"_phone":542},"Whisper",-22.5,{"label":1748,"show":1748,"x":1603,"y":1603,"_group":883,"_color":909,"_pos":1301,"_size":816,"_phone":69},"Qwen3-ASR",[1750],{"key":1319,"label":1751,"suffix":1136,"decimals":702},"Energy saved",{"xMin":1753,"xMax":1754,"pointLabelKey":1323,"xSuffix":1136},-8,68,[1756,1759,1762],{"value":1757,"label":1758},"30 to 41%","less energy per image on BF16 and FP16 models",{"value":1760,"label":1761},"32%","less energy per Wan 2.2 video",{"value":1763,"label":1764},"10 W","or less change in average draw on those jobs",{"xMin":1753,"xMax":1754,"pointLabelKey":1323,"xSuffix":1136},[1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783],{"label":1704,"show":1704,"x":1534,"y":1705,"_group":875,"_color":702,"_pos":1706,"_size":816,"_phone":69},{"label":1708,"show":1708,"x":1527,"y":1709,"_group":875,"_color":702,"_pos":1271,"_size":816,"_phone":542},{"label":1711,"show":519,"x":1538,"y":1712,"_group":875,"_color":702,"_pos":1301,"_size":816,"_phone":69},{"label":1714,"show":1714,"x":1541,"y":1715,"_group":875,"_color":702,"_pos":1301,"_size":816,"_phone":69},{"label":1717,"show":519,"x":1543,"y":1718,"_group":875,"_color":702,"_pos":1719,"_size":816,"_phone":69},{"label":1721,"show":1721,"x":1545,"y":1722,"_group":875,"_color":702,"_pos":1719,"_size":816,"_phone":69},{"label":1220,"show":1220,"x":1118,"y":1724,"_group":875,"_color":702,"_pos":1271,"_size":816,"_phone":542},{"label":1212,"show":519,"x":1124,"y":1726,"_group":875,"_color":702,"_pos":1706,"_size":816,"_phone":69},{"label":1728,"show":1728,"x":1552,"y":1729,"_group":877,"_color":520,"_pos":1301,"_size":816,"_phone":69},{"label":1554,"show":1554,"x":1555,"y":944,"_group":877,"_color":520,"_pos":1271,"_size":816,"_phone":69},{"label":1557,"show":519,"x":1558,"y":1732,"_group":877,"_color":520,"_pos":1301,"_size":816,"_phone":69},{"label":1734,"show":519,"x":1593,"y":1735,"_group":1587,"_color":917,"_pos":1271,"_size":816,"_phone":69},{"label":1588,"show":1588,"x":934,"y":1737,"_group":1587,"_color":917,"_pos":1301,"_size":816,"_phone":542},{"label":1739,"show":519,"x":1435,"y":1740,"_group":1587,"_color":917,"_pos":1301,"_size":816,"_phone":69},{"label":1742,"show":1742,"x":1589,"y":1743,"_group":1587,"_color":917,"_pos":1301,"_size":816,"_phone":69},{"label":1745,"show":1745,"x":1272,"y":1746,"_group":883,"_color":909,"_pos":1706,"_size":816,"_phone":542},{"label":1748,"show":1748,"x":1603,"y":1603,"_group":883,"_color":909,"_pos":1301,"_size":816,"_phone":69},[1785],{"key":1319,"label":1751,"suffix":1136,"decimals":702},[1787,1788,1789],{"value":1757,"label":1758},{"value":1760,"label":1761},{"value":1763,"label":1764},"charts\u002Fgpu-unlock\u002Fenergy-vs-speed","-5OMZlOCURL8VCphj39SnKX0bJmyG1zl_5rdCdJGgBY",{"id":1793,"title":1794,"extension":679,"footnote":1795,"height":1796,"kind":1797,"max":1322,"meta":1798,"min":1805,"options":1843,"orientation":551,"panels":551,"reference":551,"rows":1847,"series":1852,"stats":551,"stem":1857,"subtitle":1801,"x":1802,"xLabel":1803,"yLabel":1804,"__hash__":1858},"charts\u002Fcharts\u002Fgpu-unlock\u002Fpower-curve.json","The more power you feed it, the more it pays","One run per point, so read the shape. The FP32 control moved up to about 3% across this sweep, which is the noise floor. Going to 390 W on Strix-B added another 4 to 7% on compute work and under 1% on decode.",360,"line",{"path":1799,"body":1800},"\u002Fcharts\u002Fgpu-unlock\u002Fpower-curve",{"title":1794,"subtitle":1801,"kind":1797,"x":1802,"xLabel":1803,"yLabel":1804,"height":1796,"min":1805,"max":1322,"rows":1806,"series":1826,"options":1833,"footnote":1795},"BF16 gain from the unlock at each power limit, on all three cards, with the FP32 control along the bottom.","watts","Power limit","Gain",-5,[1807,1812,1816,1820],{"watts":1808,"strix":809,"zotac":1809,"pny":1810,"ctl":1811},200,26.8,22.4,-1.8,{"watts":778,"strix":1813,"zotac":1814,"pny":1815,"ctl":1304},24.6,34.1,22.1,{"watts":1817,"strix":1818,"zotac":1529,"pny":1819,"ctl":1724},300,47.6,40.9,{"watts":1821,"strix":1822,"zotac":1823,"pny":1824,"ctl":1825},350,61.1,60.5,59.6,0.9,[1827,1828,1829,1830],{"key":1616,"label":787,"color":702,"suffix":1136,"decimals":702},{"key":1618,"label":795,"color":520,"suffix":1136,"decimals":702},{"key":1620,"label":800,"color":917,"suffix":1136,"decimals":702},{"key":1831,"label":1832,"color":790,"suffix":1136,"decimals":702},"ctl","FP32 control",{"xSuffix":1834,"endLabels":69,"points":1835}," W",[1836,1839],{"x":1821,"y":1822,"text":1837,"sub":1838,"align":1719},"~60%","at 350 W",{"x":1808,"y":1840,"text":1841,"sub":1842,"align":1706},27,"21 to 27%","at 200 W",{"xSuffix":1834,"endLabels":69,"points":1844},[1845,1846],{"x":1821,"y":1822,"text":1837,"sub":1838,"align":1719},{"x":1808,"y":1840,"text":1841,"sub":1842,"align":1706},[1848,1849,1850,1851],{"watts":1808,"strix":809,"zotac":1809,"pny":1810,"ctl":1811},{"watts":778,"strix":1813,"zotac":1814,"pny":1815,"ctl":1304},{"watts":1817,"strix":1818,"zotac":1529,"pny":1819,"ctl":1724},{"watts":1821,"strix":1822,"zotac":1823,"pny":1824,"ctl":1825},[1853,1854,1855,1856],{"key":1616,"label":787,"color":702,"suffix":1136,"decimals":702},{"key":1618,"label":795,"color":520,"suffix":1136,"decimals":702},{"key":1620,"label":800,"color":917,"suffix":1136,"decimals":702},{"key":1831,"label":1832,"color":790,"suffix":1136,"decimals":702},"charts\u002Fgpu-unlock\u002Fpower-curve","8aUvzBvqXGVCNnQYTuxiFUDEYBb0aE1SSGLn8ATMjeA",1793805193784]