gpu-unlock es un módulo del kernel de Linux que deja a una GeForce RTX 30 multiplicar matrices en FP16 y BF16 con acumulación FP32 al mismo ritmo que su hermana profesional. NVIDIA documenta ese límite en sus propios whitepapers desde 2020, y el proyecto de Zagitta lo quita antes de que cargue el driver oficial, sin parchearlo. Un fork, gpu-unlock-ada, lleva la misma idea a la RTX 4090. Aquí tienes qué límite es, cómo lo salta el módulo, qué cifras dan los dos README frente a la ficha oficial, qué gana de verdad un LLM local y qué riesgos asumes. No lo hemos ejecutado en una tarjeta propia: las cifras son de los autores y de su comunidad, contrastadas con los documentos de NVIDIA el 25 de octubre de 2026. Hay una versión en inglés de este artículo.

Puntos clave

  • Las GeForce de NVIDIA ejecutan FP16 con acumulación FP32 y BF16 a la mitad de ritmo que FP16 con acumulación FP16. Una RTX 3090 tiene 142 TFLOPS en el primer modo y 71 en el segundo; la RTX A6000, con el mismo chip GA102, tiene 154,8 en los dos.
  • gpu-unlock se carga desde el initramfs, ejecuta un firmware de NVIDIA, escribe dos registros de selección de velocidad y reinicia la tarjeta antes de que el driver oficial la tome.
  • En una RTX 3090 Ti con una multiplicación de matrices de 8192³ a 450 W, BF16 pasa de 87,50 a 157,41 TFLOPS, TF32 de 42,58 a 82,61 y FP16 de 87,46 a 118,39.
  • En una RTX 4090 desbloqueada, el ritmo de instrucciones FP16 llega a 331,6 TFLOPS, la cifra que NVIDIA publica para FP16 con acumulación FP16 (330,3). En cuBLAS real la ganancia baja a entre el 12 % y el 34 %.
  • En un LLM local mejora el prefill (entre un 14 % y un 36 % según los informes), no la generación de tokens, que depende del ancho de banda de memoria.

Qué límite tienen las GeForce en FP16 y BF16

NVIDIA reserva a sus tarjetas profesionales el ritmo completo de los tensor cores cuando la entrada es FP16 o BF16 y el acumulador es FP32. Los tensor cores son las unidades que multiplican bloques de matrices en un ciclo, y el acumulador es el registro donde se suman los productos parciales. Acumular en FP32 evita que las sumas largas pierdan precisión. Por eso es el modo del entrenamiento con precisión mixta y de la inferencia en BF16, y según el whitepaper de la arquitectura GA102[1], BF16 solo existe con acumulación FP32.

Las tablas de ese mismo documento muestran la diferencia entre gamas con el mismo silicio:

Tensor FP16 según el acumulador, cifras oficiales de NVIDIA TFLOPS · más es mejor
RTX A6000 (GA102)
Acumulación FP16: 154,8
Acumulación FP32 (y BF16): 154,8
GeForce RTX 3090 (GA102)
Acumulación FP16: 142
Acumulación FP32 (y BF16): 71
TITAN RTX (TU102)
Acumulación FP16: 130,5
Acumulación FP32 (y BF16): 130,5
GeForce RTX 3080 (GA102)
Acumulación FP16: 119
Acumulación FP32 (y BF16): 59,5
Ver tabla de valores
Tarjeta (chip)Acumulación FP16Acumulación FP32 (y BF16)
RTX A6000 (GA102)154,8154,8
GeForce RTX 3090 (GA102)14271
TITAN RTX (TU102)130,5130,5
GeForce RTX 3080 (GA102)11959,5

Picos densos, sin dispersión, del whitepaper de GA102 de NVIDIA. La TITAN RTX es de la generación Turing (TU102).

Ada repite el patrón. El whitepaper de Ada Lovelace[2] da a la RTX 4090 330,3 TFLOPS en FP16 con acumulación FP16 y 165,2 con acumulación FP32. TF32, el formato de 19 bits que PyTorch usa para las multiplicaciones en FP32 cuando lo activas, también va a la mitad. El límite no está en el silicio: es una segmentación de producto, y por eso se puede quitar.

Cómo funciona gpu-unlock sin parchear el driver

