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
nvidiahas already bound. - Display cards go blank. The screen is blank from the card's reset until
nvidia-drmtakes 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: