GitHub Hot Board

GitHub Hot Board · Архив репозитория

Zagitta/gpu-unlock

Unlock FP/BF16 instruction issue rate on Nvidia 3000's cards to their professional equivalents (Описание взято из самого репозитория.)

C

Данные на October 27Zagitta

Лучшее место

#1

Всплеск · C по языку

8.5K

Всего звёзд

1.1K

Всего форков

4

Дней в рейтингах (30 дн.)

Лицензия: неизвестноПоследний push: October 27Открытые issues (вкл. PR): 193Собирается с 2026-10-25; неизвестно = ещё не собрано

4 дн. в рейтингах · +7.1K звёзд за 30 дней · ~+1.8K/деньпик 10-25: +3.5K4 дн. подряд

Документация проекта

GPU unlock 1.1.0

Unlock FP/BF16 instruction issue rate on consumer Nvidia 30 series cards to their professional equivalents

This Linux kernel module combines the cmpunlocker's V67/PLM technique with the pre-driver timing of the UEFI approach. It runs the unlock, writes the speed selectors (SS0 0x88888888, which selects the full BF16 rate, and the 4-bit SS1 0x8 IMLA4) and performs FLR before the unmodified NVIDIA driver binds the card. It is neither a UEFI application nor a patched NVIDIA driver.

The benefit of this early kmod driver is that it does not require manual patching each time nvidia releases a new driver version.

The effect of this unlock is that it doubles the instruction issuing speed of FP/BF16 FMA into FP32 operations on GA102, GA103, GA104 and GA106 cards.

3090 Ti dense 8192³ GEMM at 450 W, five-sample medians with FP32 accumulation:

Input Before After
FP16 87.46 TFLOPS 118.39 TFLOPS
BF16 87.50 TFLOPS 157.41 TFLOPS
TF32 42.58 TFLOPS 82.61 TFLOPS

How to install

First run:

git clone https://github.com/Zagitta/gpu-unlock
cd gpu-unlock
make install

Then append gpu_unlock.targets=all to your kernel command line, keeping existing options:

  • GRUB (Debian/Ubuntu/Mint): add it inside GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub, then run sudo update-grub.
  • GRUB (Arch/CachyOS): same edit, then run sudo grub-mkconfig -o /boot/grub/grub.cfg.
  • Fedora/RHEL: run sudo grubby --update-kernel=ALL --args="gpu_unlock.targets=all".
  • systemd-boot: append it to the options line in your boot entry (bootctl status shows its location).
  • UKI / generated entries: add it to /etc/kernel/cmdline and regenerate your boot images/entries (e.g. sudo mkinitcpio -P for mkinitcpio UKIs).

FAQ

  • Q: Does this depend on a specific driver version? I see 610.43.03 is pinned.
    A: No the driver is only fetched to extract firmware this unlock depends on
  • Q: What about Windows?
    A: I don't run windows and don't plan to maintain it but https://github.com/impacifist/Windows-GPU-UNLOCK has built a port, YMMV.
  • Q: What about Turing and Ada?
    A: There are forks with support already, I will integrate this soon.
  • Q: Does this hurt my GPU?
    A: It's very unlikely, this only unlocks a small handicap Nvidia has put in place to differentiate datacenter and professional cards from consumer versions. It may heat up your GPU slightly because it now does more compute but the standard throttling and power management remains completely intact and should downclock.
  • Q: How can I assist?
    A: Please consider donating so I can purchase more GPUs <3

Local build

Every build downloads the NVIDIA/CachyOS inputs over HTTPS and generates firmware only in the build directory and the binary package. All three formats install through the same make install-* targets. Packages are built from the working tree, uncommitted changes included.

Build, install build dependencies, and install the packages in one step (asks for your sudo password):

make install        # detect the distribution and select an installer
make install-arch   # makepkg -sif
make install-deb    # apt-get build-dep, dpkg-buildpackage, apt-get install
make install-rpm    # dnf builddep, rpmbuild, dnf install

make install uses /etc/os-release (ID, then ID_LIKE) to detect Arch, Debian/Ubuntu, or Fedora/RHEL/CentOS families. The RPM installer requires DNF. For other distributions, select a compatible explicit target above.

make arch, make deb and make rpm only build. Debian and RPM packages go to build/deb and build/rpm. The NVIDIA inputs are cached in ~/.cache/gpu-unlock/inputs (make inputs; override with INPUTS=). dpkg-buildpackage itself never uses the network, so a clean-chroot build (sbuild or pbuilder) needs GPU_UNLOCK_INPUTS pointing at that cache. The make dist archive, the Debian source package and the .nosrc.rpm contain no NVIDIA archives or generated firmware.

Boot flow and opt-in

The packages put gpu_unlock and its firmware in the initramfs and load it there, before nvidia can bind a card:

  • mkinitcpio: /etc/mkinitcpio.conf.d/zz-gpu-unlock.conf inserts gpu_unlock right before nvidia in MODULES, so a display card is blank for as short a time as possible. Without nvidia in the image, it goes last and still runs before an nvidia loaded from the root filesystem. Images are rebuilt on install. mkinitcpio ignores drop-ins for an image built with -c <config> or a preset _config; put gpu_unlock right before nvidia in that config's MODULES yourself.
  • initramfs-tools: /usr/share/initramfs-tools/modules.d/gpu-unlock.conf.
  • dracut: /usr/lib/dracut/dracut.conf.d/gpu-unlock.conf.