gpu-unlock cambia el estado de la tarjeta antes de que el driver de NVIDIA la vea, en lugar de modificar el driver. El README de gpu-unlock[3] lo describe como "neither a UEFI application nor a patched NVIDIA driver" y detalla la secuencia:

  1. El módulo arranca desde el initramfs, antes de que nvidia se enlace a la tarjeta
  2. Ejecuta en la GPU un firmware generado a partir de la técnica del desbloqueador de las tarjetas de minería CMP (la cadena V67/PLM, que levanta las máscaras de nivel de privilegio)
  3. Escribe dos selectores de velocidad: SS0 con 0x88888888, que según el autor elige el ritmo BF16 completo, y SS1 con 0x8
  4. Hace un reinicio de función PCIe (FLR, Function Level Reset) y deja que el driver oficial, sin tocar, tome la tarjeta

Como el driver no cambia, una actualización de NVIDIA no obliga a rehacer el parche, que era el problema de los intentos anteriores. El efecto, en palabras del README, es que el módulo "doubles the instruction issuing speed of FP/BF16 FMA into FP32 operations" en los chips GA102, GA103, GA104 y GA106. El código del módulo es GPL-2.0, y el firmware que genera sigue bajo la licencia de NVIDIA.

La noticia de Wccftech del 24 de octubre[4] cuenta otra cosa. Dice que el módulo devuelve al driver el identificador PCIe de una tarjeta profesional, y que funciona en las GTX 900, GTX 1000 y RTX 20. El README no dice nada de eso: solo acepta identificadores de GeForce Ampere, y el mecanismo son los selectores de velocidad. Si lees la noticia, quédate con las cifras y descarta la explicación.

Cuánto rinde una RTX 3090 Ti desbloqueada

La cifra del titular, "casi un 80 %", es la de BF16 en una RTX 3090 Ti. El autor midió una multiplicación de matrices densa de 8192³ a 450 W, con la mediana de cinco muestras y acumulación FP32:

RTX 3090 Ti, multiplicación de matrices densa 8192³ con acumulación FP32 TFLOPS · más es mejor
BF16
De serie: 87,50
Desbloqueada: 157,41
FP16
De serie: 87,46
Desbloqueada: 118,39
TF32
De serie: 42,58
Desbloqueada: 82,61
Ver tabla de valores
Formato de entradaDe serieDesbloqueada
BF1687,50157,41
FP1687,46118,39
TF3242,5882,61

Cifras del README de gpu-unlock: 450 W, mediana de 5 muestras. No medido por jacar.

BF16 gana un 80 % y TF32 casi se duplica (+94 %), pero FP16 se queda en un 35 %, y el README no explica por qué. En el resto de la serie 30 los informes de la comunidad dan estas ganancias en BF16:

Ganancia BF16 en multiplicación de matrices tras gpu-unlock, por tarjeta % · más es mejor
RTX 3060 12 GB
Mínimo: 80
Máximo: 80
RTX 3070
Mínimo: 73
Máximo: 81
RTX 3090 Ti
Mínimo: 68
Máximo: 80
RTX 3080 10 GB
Mínimo: 70
Máximo: 73
RTX 3080 20 GB (memoria ampliada)
Mínimo: 56
Máximo: 59
RTX 3090
Mínimo: 25
Máximo: 67
Ver tabla de valores
TarjetaMínimoMáximo
RTX 3060 12 GB8080
RTX 30707381
RTX 3090 Ti6880
RTX 3080 10 GB7073
RTX 3080 20 GB (memoria ampliada)5659
RTX 30902567

Rangos que publica el README de gpu-unlock con pruebas de cada usuario; no son comparables entre sí. El mínimo de la RTX 3090 corresponde a tarjetas limitadas a 225 W.

Hay dos excepciones. En la RTX 3080 Ti de 20 GB para fabricantes (GA102-250) el desbloqueo termina, pero BF16 sigue a la mitad. Del chip GA103 no hay informes.

Qué pasa con la RTX 4090 y la serie 40

La serie 40 tiene su propio fork, gpu-unlock-ada de JustAResearcher[5], que añade una carga útil para el chip AD102 sacada del proyecto AD103_win_unlocker de TOTORONG. La RTX 4090 es el objetivo principal. La 4090 D, la 4070 Ti SUPER y la 4060 Ti de 16 GB son experimentales, probadas con una tarjeta cada una y detrás de un parámetro propio.

La cifra queda justo en el techo que NVIDIA publica para otro modo. Con el driver 615.78.08, la 4090 pasa de 165,6 a 331,6 TFLOPS en FP16 con acumulación FP32. La ficha de NVIDIA da 330,3 para FP16 con acumulación FP16:

RTX 4090, tensor FP16 y BF16: ficha de NVIDIA frente a medida desbloqueada TFLOPS · más es mejor
FP16
Ficha, acumulación FP32: 165,2
Ficha, acumulación FP16: 330,3
Medida desbloqueada, acumulación FP32: 331,6
BF16
Ficha, acumulación FP32: 165,2
Ficha, acumulación FP16: -
Medida desbloqueada, acumulación FP32: 330,6
Ver tabla de valores
FormatoFicha, acumulación FP32Ficha, acumulación FP16Medida desbloqueada, acumulación FP32
FP16165,2330,3331,6
BF16165,2-330,6

