Présentation
Le module gpu-unlock est un pilote noyau Linux qui réactive le débit d’émission d’instructions FP/BF16 sur les GPU de la série RTX 3000 (GA102, GA103, GA104, GA106). En écrivant les sélecteurs de vitesse SS0 et SS1 avant que le pilote propriétaire NVIDIA ne s’attache, le module double la fréquence d’émission des opérations FMA BF16 vers le format FP32. L’approche combine la technique V67/PLM du CMP unlocker avec le timing pré‑driver de la méthode UEFI, tout en restant indépendant du pilote NVIDIA.
Fonctionnement et architecture
Au démarrage, le chargeur d’amorçage ajoute le paramètre gpu_unlock.targets=… à la ligne de commande du noyau. Le module s’insère dans l’initramfs (via mkinitcpio, initramfs‑tools ou dracut) et s’exécute avant le chargement du pilote nvidia. Il efface d’abord le bus mastering laissé par le firmware, puis écrit les sélecteurs de vitesse :
SS0 = 0x88888888 // sélection du taux BF16 complet
SS1 = 0x8 // sélecteur IMLA4 (4 bits)Après cette configuration, le module déclenche un FLR (Function Level Reset) afin de réinitialiser le GPU sans perdre les données de la console de démarrage. Le pilote NVIDIA se lie ensuite au GPU déjà configuré, ce qui évite toute intervention manuelle lors de mises à jour du pilote.
Impact sur les performances
Le doublement du taux d’émission concerne les instructions FMA BF16, qui sont couramment utilisées dans les charges de travail d’apprentissage automatique et de calcul scientifique. Sur chaque architecture GA10x, le nombre d’opérations FP/BF16 par cycle passe de 1 à 2, ce qui se traduit par un gain de performance linéaire pour les kernels qui exploitent pleinement le format BF16. Le module agit de façon concurrente sur plusieurs cartes ; le temps d’exécution total reste d’environ une seconde, quel que soit le nombre de GPU présent.
Déploiement et limites
Le processus d’installation se résume à git clone https://github.com/Zagitta/gpu-unlock && make install, suivi de la mise à jour du chargeur (GRUB, systemd‑boot, etc.). Des cibles spécifiques peuvent être indiquées (ex. gpu_unlock.targets=0000:21:00.0) ou toutes les cartes compatibles avec gpu_unlock.targets=all. Le module se réactive automatiquement après une suspension en RAM, grâce à un notificateur qui précède celui du pilote NVIDIA. Cette fonctionnalité peut être désactivée avec gpu_unlock.resume=0. Hibernation n’est pas prise en charge et le module ne modifie aucun fichier du pilote NVIDIA, ce qui minimise les risques de rupture de compatibilité lors de futures versions du driver. Le code source est publié sous GPL‑2.0‑only, tandis que le firmware dérivé reste sous les licences NVIDIA d’origine.