nlzy/turing-unlock

Unlock full speed FP16 tensor core of NVIDIA Turing GPUs

What is it?

A Linux kernel module that unlocks the full-speed FP16 tensor core on NVIDIA TU102 GPUs (the chip inside the RTX 2080 Ti).

What does it do?

By default, the GPU runs its tensor cores at a reduced speed. This module writes two hardware speed selectors (SS0 and SS1) to specific values, and also releases a firmware mutex (ACR mutex 3). After that, the GPU goes through its normal boot sequence, but now the tensor cores can run at their maximum rated speed.

How does it work?

The module directly manipulates low-level GPU registers. It sets SS0 to 0x88888888 and SS1 to 0x8, then releases a firmware lock. This is done during the GPU's boot process, before the NVIDIA driver loads. The module only works on TU102 chips (like the RTX 2080 Ti) and has been tested only on a Dell RTX 2080 Ti 22GB with NVIDIA driver 575.51.03 (both proprietary and open drivers).

Installation

Run make install in the project directory. This automatically detects your Linux distribution and builds/installs the appropriate package. You can also force a specific package type:

  • make install-arch for Arch
  • make install-deb for Debian/Ubuntu
  • make install-rpm for Fedora/RHEL

To only build packages without installing, use make arch, make deb, or make rpm. The build downloads two NVIDIA firmware files (with pinned versions and SHA-256 checks) and caches them in ~/.cache/turing-unlock/inputs. You can pre-download them with make inputs or change the cache directory with INPUTS=.

Enabling the unlock

The module does nothing by default. You must add a kernel command-line option to tell it which GPUs to unlock. Use turing_unlock.targets=all to unlock all compatible cards, or specify PCI addresses (e.g., turing_unlock.targets=0000:21:00.0). You can list multiple addresses separated by commas. Get the full PCI address with lspci -D.

Add the option to your bootloader configuration (GRUB, systemd-boot, UKI, etc.) and reboot. After boot, check the kernel log with journalctl -k -b | grep turing_unlock to see if it worked.

Boot order

The installation packages place the module and its firmware into the initramfs so it loads before the NVIDIA driver. The module skips cards that already have a driver or are powered down. It also handles the case where multiple TU102 cards are present (they run one at a time). If needed, it performs a PCIe reset (FLR) before the NVIDIA driver binds. On success, the card is not reset; on failure, a reset may occur, causing a blank screen until the display driver takes over.

Performance

The README includes benchmark results for FP16 matrix multiplication (with FP32 accumulation) on an RTX 2080 Ti at 250W. The numbers show a large speedup after unlocking, sometimes exceeding the theoretical peak claimed by NVIDIA (56.9 TFLOPS). For example, at matrix size 2048, performance went from 55.7 TFLOPS (97.9% of peak) to 91.4 TFLOPS (160.6% of peak).

Risks and warnings

The README explicitly warns: "Tensor cores draw very high power. Unlocking them to full speed may damage your hardware. Use at your own risk." Also, if the GPU firmware does not stop properly, the module logs an error and keeps DMA buffers until the next power-off. You should power off the machine before retrying.

License

The module and packaging code are GPL-2.0-only. The NVIDIA firmware files retain their own license (see firmware/NOTICE.md and licenses/).

Related

  • Project
  • Project
  • Project
  • Project