Repository navigation
Success reports: post working unlocks here #238
Replies: 76 comments 2 replies
gpu-unlock 1.1.0Card: MSI RTX 3090 Suprim X (1462:3882, VBIOS 94.02.42.00.F5), power limit set to 350 W.
Writing speed is limited by memory bandwidth, so only prefill (FP16 flash attention) gains, and the gain grows with context. An unquantized model may have more noticeable speed improvements. |
|
Result: Unlocked, and FP16/BF16 got faster Card: ASUS ROG Strix GeForce RTX 4080 16 GB, non-OC (subsystem PCI IDs ( VBIOS version: Is the card modified? Stock Distribution: Kubuntu 26.04 Kernel: NVIDIA driver: 580.178.04, proprietary kernel modules (Ubuntu's prebuilt Initramfs generator: initramfs-tools gpu-unlock version and install method: PR #24 at Kernel command line Setup: single GPU, which is also the display card (X11, SDDM, KDE Plasma); iGPU disabled. Stock 320 W power limit. Secure Boot off. ASUS ROG STRIX Z690-F GAMING WIFI, i7-13700K. The unlocked boot was a one-off edit of the kernel line in GRUB. Kernel log (
Benchmark before and after torch 2.10.0+cu128 (cuBLAS via
Numerical parity: the SHA-256 of a seeded 4096³ product is identical before and after for FP16, BF16 and TF32. Real workload: BF16 training of a 196M-parameter Transformer (8 encoder / 2 decoder layers, d_model 1024, ~80k tokens per optimizer step, quickmt-train).
Suspend and resume: Not tested Anything else: an independent data point for |
gpu-unlock 2.0.0: RTX 4070 (AD104,
|
| Test | Before | After | Change |
|---|---|---|---|
| FP16 GEMM | 61.7 | 91.7 | +49% |
| BF16 GEMM | 62.1 | 93.5 | +51% |
| TF32 GEMM | 30.1 | 43.7 | +45% |
| FP32 GEMM (control) | 19.0 | 19.1 | — |
| BF16 SDPA causal | 57.2 | 85.2 | +49% |
TFLOPS. The card is power-bound: it holds about 199 W in both runs, and the clock drops from 2655 to 2325 MHz after the unlock. A higher power limit would probably bring it closer to the 4070 Ti / 4070 SUPER results. No Xid errors.
gpu-unlock 2.0.0: RTX 3060 12 GB LHR (GA106,
|
| Test | Before | After | Change |
|---|---|---|---|
| Trellis 2 4B, 512 game mesh | 142.9 / 142.3 s | 138.1 s | +3.0–3.5% |
| Z-Image-Turbo 1024², 25 steps | 62.5 / 62.5 s | 61.2 s | +2.0% |
| FLUX.2 klein 4B 1024², 4 steps | 7.50 / 7.54 s | 7.30 s | +2.7–3.3% |
| ACE-Step turbo, 30 s music | 6.39 / 6.32 s | 6.03 s | +4.8–5.8% |
| Stable Audio, 5 s | 0.264 / 0.267 s | 0.257 s | +2.7–3.7% |
| Qwen3 TTS | 4.97× / 4.96× | 5.05× | +1.6% |
| LLM generation, 4B and 9B Q4 | ~70 tok/s | ~71 tok/s | within noise |
| LLM prefill ~3k, Q4 | 3364 / 2946 tok/s | 3406 tok/s | inconclusive |
Small but consistent gains on diffusion/flow/audio; no synthetic GEMM numbers.
gpu-unlock 1.0.0 (
|
| Before | After | Change | |
|---|---|---|---|
| FP16 TFLOPS | 45.03 | 76.96 | +70.9% |
| BF16 TFLOPS | 44.55 | 75.01 | +68.4% |
| TF32 TFLOPS | 22.33 | 37.73 | +69.0% |
| INT8 TOPS (control) | 35.24 | 35.24 | 0% |
The card stays on its 220 W cap (GEMM clock 1920 → 1650 MHz), hence ~1.7×.
Real workloads: vLLM 0.31.0 Qwen2.5-1.5B BF16 prefill +58–59%; ComfyUI SDXL 1024², 30 steps, 13.36 → 9.23 s/image with bit-identical images; Ollama Qwen2.5-7B Q4_K_M prefill +3–8%, decode unchanged. Seeded GEMM hashes and temperature-0 LLM outputs were bit-identical, and a 2 h soak (235k GEMMs) found no mismatch.
Also unlocks after a warm restart from Windows (Windows NVIDIA driver loaded) straight into Linux on this board.
gpu-unlock 2.0.0 (
|
| After | |
|---|---|
| FP16 TFLOPS | 29.32 |
| BF16 TFLOPS | 28.75 |
No stock run yet. The half-rate ceiling for this card is 20 SMs × 512 FLOP/clk × 2.1 GHz = 21.5 TFLOPS, so 29.3 is above anything it can reach while locked. Ollama was holding 6.3 GB of VRAM during the run, so TF32 at 8192³ ran out of memory and is missing.
|
Card: NVIDIA GeForce RTX 3060 Mobile / Max-Q 6 GB ( |
RTX 3060 12GB — Forge SD + Bonsai-2 GGUFHardware / software
Image gen (Stable Diffusion Forge)
~1.59× throughput (−37% time per image) LLM (Ternary-Bonsai-2 27B PQ2_0 GGUF, PrismML
|
| Before | After | |
|---|---|---|
| Prefill t/s | 47.6 | 51.6 (~+8%) |
| Decode t/s | 24.9 | 20.7 (no useful gain; noisy / expected for quantized GGUF) |
Dense FP16 image gen benefits a lot; ternary/PQ GGUF mostly sees a small prefill bump, as expected.
|
4x MSI RTX 4070 SUPER Ventus 3X + RTX 4070 Ti + RTX 3090 Ti (VFIO guest) — v2.0.0 (0532473), all unlocked first boot, no Xid Cards
System
Benchmark (after unlock)
All figures in TFLOPS. Real-world (production, before vs after)
Unlock log (4070 SUPER; the others are identical) |
RTX 3080 Ti 12 GB (
|
| Power cap | BF16 TFLOPS stock → unlocked | FP16 TFLOPS stock → unlocked | TF32 TFLOPS stock → unlocked |
|---|---|---|---|
| 200 W | 43.8 → 53.3 (+22%) | 39.8 → 50.2 (+26%) | 28.2 → 30.5 (+8%) |
| 220 W | 52.0 → 64.8 (+25%) | 49.3 → 60.4 (+23%) | 30.0 → 36.9 (+23%) |
| 240 W | 57.3 → 75.2 (+31%) | 56.1 → 70.7 (+26%) | 31.6 → 44.8 (+42%) |
| 260 W | 61.2 → 84.9 (+39%) | 59.8 → 79.3 (+33%) | 33.0 → 50.0 (+51%) |
| 270 W | 61.1 → 88.3 (+45%) | 59.7 → 82.5 (+38%) | 33.0 → 52.3 (+59%) |
| 280 W | 63.6 → 92.5 (+46%) | 62.2 → 87.9 (+41%) | 34.1 → 55.4 (+63%) |
| 300 W | 65.4 → 97.8 (+50%) | 63.4 → 95.5 (+51%) | 34.8 → 57.7 (+66%) |
| 320 W | 65.7 → 109.6 (+67%) | 65.2 → 103.6 (+59%) | 35.6 → 59.2 (+66%) |
Controls @320 W: FP32 22.94 → 23.39 TFLOPS (+1.9%); memory copy 808.25 → 805.77 GB/s (−0.3%). BF16 MLP 62.85 → 121.10 TFLOPS (+92.7%); unlocked MLP is already ~121 TFLOPS at 220 W. The 256×256 numerical-check output hashes match before/after for BF16, FP16 and TF32.
Scope/limitations: One independent run per power/phase (five within-run timing samples), so gains are exploratory measurements, not cross-card averages. BEFORE used a modified v3 benchmark and AFTER v5 with equivalent matmul kernels; power-cap values are not measured wall-power savings. GPU-junction memory temperature was unavailable. The 270 W BEFORE run began hotter than AFTER. No long-duration stress or real LLM throughput test was performed.
Related retail 3080 Ti results already exist (e.g. #59, #61, #133, #170); this adds a multi-power sweep on Ubuntu 22.04 / driver 550. Full result tables and anonymized JSON are available separately.


FULL_REPORT.md
benchmark_before_after.csv
RTX 4090 (AD102) — working unlock, +26% on BF16 image generationCard: NVIDIA GeForce RTX 4090 (AD102, Palit, PCI Unlock applies cleanly at boot before the NVIDIA driver binds: Benchmark — ComfyUI, BF16 DiT image generationModel: MOSS-Image (DiT in bf16), 1392x1792, 25 steps, CFG 2.5, PyTorch SDPA attention.
Notes:
Where it did and didn't help
Overall: clear, stable win for BF16 diffusion/image workloads on a 4090; marginal for |
|
Worked, thanks. Claude: Working on NixOS 🎉
Before/after — PyTorch
NixOS note: |
RTX 3090 24 GB: unlocked, +51–61% on real workloads, and an undervolt that only helps once unlocked
Before/after. Three boots (stock → unlocked → stock), median of 10 runs per cell, every output SHA-256-checked against stock. Gains are vs the faster stock session.
Write-up, raw data, scripts and the NixOS module: https://github.com/Esequiel378/gpu-unlock-3090-results |
gpu-unlock 2.0.0: Colorful RTX 3080 10 GB (GA102,
|
| Test | Before | After | Change |
|---|---|---|---|
| FP16 GEMM | 59.9 | 116.5 | +94% |
| BF16 GEMM | 59.3 | 118.3 | +99% |
| TF32 GEMM | 29.0 | 57.4 | +98% |
| LFM3-VL-2B BF16 prefill, 1 × 1397 tok (Transformers) | 195.6 ms | 116.6 ms | −40% |
| LFM3-VL-2B BF16 prefill, 4 × 1397 tok | 7486 tok/s | 13028 tok/s | +74% |
| Peak board power during the run | 345 W | 401 W | now hits the 400 W cap |
GEMM in TFLOPS. Decode stayed at ~45–49 tok/s (memory- and overhead-bound). As a control, the Cyberpunk 2077 built-in benchmark (path tracing / DLSS / native, 1440p) moved only within run-to-run noise. Suspend and numerical parity not tested.
|
RTX 4080 16 GB (AD103,
Method: torch 2.14.1+cu130,
My own workload gained much less, because it is not GEMM-bound: training a small ModernBERT (h512, 8 layers) with Hugging Face Accelerate, The README lists "INT8, FP8 and INT4 models: No change" and names only FP16/BF16/TF32 as capped. On this Ada card, FP8 GEMM with FP32 accumulation gets unlocked as well: 202.6 TFLOPS stock vs 352.5 unlocked. FP8 can only be measured on Ada and newer, so the "No change" row may come from Ampere reports. |
|
Zotac RTX 3060 12 GB (LHR), Ubuntu 26.04, headless desktop: unlocked, ~49 TFLOPS BF16 at stock 170 W, outputs bit-identical
Kernel log ends Results (TFLOPS)
TF32 and FP32 were not measured. Real workload: ComfyUI SDXL (perfectionRealisticILXL, 832×1216, 30 steps, dpmpp_2m_sde/karras), warm, fixed seeds: 19.87 s -> 14.17 s per image (1.40x). All three seeds are pixel-identical to the pre-unlock images (sha256 of the decoded PNG pixels). Video models, INT8 weights — no change, as the README's table says. Same ComfyUI graphs and seeds, exact times from
Stability: 180 s sustained BF16 8192² loop held 49.0 TFLOPS flat (48.7 minimum over 18 ten-second windows), 66 °C peak, 1747 MHz SM, throttle reason = software power cap only, 0 Xid. Notes: this Ubuntu uses dracut (not initramfs-tools); the package's dracut config put the module and firmware into both initramfs images and it worked without changes. Not tested: Wan 2.2, higher power limit. |
Gainward GeForce RTX 3090 Phoenix 24 GB — 72% higher BF16 throughput at 200 WOn the same card with the power limit set to 200 W for both runs, BF16 throughput increased from 70.14 to 120.59 TFLOP/s after unlocking. Median latency dropped from 15.675 to 9.118 ms. Environment
BenchmarkPyTorch
Raising the limit from 200 W to 350 W after unlocking changed throughput by 0.35%, within the spread of these short runs. Guest reboot: The initial unlock logged Stability: The physical Proxmox host rebooted during an earlier 350 W attempt, before that run saved a result. The logs did not establish the cause. The runs in the table completed successfully. Sustained-load stability and end-to-end application performance remain untested. |
gpu-unlock 2.0.0: RTX 3080 Ti (GA102,
|
| Before | After | Change | |
|---|---|---|---|
| BF16 TFLOPS | 73.6 | 121.0 | +64% |
| FP16 TFLOPS | 72.2 | 115.3 | +60% |
| TF32 TFLOPS | 38.8 | 64.6 | +66% |
| FP16 SDPA TFLOPS | 66.4 | 108.1 | +63% |
| FP32 TFLOPS (control) | 25.4 | 25.5 | 0% |
Sustained behavior (35 s continuous GEMM with live sampling): the card settles at ~350 W / ~1520 MHz at the stock limit, and raising power.limit to the vBIOS max of 380 W only buys +1% (117.6 → 118.7 TFLOPS, ~360 W is its natural equilibrium) — on this card the gain is fully power-bound, matching the pattern others report. Clock locks via nvidia-smi -lgc above the equilibrium clock are a no-op (the cap pulls it back to ~1520 regardless); locking at ~1500 gives stable clocks at 116.0 TFLOPS / 343 W. Zero Xid errors since the unlock; suspend/resume path untested (server VM, never suspends). Passthrough takeaway: the FLR the unlock performs works fine on a fully-assigned device in a guest, and the unlock survives guest reboots without any host-side action.
|
Note 🤖 Claude Opus 5.5 responding on behalf of snowopsdev EVGA RTX 3080 12 GB (
|
| After | |
|---|---|
| BF16, FP32 accumulate | 131.9 TFLOPS |
| FP16, FP32 accumulate | 135.7 TFLOPS |
| TF32 | 66.4 TFLOPS |
| FP16, FP16 accumulate (control) | 135.2 TFLOPS |
No before run. FP32-accumulate throughput now matches the uncapped FP16-accumulate control. The capped ceiling at this card's 2130 MHz max clock is about 76 TFLOPS (70 SMs × 512 FLOP/clk). During the run the card held ~2010 MHz and ~287 W at 41 °C, well under the power limit.
Limine/UKI setup note: the cmdline went into a drop-in, /etc/limine-entry-tool.d/gpu-unlock.conf (KERNEL_CMDLINE[default]+=" gpu_unlock.targets=…"), followed by sudo limine-update. The package's mkinitcpio drop-in needed no edits, and gpu_unlock ran before nvidia bound the card.
Not tested: suspend/resume, sustained load, or real workloads.
|
Card: MSI GeForce RTX 4060 Ti Ventus 2X Black 16G OC, 16 GB (AD106) Used the Ada fork JustAResearcher/gpu-unlock-ada 1.1.1, with No raw FP16/BF16/TF32 TFLOPS numbers yet. Real workload, same card, same 165 W power limit, both states: llama.cpp (
30 min sustained pp2048: 4188 → 5415 t/s median (+29.3%). Same power (~152–154 W, at the cap ~92% of the time in both states), same max temp (78 °C), no thermal throttling, no Xid errors. |
2× RTX 3090 24 GB (ASUS + MSI,
|
| Power limit | FP16 | BF16 | TF32 | |
|---|---|---|---|---|
ASUS (01:00.0, display) |
250 W | 68.0 | 73.3 | 43.5 |
MSI (02:00.0) |
250 W | 79.3 | 82.0 | 50.0 |
ASUS (01:00.0, display) |
350 W | 104.0 | 107.1 | 58.1 |
MSI (02:00.0) |
350 W | 115.5 | 118.5 | 64.1 |
TFLOPS. Under load at 350 W the cards ran at ~1425–1600 MHz SM, which works out to ~870–970 FLOP/clk/SM for FP16/BF16 and ~440–500 for TF32. That's roughly 2× the capped rate (512 / 256). At 250 W the clocks dropped to ~800–1200 MHz, but FLOPs per clock stayed the same, so the unlock holds at both limits.
Install note: make install failed when the checkout was in a path containing a space (~/Github Repos/gpu-unlock). Several Makefile recipes use $(CURDIR) / $(abspath ...) unquoted, so apt-get build-dep and rm -rf got the path split in two. Cloning to a path without spaces fixed it.
Not tested: suspend/resume, sustained load, real workloads.
RTX 4080 Laptop GPU (Manual PCI ID Patch)
Setup Notes (Mobile Tweaks)
1. Synthetic GEMM & Attention (PyTorch, FP32 Accumulate)
2. Real-World Local LLM Inference (Qwen 2.5 7B)
|
two RTX 3060 12 GB GPUs work under Proxmox passthrough
BF16 8192³ GEMM, FP32-accumulation policy, means of three independent processes:
Units: TFLOPS. Across all tested sizes, FP16 improved 62.45–78.48%, BF16 Thanks for GPU-Unlock. These are diagnostic measurements from one host and |
|
Card: Acer Nitro V15 (ANV15-51-58AZ), NVIDIA GeForce RTX 3050 6 GB Laptop GPU (GA107BM) Before/after numbers:
Notes:
|
ResultSuccessfully unlocked the NVIDIA GeForce RTX 4060 Laptop GPU (AD107) using gpu-unlock 2.0.0 on CachyOS. The kernel log confirmed successful completion of the unlock sequence, including all four passes returning To verify the performance impact, I performed an A/B/A comparison on the same GPU:
The benchmark results show substantial and repeatable improvements in Tensor Core accelerated matrix multiplication. CardNVIDIA GeForce RTX 4060 Laptop GPU, 8 GB VRAM. BIOS-configured power limit: 70 W. The NVIDIA driver reports a maximum configurable power limit of 105 W, but this was not changed during testing. PCI IDDistributionCachyOS (Arch Linux-based), Fish shell. KernelNVIDIA driverCUDA UMD version: 13.4. Benchmark environmentBenchmark configuration:
Performance resultsAll values are in TFLOPS, averaged over three benchmark runs. Precision | Locked | Unlocked | Improvement -- | -- | -- | -- FP32 | 6.96 | 6.90 | −0.9% TF32 | 13.61 | 20.12 | +47.8% FP16 | 27.77 | 42.53 | +53.2% BF16 | 28.27 | 51.33 | +81.6%Individual BF16 measurementsLocked: Unlocked: BF16 performance showed greater variation in the unlocked state, but every unlocked measurement substantially exceeded the locked baseline. Verification of the locked stateFor the locked-state benchmark, I temporarily removed the following kernel parameter from the GRUB boot entry: After rebooting, The The module's mkinitcpio configuration explicitly states that it performs no unlock operation unless This allowed comparison without uninstalling the module, changing the NVIDIA driver, or modifying the BIOS power limit. GPU power and temperatureDuring the unlocked benchmark, NVIDIA telemetry showed: The 70 W power limit was configured in the laptop BIOS and intentionally left unchanged. InterpretationThe FP32 results remained essentially unchanged, while TF32, FP16 and BF16 matrix multiplication improved significantly. This pattern is consistent with the modification affecting Tensor Core accelerated computation rather than general-purpose FP32 throughput. The A/B/A testing procedure provides strong evidence that the performance difference is associated with GPU Unlock. These results apply to dense matrix multiplication. No LLM inference, quantized model serving or real-world application benchmarks were performed. InstallationInstalled gpu-unlock 2.0.0 using the DKMS and firmware packages, with the module included in the mkinitcpio-generated initramfs. The following kernel parameter was added to GRUB: The module successfully loaded before the NVIDIA driver initialized the GPU. Conclusiongpu-unlock 2.0.0 works on the RTX 4060 Laptop GPU (AD107, device 0x28a0). On this system, it produced approximately +48% TF32, +53% FP16 and +82% BF16 throughput in the tested dense GEMM workload, with essentially unchanged FP32 performance. Thanks to the developers for making this modification available.
|
|
Ran this against the stuff I actually use, and holy crap, it's real.
8192³ GEMM at 350 W, TFLOPS:
An RTX PRO 6000 I left locked stayed within 2% on every metric, so I believe the rest.
Full breakdown, including where I land against the README table: #301 Write-up: https://www.techhivelabs.net/blog/gpu-unlock-rtx-3090-benchmark Thanks for building this. It's staying on. |
|
Worked on my RTX 2060 Super 8GB VRAM Nvidia graphics card, prefill speed increased from around 120tok/s to 400tok/s when running qwen3.8-flash-next-coder with Strata (https://github.com/mach10x/strata) and Decode increased from ~20tok/s to ~30-35tok/s |
Hardware & Setup
Context & InspirationI saw the success report in #132 by @stefb69 on the exact same card ( Current Observations & Trials
Question for the CommunityHas anyone with a Gigabyte B460 / 400-series Intel motherboard (or single primary display card on Ubuntu) successfully navigated the early
Any insights, debugging suggestions, or workarounds would be greatly appreciated! |
|
RTX 4090 24 GB (Dell subsystem
Log: Square
Nearly every test sat at the 450 W limit in both states, so large BF16/FP16 matmuls gain little here, as the README warns for the 4090. The gain varies a lot with matrix size. |
|
Card: NVIDIA GeForce RTX 3060, 12 GiB VRAM a big THANKS! |


Uh oh!
There was an error while loading. Please reload this page.
Did gpu-unlock work on your card? Post it here as a comment instead of opening an issue.
Please include:
lspci -nn -d 10de:, e.g.10de:2204Keep it short. Logs aren't needed when it worked.
If the unlock failed, gave no speedup, or stopped working later (after idle, suspend or a driver reload), open an unlock failure issue instead.
Earlier success reports were filed as issues and have been closed in favour of this thread. They are still searchable under closed issues.
All reactions