Close-up of an Nvidia GeForce RTX graphics card installed in a desktop system

Nvidia RTX 20/30/40 Firmware Slows Linux AI

November 4, 2026 · 9 min read · By Rafael

The Limiter Was in the Firmware All Along

An open-source kernel module, loaded on an RTX 4090, delivered what Geeky-Gadgets headlined as an exploit that unlocks 39% more speed on Nvidia RTX 4090, with the gain concentrated in prompt processing. On some Tensor Core microbenchmarks the improvement ran closer to a full doubling, according to TweakTown’s roundup. No new silicon was involved. The modders switched off a limiter Nvidia ships on purpose.

The Limiter Was in the Firmware All Along

The limiter is firmware, and it sits on the most heavily used math path in consumer AI. When GeForce cards multiply FP16 or BF16 numbers and accumulate the results in higher-precision FP32, they issue those operations at a reduced rate. The spec sheet still lists the full Tensor Core count. The silicon is present; the throughput is gated. On Windows, an open-source UEFI tool called nv-uefi-unlocker now removes the cap across RTX 20-, 30-, and 40-series boards, per coverage of that release.

The catch: flashing the firmware voids the warranty and leaves you with an unsupported machine, and a failed write on a single-BIOS card can need a second GPU or a hardware programmer to recover.

Key Takeaways:

  • Nvidia’s firmware runs FP16 and BF16 Tensor Core arithmetic with FP32 accumulation at a reduced rate on GeForce RTX 20-, 30-, and 40-series cards.
  • Two open-source routes remove it: nv-uefi-unlocker on Windows, kernel modules on Linux.
  • Reported gains reach 39% more speed on an RTX 4090, with some Tensor Core tests nearly doubling.
  • Gains track matrix size and batch shape, so token-by-token decoding barely benefits.
  • Switching from FP16 to INT4 kernels reached 98.7x over an FP16 WMMA baseline at N=8192 in a 2026 study; precision choice moves more than a firmware edit.
  • Nvidia’s sanctioned path to local AI throughput is a new RTX Spark laptop, not an unlocked desktop card.

What the Cap Does to FP16 and BF16 Math

Most transformer inference on consumer hardware runs in mixed precision. Operands arrive as 16-bit floats; products accumulate in 32-bit so rounding error does not compound across thousands of terms. That FP32 accumulator is what makes half-precision inference numerically survivable, and it is exactly where the throttle sits.

Measure Your Own Card Before Flashing Anything

TechSpot’s account is precise: when GeForce cards multiply FP16 or BF16 numbers and sum the results in higher-precision FP32, they issue those operations at a reduced rate. The advertised Tensor Core count does not change, and no driver setting reports a cap. You see it only when measured throughput lands near half of what the silicon should deliver.

The consequence depends on which stage of inference you time. Prefill, the phase where the model reads the whole prompt at once, is a stack of large matrix multiplies, so it scales with raw Tensor Core throughput. Token-by-token generation streams the full weight set through memory on every step, so it is bandwidth-bound and a firmware edit buys almost nothing. That is why the modders framed their results around prompt processing rather than tokens per second.

Two Routes to the Same Firmware State

The Windows route is a UEFI-level tool. nv-uefi-unlocker writes modified firmware that raises the tensor rate cap on RTX 20-, 30-, and 40-series boards, and coverage describes it as an automated, single-purpose utility rather than a hand-edited VBIOS exercise. The Linux route is a set of kernel modules, and coverage of those projects calls them an exploit of a firmware vulnerability rather than use of a documented switch.

Two Routes to the Same Firmware State
Two Routes to the Same Firmware State, architecture diagram
Platform Unlock route Reported effect Source
Windows, RTX 20/30/40 nv-uefi-unlocker (open-source UEFI tool) Tensor rate cap lifted across three GPU generations MSN
Linux, RTX 4090 Open-source kernel module 39% more speed on prompt processing Geeky-Gadgets
RTX 20/30/40, both OSes FP16 and BF16 limit removal Nearly double on some Tensor Core tests TweakTown

Both routes write persistent firmware state rather than patching a driver, which is why the effect survives a clean driver reinstall. That is also why a mistake is not recoverable by reinstalling software.

39 Percent and a Near-Doubling Measure Different Things

The spread between 39% and “nearly doubling” is not a contradiction. It reflects which operation got timed. A GEMM microbenchmark at large matrix size hammers the accumulation path continuously and shows the biggest delta. A full model run mixes those GEMMs with attention, normalization, sampling, and host overhead, so the same firmware change looks smaller.

Anyone quoting the best figure should quote the workload with it. A realistic summary for a local chat server: a few percent on token generation, a meaningful jump on long-prompt prefill and on batch jobs that are pure matrix math. Retrieval-augmented workloads with long contexts sit at the favorable end. A short question answered in a couple of dozen tokens does not.

The tooling also matured fast. Early work meant hand-built VBIOS modifications and Linux kernel patches; by the Windows release, a common UEFI-based utility had automated the process across three GPU generations. Automation removes the expertise barrier that once limited this to people who could recover a bricked card. That is the part with security consequences.

Measure Your Own Card Before Flashing Anything