Ficha: whitepaper de Ada Lovelace, cifras densas. Medida: README de gpu-unlock-ada, driver 615.78.08, una sola ejecución del autor. BF16 no tiene modo de acumulación FP16.

El desbloqueo no inventa rendimiento: deja la acumulación FP32 al ritmo que la tarjeta ya tenía para la acumulación FP16. Un segundo propietario repitió la prueba a 450 W y obtuvo 160,4 frente a 320,4. El propio README advierte que son "register-resident issue rates, not application GEMM or inference speedups": con cuBLAS, la ganancia real fue del 12 % al 34 % en FP16, del 16 % al 20 % en BF16 y nula con matrices de 4096³.

Cuánto se nota en LLM, difusión e inferencia

El desbloqueo acelera las operaciones limitadas por cómputo y deja igual las limitadas por memoria. En un LLM local, el prefill (procesar el prompt entero de golpe) es una multiplicación de matrices grande, y los informes del README dan entre un 14 % y un 36 % más. Wccftech recoge un 33–36 % en el prefill de contexto largo con vLLM y un 25 % menos de tiempo hasta el primer token.

La generación de tokens, el decode, lee todos los pesos del modelo por cada token, y ahí manda el ancho de banda de la memoria, que no cambia. Si tu uso es un chat con prompts cortos, apenas notarás nada. Si procesas documentos largos, haces reranking o sirves RAG con contextos de decenas de miles de tokens, sí.

Tampoco cambian los formatos enteros ni FP8. El fork de Ada midió INT8 y dp4a sin cambios, y una multiplicación FP8 E4M3 en la 4070 Ti SUPER pasó de 59,326 a 59,495 TFLOPS (+0,3 %).

Si ya sirves modelos cuantizados con llama.cpp en enteros de 4 u 8 bits, el desbloqueo te aporta poco. Donde más se nota es en la generación de imágenes con difusión en BF16, en FlashAttention y en el ajuste fino con LoRA en BF16. Según el README, las salidas que se compararon eran idénticas bit a bit antes y después.

Cómo se instala y cómo compruebas que funciona

La instalación compila el módulo en tu máquina con DKMS y lo añade al initramfs. Necesitas las cabeceras de tu kernel y el toolchain de DKMS. Estos son los pasos del README para Debian y Ubuntu con GRUB, revisados el 25 de octubre de 2026:

git clone https://github.com/Zagitta/gpu-unlock.git
cd gpu-unlock
make install
# Añade gpu_unlock.targets=all a GRUB_CMDLINE_LINUX_DEFAULT
sudoedit /etc/default/grub
sudo update-grub
sudo poweroff

make install detecta la familia de la distribución (Arch, Debian o Fedora) y construye el paquete. El build descarga entradas fijadas de NVIDIA y CachyOS por HTTPS y comprueba su SHA-256. El parámetro gpu_unlock.targets=all activa el módulo en todas las tarjetas compatibles; puedes cambiar all por una dirección PCI concreta, como 0000:21:00.0. Apaga del todo en lugar de reiniciar: el fork de Ada exige un arranque en frío el primer intento.

Al arrancar, el kernel debe registrar el desbloqueo:

journalctl -k -b | grep gpu_unlock
lspci -nnk | grep -A3 -i nvidia

La primera orden busca la línea gpu_unlock: unlocked en el registro del kernel de este arranque; que el módulo cargue no basta. La segunda confirma que el driver nvidia tomó la tarjeta después. Para medir el antes y el después, este script de PyTorch calcula los TFLOPS de una multiplicación de 8192³ en FP16 y BF16:

import time
import torch

n, iters = 8192, 50
for dtype in (torch.float16, torch.bfloat16):
    a = torch.randn(n, n, device="cuda", dtype=dtype)
    b = torch.randn(n, n, device="cuda", dtype=dtype)
    for _ in range(5):
        a @ b
    torch.cuda.synchronize()
    t0 = time.perf_counter()
    for _ in range(iters):
        a @ b
    torch.cuda.synchronize()
    dt = time.perf_counter() - t0
    tflops = 2 * n**3 * iters / dt / 1e12
    print(dtype, round(tflops, 1), "TFLOPS")

Las cinco primeras multiplicaciones calientan la GPU y no cuentan. Cada multiplicación de dos matrices n×n son 2n³ operaciones, y el script divide el total entre el tiempo medido. Ejecútalo con el arranque normal y con el desbloqueo, con el mismo límite de potencia.

