A Linux kernel module called GPU-unlock changes how fast RTX 30-series cards issue FP/BF16 instructions. It runs before the NVIDIA driver binds the card and sets the card's speed selectors to the "professional equivalent" rate. On a 3090 Ti, that takes dense BF16 GEMM from 87.50 to 157.41 TFLOPS. It does not help token generation.

I have not run it myself. Everything below comes from the project's README and its user-submitted reports.

What the module does

According to the README, the module combines the CMP unlocker's V67/PLM technique with the pre-driver timing of the UEFI approach. It writes the speed selectors (SS0 0x88888888, which selects the full BF16 rate, and the 4-bit SS1 0x8 IMLA4). Then it performs a function-level reset (FLR) before the unmodified NVIDIA driver binds the card.

It is neither a UEFI app nor a patched NVIDIA driver. So it should not need re-patching with each new driver release. The effect is a doubled issue rate for FP/BF16 FMA into FP32 on GA102, GA103, GA104 and GA106.

The numbers

The maintainer's own benchmark: 3090 Ti, dense 8192³ GEMM, 450 W, five-sample medians, FP32 accumulation.

Input Before After Change
FP16 87.46 TFLOPS 118.39 TFLOPS +35%
BF16 87.50 TFLOPS 157.41 TFLOPS +80%
TF32 42.58 TFLOPS 82.61 TFLOPS +94%

User reports on other cards (BF16 GEMM gain, each from the reporter's own benchmark):

Card Result BF16 GEMM gain
RTX 3090 Ti Unlocked +68–80%
RTX 3090 Unlocked +25–67%
RTX 3080 Ti 20 GB (OEM, GA102-250) Unlock completes, BF16 stays at half rate none
RTX 3080 10 GB Unlocked +70–73%
RTX 3080 20 GB (memory upgrade) Unlocked +56–59%
RTX 3070 Unlocked +73–81%
RTX 3060 12 GB Unlocked about +80%
RTX 3070 Ti Not tested with this module (same unlock worked from a UEFI port on Windows) not stated
GA103 cards No reports yet not stated

The README says the figures are not directly comparable between reports. Power limit matters: the lowest figure, +25%, comes from cards capped at 225 W.

Where this helps local inference, and where it doesn't

Matrix-heavy work speeds up. The README lists LLM prefill gains of +14–36% across four reports, plus diffusion and FlashAttention.

LLM decode is limited by memory bandwidth, and INT8 work stays about the same. If your workload is single-user chat with short prompts, expect little. If you feed long contexts, run agents with large prompts, or generate images, prefill and compute-bound kernels matter more.

The reports that compared outputs found them bit-identical before and after.

This is a way to extract more from a used 3090 rather than pay up for new silicon. As covered in the RTX 5090 street-price post, new top-end cards are expensive right now.

Install and opt-in

The README's install is two steps:

git clone https://github.com/Zagitta/gpu-unlock
cd gpu-unlock
make install

Then add gpu_unlock.targets=all to the kernel command line. You can also target specific cards by full PCI address as lspci -D prints it, for example gpu_unlock.targets=0000:21:00.0. The module does nothing without that opt-in.

The README gives per-distro bootloader steps. For Fedora/RHEL: sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all". Check the result with:

journalctl -k -b | grep gpu_unlock

To undo it, remove the parameter from the kernel command line.

Tradeoffs

  • Linux only. It is a kernel module, and the packaging covers Arch, Debian/Ubuntu and Fedora/RHEL families.
  • Boot-time only. Loading it by hand after boot does nothing to a card that nvidia has already bound.
  • Display cards go blank. The screen is blank from the card's reset until nvidia-drm takes over.
  • Suspend and hibernate. Suspend to RAM resets the selectors. The module re-unlocks after resume, which adds about a second. Hibernation is not covered.
  • Hung firmware. If the firmware on a card never stops, you must power off before retrying.
  • Board quirks. Supermicro X11 boards leave bus mastering on regardless of settings. The module clears it first.
  • Not every card unlocks. The OEM 3080 Ti 20 GB stayed at half rate.
  • Licensing. The kernel module is GPL-2.0-only, but the generated payload derives from the pinned CMP reference. NVIDIA firmware stays under its own terms.

The data is user-reported, 23 commits in, with 57 open issues. I would try it on a spare card first, not on the only GPU in a production box. Run your own prefill benchmark before and after, because the README says gains vary with power limit.

Sources: