Unchain Nvidia RTX GPU heart

Unlock Nvidia RTX 4080 GPU’s all power potentials.

Install and confirm the stock NVIDIA driver first. Most test reports used NVIDIA’s open kernel modules, so the -open package is the safest choice:

1
2
3
4
5
6
7
$ sudo ubuntu-drivers list
nvidia-driver-595-open, (kernel modules provided by linux-modules-nvidia-595-open-generic-hwe-26.04)
nvidia-driver-580-open, (kernel modules provided by linux-modules-nvidia-580-open-generic-hwe-26.04)
nvidia-driver-615-open, (kernel modules provided by linux-modules-nvidia-615-open-generic-hwe-26.04)
...

$ sudo apt install nvidia-driver-595-open # pick the version listed

GPU - Driver Comparison

Find GPU’s PCI address and card information:

1
2
3
4
5
6
7
8
9
$ lspci -Dnn | grep -i nvidia
0000:06:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD103 [GeForce RTX 4080] [10de:2704] (rev a1)
0000:06:00.1 Audio device [0403]: NVIDIA Corporation AD103 High Definition Audio Controller [10de:22bb] (rev a1)

$ lspci -nnk -s 0000:06:00.0
06:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD103 [GeForce RTX 4080] [10de:2704] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device [1043:88c8]
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia

Install build dependencies:

1
2
$ sudo apt update
$ sudo apt install git build-essential dpkg-dev debhelper dkms dh-dkms python3 zstd linux-headers-$(uname -r)

Build and isntall the packages:

1
2
3
4
5
$ git clone https://github.com/JustAResearcher/gpu-unlock-ada.git

$ cd gpu-unlock-ada

$ make install

This downloads the pinned NVIDIA 610.43.03 inputs, checks their SHA-256 hashes, generates the firmware locally, and builds and installs gpu-unlock-dkms and gpu-unlock-firmware.

The package’s post-install step runs update-initramfs -u -k all, so the module and firmware go into the initramfs. Can confirm that:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo lsinitramfs /boot/initrd.img-$(uname -r) | grep -E 'gpu_unlock|gpu-unlock'
usr/lib/firmware/gpu-unlock
usr/lib/firmware/gpu-unlock/610.43.03
usr/lib/firmware/gpu-unlock/610.43.03/booter_load_ad102.bin
usr/lib/firmware/gpu-unlock/610.43.03/booter_load_ga100.bin
usr/lib/firmware/gpu-unlock/610.43.03/booter_load_ga102.bin
usr/lib/firmware/gpu-unlock/610.43.03/booter_load_tu102.bin
usr/lib/firmware/gpu-unlock/610.43.03/falcon_loader.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_ad102.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_desc_ad102.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_desc_ga100.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_desc_ga102.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_desc_tu102.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_ga100.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_ga102.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_boot_tu102.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_ga10x.bin
usr/lib/firmware/gpu-unlock/610.43.03/gsp_tu10x.bin
usr/lib/firmware/gpu-unlock/610.43.03/sec2_bl_tu102.bin
usr/lib/modules/7.0.0-38-generic/updates/dkms/gpu_unlock.ko.zst

Print the exact boot option:

1
2
3
$ python3 tools/print_boot_option.py
RTX 4080 (experimental) at 0000:06:00.0 [10de:2704]:
gpu_unlock.targets=0000:06:00.0 gpu_unlock.rtx4080_experimental=1

Add above options to GRUB: GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash gpu_unlock.targets=0000:06:00.0 gpu_unlock.rtx4080_experimental=1. Then appl the change:

1
$ sudo update-grub

Cold boot:

  1. Shut down.
  2. Switch off or unplug the AC power and wait about 30 seconds.
  3. Power on.

The module needs a card that hasn’t been initialised since power-on. If the card was already initialised, it refuses to run.

GPU - MOK

Verify:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-7.0.0-38-generic root=UUID=0e66f11d-6081-4b8c-9321-821ea4c0a793 ro quiet splash gpu_unlock.targets=0000:06:00.0 gpu_unlock.rtx4080_experimental=1 crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M

$ journalctl -k -b --no-pager | grep -E 'gpu_unlock: unlocked|already unlocked|unlock failed|experimental|post-FLR SEC2'
Oct 27 22:47:22 Aorus kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-7.0.0-38-generic root=UUID=0e66f11d-6081-4b8c-9321-821ea4c0a793 ro quiet splash gpu_unlock.targets=0000:06:00.0 gpu_unlock.rtx4080_experimental=1 crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
Oct 27 22:47:22 Aorus kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-7.0.0-38-generic root=UUID=0e66f11d-6081-4b8c-9321-821ea4c0a793 ro quiet splash gpu_unlock.targets=0000:06:00.0 gpu_unlock.rtx4080_experimental=1 crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
Oct 27 22:47:23 Aorus kernel: pci 0000:06:00.0: post-FLR SEC2 reset released, GSP halted, BME=0 pending=0 WPR2=1ffffe00:00000000 SS0=88888888 SS1=00000008
Oct 27 22:47:23 Aorus kernel: pci 0000:06:00.0: gpu_unlock: unlocked

$ nvidia-smi
Tue Oct 27 22:50:13 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.99.02 Driver Version: 595.99.02 CUDA Version: 13.2 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4080 Off | 00000000:06:00.0 Off | N/A |
| 0% 26C P8 4W / 360W | 14MiB / 16376MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 2896 G /usr/bin/gnome-shell 3MiB |
+-----------------------------------------------------------------------------------------+

$ journalctl -k -b | grep -i xid # should print nothing

Success requires all three of these:

  • A gpu_unlock: unlocked line for your card’s address.
  • A healthy nvidia-smi.
  • A rate readback showing full rate:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ UUID=$(nvidia-smi --query-gpu=uuid --format=csv,noheader)

$ python3 tools/read_sm_rates.py --expect-uuid "$UUID"
{
"gpu": "GPU-28b6243c-d078-fbba-a6ff-ea24c62d4ccf, NVIDIA GeForce RTX 4080, 00000000:06:00.0, 595.99.02, 360.00, 210, 405",
"command": "0x20801230",
"rates": {
"imla0": 0,
"fmla16": 0,
"dp": 0,
"fmla32": 0,
"ffma": 0,
"imla1": 0,
"imla2": 0,
"imla3": 0,
"imla4": 0
},
"meaning": "0=full; 1=half; 2=quarter; higher values are further reductions",
"hardware_changes": false
}

Look for fmla32 changing from 1 (stock) to 0 (unlocked).

Uninstall:

To roll back, remove the gpu_unlock.* options from /etc/default/grub, run sudo update-grub, and power-cycle.

To remove the software completely:

1
$ sudo apt remove gpu-unlock-dkms gpu-unlock-firmware

Benchmark test and run python benchmark.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import torch, time

N, ITERS = 8192, 50
torch.backends.cuda.matmul.allow_tf32 = True

for name, dt in [("FP16", torch.float16), ("BF16", torch.bfloat16), ("TF32", torch.float32)]:
a = torch.randn(N, N, device="cuda", dtype=dt)
b = torch.randn(N, N, device="cuda", dtype=dt)
for _ in range(10):
a @ b
torch.cuda.synchronize()
t = time.perf_counter()
for _ in range(ITERS):
a @ b
torch.cuda.synchronize()
dt_s = time.perf_counter() - t
print(f"{name}: {2 * N**3 * ITERS / dt_s / 1e12:.1f} TFLOPS")

GPU - File Structure

GPU - Sequence Diagram

References

Contents