logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·27.10.26
← Back to news

GPU-unlock: FP/BF16 instruction issue rate on Nvidia 3000's cards

Original article
github.com|319 points|74 comments|by fragebogen|Oct 24, 2026

GPU-unlock: Enhancing FP/BF16 Instruction Rates for Nvidia 3000 Series

This project, hosted on GitHub by Zagitta, provides a method to unlock the FP/BF16 instruction issue rates on Nvidia 3000-series consumer cards, bringing them in line with their professional counterparts.

🛠️ Technical Overview

The gpu-unlock tool is a Linux kernel module (kmod) that implements a hybrid approach to unlocking. It merges the V67/PLM technique (from the CMP unlocker) with the pre-driver timing typically associated with UEFI-based methods.

How it Works

The module executes the unlock sequence before the standard NVIDIA driver binds to the hardware. The process follows this logic:

  1. Unlock Execution: Initiates the unlock sequence.
  2. Speed Selector Configuration:
    • Sets SS0 to 0x88888888 (enabling full BF16 rates).
    • Sets the 4-bit SS1 to 0x8 (IMLA4).
  3. Reset: Performs a Function Level Reset (FLR).
  4. Driver Binding: The unmodified NVIDIA driver then takes control of the card.

Key Advantage: Because this is an early-loading kernel module and not a patched NVIDIA driver, users do not need to manually re-patch their drivers every time a new NVIDIA version is released.

Boot Sequence Logic


🚀 Performance Impact

The primary effect is a doubling of the instruction issuing speed for FP/BF16 FMA →\rightarrow→ FP32 operations. This applies to cards utilizing the GA102, GA103, GA104, and GA106 chips.

Benchmark: RTX 3090 Ti

Dense 819238192^381923 GEMM at 450 W (Median of 5 samples, FP32 accumulation)

PrecisionBefore UnlockAfter Unlock
FP1687.46 TFLOPS87.46 \text{ TFLOPS}87.46 TFLOPS118.39 TFLOPS118.39 \text{ TFLOPS}118.39 TFLOPS
BF1687.50 TFLOPS87.50 \text{ TFLOPS}87.50 TFLOPS157.41 TFLOPS157.41 \text{ TFLOPS}157.41 TFLOPS
TF3242.58 TFLOPS42.58 \text{ TFLOPS}42.58 TFLOPS82.61 TFLOPS82.61 \text{ TFLOPS}82.61 TFLOPS

Compatibility & User Reports

The module supports all GeForce IDs found in kernel/gpu_unlock/main.c. Below is a summary of reported results:

ChipCardPCI IDStatusBF16 GEMM GainReports
GA102RTX 3090 Ti10de:2203Unlocked+68–80%+68\text{--}80\%+68–80%#1
GA102RTX 309010de:2204Unlocked+25–67%+25\text{--}67\%+25–67%#5, #9, #10...
GA102RTX 3080 Ti 20GB (OEM)10de:2205PartialHalf rate#28
GA102RTX 3080 10GB10de:2206Unlocked+70–73%+70\text{--}73\%+70–73%#14
GA102RTX 3080 20GB (Mod)10de:2206Unlocked+56–59%+56\text{--}59\%+56–59%#10, #15
GA104RTX 307010de:2484Unlocked+73–81%+73\text{--}81\%+73–81%#10, #12
GA104RTX 3070 Ti10de:2482UntestedN/A#32
GA106RTX 3060 12GB10de:2504Unlocked≈+80%\approx +80\%≈+80%#13, #31
GA103Any10de:2414UnknownNo reports—

Note: Gains vary based on benchmarks used. Power limits are critical; for instance, the lower +25%+25\%+25% gain was observed on cards capped at 225W225\text{W}225W.

Real-World Application

  • Accelerated: Matrix-heavy tasks such as FlashAttention, Diffusion models, and LLM prefill (increases of +14–36%+14\text{--}36\%+14–36%).
  • Neutral: LLM decode (bottlenecked by memory bandwidth) and INT8 operations remain unchanged.
  • Accuracy: Outputs are confirmed to be bit-identical regardless of the unlock.
  • Versatility: Confirmed working with up to 4 GPUs, primary display cards, and vfio-pci VM passthrough.

📦 Installation Guide

Initial Setup

  • Clone the repository: git clone https://github.com/Zagitta/gpu-unlock
  • Enter directory: cd gpu-unlock
  • Install: make install

Kernel Configuration

You must append gpu_unlock.targets=all to your kernel command line. Depending on your bootloader:

  • GRUB (Debian/Ubuntu/Mint): Edit /etc/default/grub →\rightarrow→ GRUB_CMDLINE_LINUX_DEFAULT →\rightarrow→ sudo update-grub.
  • GRUB (Arch/CachyOS): Edit config →\rightarrow→ sudo grub-mkconfig -o /boot/grub/grub.cfg.
  • Fedora/RHEL: sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all".
  • systemd-boot: Add to the options line (check bootctl status for path).
  • UKI: Add to /etc/kernel/cmdline and regenerate images.

🛠️ Build System & Distribution

The build process is automated and secure, downloading pinned NVIDIA/CachyOS inputs via HTTPS and verifying them with SHA-256 hashes.

Installation Targets

The make install command automatically detects your OS via /etc/os-release. You can also specify targets manually:

TargetDistribution FamilyAction
make install-archArch LinuxUses makepkg -sif
make install-debDebian/UbuntuUses dpkg-buildpackage
make install-rpmFedora/RHEL/CentOSUses rpmbuild

Developer Notes:

  • Inputs are cached at ~/.cache/gpu-unlock/inputs.
  • To use a clean-chroot build (e.g., sbuild), set the GPU_UNLOCK_INPUTS environment variable.
  • The make dist archive and source packages do not contain NVIDIA binaries or firmware.

Boot Flow & Initramfs

To minimize display downtime, the module is loaded into the initramfs before the NVIDIA driver:

  • mkinitcpio: A config file at /etc/mkinitcpio.conf.d/zz-gpu-unlock.conf ensures gpu_unlock is placed immediately before nvidia in the MODULES array.
  • If nvidia is not in the image, gpu_unlock loads last but still precedes any driver loaded from the root filesystem.

Zagitta Avatar