*Este artículo se lo dedico a mi carnal ECV deseándole su rápida recuperación.
Desde que en 2009 leí en la tesis de Ian [1, p.1] me quedaron claras dos cosas: que el futuro de la programación estaba en los GPUs y el enorme impacto que tendrían en el futuro inmediato de la Inteligencia Artificial. Geoff Hinton fue uno de los primeros en darse cuenta de que las GPUs, diseñadas originalmente para videojuegos, eran perfectas para entrenar redes neuronales profundas: con ellas pudo acelerar de forma brutal el entrenamiento de sus modelos y, junto con sus estudiantes, dar el salto que culminó en AlexNet ganando el concurso ImageNet en 2012, demostrando que el “deep learning” no era solo una curiosidad académica, sino una tecnología ganadora. A partir de ahí vino una cascada de innovaciones: arquitecturas más profundas y estables como VGG y, sobre todo, ResNet, que con sus conexiones residuales permitió entrenar redes de cientos de capas sin que el gradiente se desvaneciera, empujando el rendimiento en visión por computadora a otro nivel.
Ese know-how sobre cómo escalar modelos y datos se trasladó después al lenguaje natural con los Transformers, que abandonaron las recurrencias y apostaron todo al mecanismo de atención, haciéndolos increíblemente paralelizables en GPU y perfectos para modelos gigantes. Sobre esa base nacen los grandes modelos de lenguaje (LLMs) y la ola actual de Generative AI: sistemas capaces de escribir, razonar, generar código, imágenes y audio, entrenados con billones de tokens sobre enormes clusters de GPUs, que son, en cierto sentido, descendientes directos de aquella sugerencia de Ian y intuición inicial de Andrej[2] quien entre otras palabras ya sugerían que si le das suficiente cómputo a una red neuronal, empiezan a pasar cosas interesantes.
Si no te gusta la literatura, solo es importante que sepas que esta corta historia que acabas de leer esconde una incógnita clave que me interesa que conozcas: estos GPUs se han programado con CUDA. Es decir, detrás de las imágenes, modelos y cálculos que quizá te parecen pura magia digital, hay un lenguaje y un ecosistema de herramientas que permiten que esas tarjetas (originalmente diseñadas para hacer gráficas) trabajen como motores de cómputo para la inteligencia artificial moderna.
Si te gusta la literatura, regálame unos minutos más. NVIDIA nos trae CUDA 13.1 [3] que aparece como un cruce improbable entre El Quijote, À la recherche du temps perdu y Ulises. A primera vista, hablar de compiladores, tiles y abstracciones de memoria podría parecer la antítesis de la novela. Y sin embargo, hay algo profundamente narrativo —casi épico y casi íntimo— en el recorrido que la comunidad de cómputo acelerado ha tenido que transitar durante casi dos décadas. Programar GPUs ha sido, para muchos de nosotros, una mezcla de aventura quijotesca y búsqueda proustiana: lanzarse lanza en ristre contra molinos de viento que giran a velocidades de teraflops mientras intentamos reconstruir, una y otra vez, el hilo del pasado técnico que se nos escapa entre los dedos. Las arquitecturas cambiaban justo cuando comenzábamos a entenderlas, como esos recuerdos que Proust perseguía sin lograr fijarlos del todo, y convivíamos con la sensación de que cada nueva generación de hardware nos obligaba a reescribir nuestra propia “memoria perdida” del cómputo paralelo.
El modelo clásico de CUDA exigía pensar en miles y miles de hilos, en jerarquías de memoria capaces de traicionarnos en el momento más inoportuno, en sincronizaciones frágiles donde una instrucción fuera de lugar podía desmoronar todo el universo computacional. Programar así era poderoso, sí, pero también extenuante. Requería —y requiere todavía— una élite de desarrolladores que aprendimos a sostener la lanza del paralelismo fino con el temple de un hidalgo manchego y la paciencia de quien intenta, como en Proust, recomponer el tejido entero del tiempo a partir de una sola migaja de información. Muchos vivimos ahí, entre manuales espesos, calculando offsets de memoria a mano, rastreando race conditions que parecían esconderse en los pliegues de la historia interna del kernel, como recuerdos esquivos que regresan solo para desvanecerse de nuevo.
NVIDIA® CUDA® Tile llega entonces como una rareza literaria: un intento por darle un nuevo lenguaje al caos, por imponer un orden narrativo a una historia donde antes solo había monólogos internos dignos de Ulises. En lugar de escribir hilo por hilo, condición por condición, se introduce el concepto de tiles: pequeñas unidades de datos —submatrices, fragmentos de tensores, trozos discretos de significado— sobre las que el programador expresa operaciones de alto nivel. Lo que antes era una batalla línea por línea se convierte ahora en la escritura de capítulos. El desarrollador describe la intención, la matemática, la transformación; el compilador decide cómo descender a los detalles, cómo repartir el trabajo en ese ejército silencioso que son los hilos de la GPU.
De pronto, los molinos de viento dejan de ser amenazas. La historia recobra control, estructura, continuidad. Como si la GPU, después de años de exigir precisión quirúrgica, finalmente hablara un idioma más cercano al humano y menos al metal. Y sin embargo, debajo de esta metáfora vive una ingeniería formidable. NVIDIA también nos facilita CUDA Tile IR[4] que funciona como un idioma intermedio —una representación que abstrae el hardware— cuyo propósito es romper la maldición de tener que reconstruir nuestra memoria técnica desde cero cada vez que aparece una nueva arquitectura. Si Proust necesitó siete volúmenes para darle forma al tiempo perdido, CUDA Tile IR aspira a que nuestros kernels no tengan que reescribirse con cada generación, a preservar la esencia del paralelismo sin importar el rostro que adopte el silicio dentro de diez, veinte o treinta años. Es, en cierto sentido, un acto de archivística computacional.
A eso se suma cuTile Python[5], un DSL que permite hablar el idioma de los tiles sin descender a las profundidades de C++ ni al baile de ensambladores y registros. No porque C++ desaparezca —como los torrentes de conciencia en Joyce, sigue ahí, ofreciendo un nivel de control que pocos igualan—, pero ahora convive con un modo de expresión más accesible. Mientras que el SIMT tradicional obligaba a pensar como la máquina, CUDA Tile invita a pensar como matemáticos, ingenieros, científicos de datos: describir qué hacer, no cómo implementarlo al nivel del silicio. En otras palabras, CUDA Tile ofrece una nueva distancia narrativa, una capa que permite observar la acción desde una perspectiva más amplia sin perder la capacidad de descender a los detalles cuando la historia lo exige.
Pero la letra pequeña importa. Esta primera ola de soporte sólido para CUDA Tile está diseñada para GPUs de arquitectura Blackwell, el nuevo corazón de la aceleración moderna. En la práctica, esto significa que gran parte de los clústeres actuales —sobre todo en países como México y el resto de América Latina— seguirán, al menos un tiempo, viviendo en ese espacio intermedio entre dos estilos narrativos: la prosa dura del C++ paralelo y la nueva arquitectura literaria basada en tiles. No es un problema puramente técnico; es una decisión estratégica que involucra presupuestos, capacitación, reescritura de marcos internos y un entendimiento claro del ritmo al que las organizaciones pueden actualizar su infraestructura mental y material.
Y es aquí donde la literatura vuelve a ser una lente útil. Porque, al igual que en las grandes obras, cada decisión técnica tiene consecuencias sociales, económicas y culturales. En la banca, la manufactura, la salud o el comercio electrónico, la facilidad para escribir o mantener un kernel se traduce en costos, tiempos de desarrollo, eficiencia energética, capacidad de respuesta y velocidad de innovación. Un modelo como CUDA Tile puede permitir que equipos pequeños logren lo que antes solo podían gigantes. Un kernel más claro puede ahorrar meses de trabajo. Una abstracción mejor diseñada puede abrir puertas que antes estaban cerradas.
Lo que sigue haciendo NVIDIA al facilitarnos herramientas para programar abiertas y poderosas, en ese sentido, es un intento de reconciliación entre el ser humano y la máquina. Un recordatorio de que no hace falta renunciar a la expresividad humana para hablar con el silicio. De que la técnica no está reñida con la narrativa. Que un kernel puede ser un poema estructurado, que un scheduler puede ser un narrador omnisciente y que una GPU puede ejecutar, en paralelo, miles de historias que convergen en una sola función.
Y la pregunta final, la que atraviesa las metáforas y aterriza en la realidad latinoamericana, es simple y urgente: en esta nueva historia de la inteligencia artificial acelerada, ¿vamos a leer desde la orilla lo que otros escriben, o vamos a atrevernos a firmar algunos capítulos? Porque esta vez, la pluma y el procesador están al alcance, y el tiempo —como habría dicho Proust— puede recuperarse si sabemos escribirlo.
“Cuanto más poder me conceden los GPUs, más profundamente amo programar: escribir código hoy es levantar mundos enteros con un gesto, narrar epopeyas hechas de datos y verlas cobrar vida.”
[1] Buck, I. (2003). Stream computing on graphics hardware (Doctoral dissertation). Stanford University. Disponible en https://graphics.stanford.edu/~ianbuck/thesis.pdf
[2] https://karpathy.medium.com/software-2-0-a64152b37c35
[3] https://developer.nvidia.com/cuda/tile