Riesgos y limitaciones antes de instalarlo

gpu-unlock toca el firmware de la tarjeta en cada arranque, y NVIDIA no lo soporta ni ha dicho nada sobre él. Los README enumeran estos riesgos:

  • Solo Linux: el port para Windows de la RTX 4070 Ti es un perfil de una placa MSI, sin binarios ni instalador
  • Carga tardía: si nvidia ya tomó la tarjeta, cargar el módulo después no hace nada
  • Pantalla en negro: la salida de vídeo de la tarjeta queda en negro desde el reinicio FLR hasta que nvidia-drm la toma
  • Suspensión: suspender a RAM restablece los selectores; el módulo vuelve a desbloquear al reanudar (un segundo más) y la hibernación no está cubierta
  • Firmware colgado: si el firmware no termina, el módulo conserva sus buffers de DMA y hay que apagar del todo antes de reintentar
  • Más de una GPU: el fork de Ada no ha validado el uso con más de una GPU
  • Medidas: casi todas las cifras son de una sola ejecución en una sola tarjeta, a veces con el escritorio abierto

Hay un riesgo que no aparece en ningún README: la garantía y los términos de la licencia del driver. El módulo no modifica el driver ni flashea la BIOS, y apagar la máquina devuelve la tarjeta a su estado de fábrica. Aun así, ejecutar firmware de NVIDIA de una forma que NVIDIA no contempla es decisión tuya.

Merece la pena comprar una RTX 3090 por esto

No a los precios de esta semana. Según otra noticia de Wccftech del 24 de octubre[6], la RTX 3090 de segunda mano ha pasado de unos 1000 dólares a más de 2000 en eBay. Hay anuncios de la 3090 Ti a 2650 dólares. Con ese sobreprecio pagas una ganancia que, en cuBLAS y en LLM, es de entre un 12 % y un 36 %, no el 80 % del titular.

Si ya tienes una RTX 30 o una 4090 y entrenas, haces ajuste fino o generas imágenes en BF16 con Linux, el desbloqueo es una mejora gratuita que merece una prueba. Si tu uso es un chat local con modelos cuantizados, la memoria sigue siendo el límite. En ese caso te conviene más leer qué alternativas a NVIDIA hay o cómo encaja un motor como vLLM frente a llama.cpp.

Preguntas frecuentes

¿gpu-unlock funciona en Windows?

No. El módulo es para el kernel de Linux y se carga antes del driver desde el initramfs. Existe un port experimental para UEFI que se probó en Windows con una RTX 4070 Ti de MSI, pero no publica binarios ni instalador.

¿Mejora el rendimiento en juegos?

No hay pruebas de que lo haga. El desbloqueo afecta solo a los tensor cores con acumulación FP32, y en juegos esos tensor cores se usan para DLSS y poco más. Nadie ha publicado medidas en juegos con el módulo activo.

¿Hay que reinstalarlo al actualizar el driver de NVIDIA?

No, porque el módulo no modifica el driver. Sí hay que volver a generar el initramfs al actualizar el kernel, cosa que DKMS y los ganchos de mkinitcpio, initramfs-tools y dracut hacen solos.

Conclusión

gpu-unlock no saca rendimiento de la nada. Devuelve a las GeForce el ritmo de tensor FP16 y BF16 con acumulación FP32 que NVIDIA ya publica para sus tarjetas profesionales. Las cifras de instrucciones se duplican, pero las aplicaciones reales ganan entre un 12 % y un 36 %, y la generación de tokens no cambia.

Si tienes una RTX 30 o una 4090 en Linux y trabajas en BF16, mide con el script de arriba antes y después. Conserva una entrada de arranque sin el parámetro para volver atrás.

Fuentes: [1] NVIDIA, whitepaper de la arquitectura Ampere GA102[1], [2] NVIDIA, whitepaper de la arquitectura Ada Lovelace[2], [3] Zagitta, repositorio gpu-unlock[3], [4] JustAResearcher, repositorio gpu-unlock-ada[5], [5] Wccftech, la RTX 3090 Ti gana casi un 80 % en FP16 y BF16[4], [6] Wccftech, las RTX 30 y 40 se aceleran en IA y suben de precio[6].

Fuentes

  1. whitepaper de la arquitectura GA102
  2. whitepaper de Ada Lovelace
  3. README de gpu-unlock
  4. noticia de Wccftech del 24 de octubre
  5. gpu-unlock-ada de JustAResearcher
  6. otra noticia de Wccftech del 24 de octubre