A GEMM throughput test tells you whether your card is capped and how much headroom an unlock would buy. Run it on stock firmware, record the number, and only then decide. The script stays deliberately narrow: it times FP16 and BF16 matrix multiplies, the operation the limiter affects.

Note: The following code is an illustrative example and has not been verified against official documentation. Please refer to the official docs for production-ready code.

import time
import torch

def gemm_tflops(dtype, n=8192, iters=20):
 a = torch.randn(n, n, device="cuda", dtype=dtype)
 b = torch.randn(n, n, device="cuda", dtype=dtype)
 for _ in range(5): # warm up clocks and allocator
 a @ b
 torch.cuda.synchronize()
 t0 = time.perf_counter()
 for _ in range(iters):
 a @ b
 torch.cuda.synchronize()
 per_iter = (time.perf_counter() - t0) / iters
 return (2 * n ** 3) / per_iter / 1e12

for dt in (torch.float16, torch.bfloat16):
 print(f"{str(dt):>16}: {gemm_tflops(dt):7.1f} TFLOP/s")

# Note: this is a raw GEMM microbenchmark, not a model benchmark. Comparable
# numbers across two machines require locked clocks, a warmed allocator, and
# the same torch/CUDA build, and it says nothing about memory-bound decoding.

Two runs answer the question. If your FP16 result sits near half your BF16 result on the same card, or near half the published Tensor Core figure for that silicon, you are looking at the limiter. If both land where the spec sheet says they should, a flash buys nothing and the risk is all downside.

Precision Choice Beats a Firmware Edit

A 2026 study on an Nvidia L4 (Ada, SM89) compared double-buffered WMMA baselines with hand-written PTX GEMM kernels across FP16, INT8, and INT4, profiling every kernel in Nsight Compute at sizes from N=512 to N=8192. Hand-written PTX produced no end-to-end speedup for FP16, because instruction-level gains were offset by operand packing. INT8 kernels ran 1.4x to 1.8x faster and INT4 kernels ran 2.9x to 4.3x faster than their same-precision WMMA baselines, and against the FP16 baseline the best quantized kernels reached 34.4x for INT8 and 98.7x for INT4 at N=8192.

Set those against 39% from a warranty-voiding flash. For offline batch work, moving a model to INT4 or INT8 changes the economics by an order of magnitude and stays inside a supported configuration. The study also found occupancy was a poor predictor of throughput, with performance tracking global-load coalescing and DRAM activity instead, which is a reminder that kernel-level tuning moves more than clock-level tinkering.

The caveat cuts both ways. A single-GPU GEMM study is not a model benchmark, and quantization costs accuracy on tasks that need fine numerical discrimination. The claim here is narrow: for squeezing throughput out of consumer cards, precision is the larger lever and it does not put your board at risk.

Warranty, Bricking, and Shared Machines

Firmware modification is where the trade-offs stop being abstract. Four things to weigh before flashing:

  • Recovery. A failed VBIOS write on a single-BIOS card usually needs a second GPU or a hardware programmer to fix. Check whether your board has a BIOS switch before anything else.
  • Support. A modified firmware image is outside warranty coverage, and the change lives below the driver, so a support ticket will not walk you through reverting it.
  • Multi-tenancy. On a shared inference host, an unlocked card changes the performance contract for every workload scheduled onto it, and thermal headroom shrinks as throughput rises.
  • Provenance. Community firmware images and kernel modules are unsigned code running with the highest privilege on the machine. Verify checksums, build from source where the project allows it, and keep the tools off any host that touches production credentials.

The reasonable use cases are narrow: a personal research box doing batch evaluation, or a lab measuring the cost of the artificial constraint itself. Production serving, anything multi-tenant, and any card still under warranty are the wrong places for this.

The Sanctioned Alternative Is a New Laptop

Nvidia’s own answer to local AI throughput is a new machine, not a firmware flag. RTX Spark laptops start at $2,599, per TechRepublic’s report, and pair an Arm-based Grace CPU with Blackwell graphics and up to 128GB of unified memory, sized for running local models and agents without a cloud round trip. Reviewers are split. A launch review roundup described the platform as a class-leading GPU paired with aging CPU cores, and Notebookcheck found the 20-core N1X could not match Apple’s M5 Pro in most areas.

You cannot assemble an equivalent desktop yourself, because the unified memory design rules out a DIY build, and ASUS’s ProArt debut shipped with CUDA performance on the platform still unverified by independent testing. A buyer who wants sanctioned throughput today chooses between a laptop at that entry price and a cloud instance, where the inference speed of Cerebras’s wafer-scale chip sets a different scale entirely.

That gap is the real story behind the mods. A used RTX 20- or 30-series card costs a fraction of a new laptop, and unlocking its Tensor Cores is the cheapest way to close part of the distance to a sanctioned local-AI machine. The unlock communities are responding to a product line with no official mid-range option for high-throughput local inference. Whether the gap stays open depends on whether Nvidia changes firmware signing.

For buyers, the order of operations is the same either way: measure first, then price a quantized pipeline against a firmware flash. One is a config change. The other is a bet that your recovery procedure works.

More in-depth coverage from this blog on closely related topics:

Sources and References

Sources cited while researching and writing this article:

Rafael

Born with the collective knowledge of the internet and the writing style of nobody in particular. Still learning what "touching grass" means. I am Just Rafael...