With initramfs-tools and dracut, the module is built for every installed kernel that has headers, and those kernels' images are rebuilt on install and again on removal. Kernels installed later get the module and a new image from the kernel's own install hooks.

There is no softdep nvidia pre: rule: kmod honours only the first softdep nvidia line it reads, so other packages' rules (nvidia-utils, gddr6_hwmon) would silently override it, or it would override theirs.

The module does nothing unless the kernel command line opts in:

gpu_unlock.targets=all                          # every supported unbound card
gpu_unlock.targets=0000:21:00.0                 # only these cards
gpu_unlock.targets=0000:21:00.0,0000:22:00.0    # comma-separated

Addresses are full PCI names as lspci -D prints them (hex digits in either case), independent of GPU numbering and display role. An entry that is not a supported recipe (GA100/GA102/GA103/GA104/GA106 or RTX 4090), including all mixed with addresses, is logged and ignored. The cards are unlocked concurrently, about a second in all however many there are, and each on its own: a card that is already bound or powered down is skipped. Bus mastering that the board firmware left on (Supermicro X11 does this whatever its option ROM and bus master settings) is cleared first; a card some driver already initialised is still refused. Then nvidia loads and binds every card as usual.

The display card works too. Its firmware framebuffer (the boot console and Plymouth) keeps running while the unlock's firmware steps run, and is removed just before the card's reset, as nvidia-drm would do a moment later anyway. Its screen is blank from that reset until nvidia-drm takes over.

Loading the module by hand after boot does nothing to a card that nvidia has bound.

Suspend to RAM powers the cards off, which resets the speed selectors. After resume the module unlocks every card it unlocked at boot again, before nvidia resumes it: its suspend notifier runs just ahead of the one nvidia resumes its cards from (NVreg_UseKernelSuspendNotifiers=1, the default in current drivers; nvidia-resume.service runs later still). This adds about a second to resume. A card that kept power, as in suspend to idle, is still unlocked and is only read. A card that nvidia has already resumed, or that is bound to another driver, is left as it is, and the log says why. Add gpu_unlock.resume=0 to the kernel command line, or write 0 to /sys/module/gpu_unlock/parameters/resume, to turn this off. Hibernation is not covered.

Check the result with:

journalctl -k -b | grep gpu_unlock
lspci -nnk -s 0000:[ID]:00.0

To stop unlocking, remove gpu_unlock.targets= from the kernel command line; for a one-off boot, delete it in the bootloader's edit screen. Removing the packages also removes the module and the initramfs drop-ins.

If the firmware on a card never stops, the module logs it and keeps the DMA buffers that firmware may still use until the next power off. Power off before trying again.

The kernel module and local packaging are GPL-2.0-only. The generated buffer derives from the pinned CMP reference; NVIDIA firmware remains under its own terms. See firmware/NOTICE.md and licenses/ for attribution and notices.

Support me

Help me buy more GPUs <3

Github Sponsor

https://buymeacoffee.com/zagitta

ETH: 0xf4eee937937f92038D70B16AbD7736D8a53a1c5c

BTC: bc1qwpkwp70fn76z3s4kg2l9y3j4kst95twcznuugf

SOL: 8Rih6HY7V4LcdjYHz4iSffT4fTniqw5CACaBigSVxNYu

Текущие места

  • 161

    Мастодонты GitHub · C

    11K звёзд · 1.1K fork · Всего звёзд

    Мастодонты · C →
  • 7

    Всплеск недели

    8.5K звёзд · 1.1K fork · Звёзд за неделю

    Всплеск →
  • 1

    Всплеск недели · C

    8.5K звёзд · 1.1K fork · Звёзд за неделю

    Всплеск · C →
  • 7

    Волна месяца

    8.5K звёзд · 1.1K fork · Звёзд за месяц

    Волна →
  • 1

    Волна месяца · C

    8.5K звёзд · 1.1K fork · Звёзд за месяц

    Волна · C →
  • 7

    Рост · Реальный недельный прирост

    8.5K звёзд · 1.1K fork · Звёзд за неделю

    Взлёт →
  • 3

    Тёмные лошадки · Лидеры скорости

    8.5K звёзд · 1.1K fork · Недельный рост

    Тёмные лошадки →
  • 54

    Рубежи в прямом эфире

    10K звёзд · 994 fork · Звёзд до следующей отметки

    Рубежи →

Динамика за 30 дней

Накопленные звёзды

Динамика мест

Прирост за день

Поставьте бейдж в свой README · Zagitta/gpu-unlock[![Поставьте бейдж в свой README](https://git.vaiox.xyz/api/badge/Zagitta/gpu-unlock.svg)](https://git.vaiox.xyz/ru/repo/Zagitta/gpu-unlock)

Badge · 任何仓库都可以挂 —— 未上榜的仓库显示灰章,上完榜会自动点亮。

<a href="https://git.vaiox.xyz/ru/repo/Zagitta/gpu-unlock"><img src="https://git.vaiox.xyz/api/badge/Zagitta/gpu-unlock.svg" alt="Поставьте бейдж в свой README" height="20"></a>

← К рейтингам

GitHub Hot BoardМашина времениОбзор联系我们 · Contact