- TinyGPU v2.0 implementa rasterizado, T&L, z-buffer y culling en ~200.000 transistores.
- Funciona a 25 MHz con 7,5–15 fps y color de 4 bits, orientado al aprendizaje.
- El diseño va a Tiny Tapeout (4×4 tiles) y la demo usa FPGA Basys3 y QSPI RAM.
- Existe además un TinyGPU en Python para entender SIMT, sincronización y memoria.
La idea de la GPU más pequeña del mundo vuelve a estar en boca de todos gracias a TinyGPU v2.0, un proyecto que demuestra que todavía se puede innovar en hardware gráfico con presupuestos minúsculos y un enfoque puramente didáctico. En un mundo dominado por monstruos con decenas de miles de millones de transistores, y herramientas de tuning como MSI Afterburner, aquí lo relevante no es la potencia bruta, sino la elegancia de un diseño que condensa lo esencial de una tubería gráfica en un chip diminuto.
Conviene aclararlo desde el principio porque hay dos iniciativas distintas llamadas TinyGPU que conviven: por un lado está la GPU hardware de Pongsagon Vichit (también conocido como @MattDIYgraphics), ahora en su versión 2.0; por otro, un simulador educativo en Python pensado para entender cómo se comporta una GPU por dentro, con hilos, memoria y sincronización. Ambas comparten espíritu divulgativo, pero atacan el problema desde ángulos diferentes: la primera pone rasterizado y T&L en silicio real; la segunda permite “ver” cómo trabajan los hilos en un entorno controlado.
Qué es TinyGPU v2.0 y por qué llama la atención
TinyGPU v2.0 es un procesador gráfico autónomo con una canalización capaz de transformar y rasterizar geometría 3D de forma interactiva. Su autor lo ha presentado con una demo práctica: cargas modelos desde la memoria flash integrada y los manipulas en tiempo real con un mando de Super Nintendo, moviendo tanto el objeto como la luz direccional. El guiño nostálgico del gamepad no oculta lo importante: hay una pipeline real que convierte vectores en píxeles.
El proyecto se inspira en los orígenes de la aceleración 3D de consumo y recupera el concepto de Transform & Lighting que popularizó la mítica GeForce 256. Obviamente, la escala es otra: TinyGPU v2.0 busca enseñar y experimentar, no competir en rendimiento. Aun así, ver un diseño tan pequeño ejecutar el recorrido completo de transformación, iluminación y rasterizado tiene un encanto especial que, para entusiastas y estudiantes, es oro puro.
Para ponerlo en contexto, el chip definitivo pretende fabricarse mediante el flujo comunitario de Tiny Tapeout, donde el diseño de Vichit se encaja en el área máxima permitida de 4×4 tiles. Eso significa que hablamos de del orden de ~200.000 transistores para hacer realidad una GPU de verdad, una cifra que palidece frente a los 92.200 millones de un tope de gama moderno, pero que hace aún más meritorio lo conseguido.
Arquitectura y especificaciones técnicas
Más allá de la anécdota del tamaño, TinyGPU v2.0 tiene una lista de capacidades muy concreta, que define perfectamente sus ambiciones y límites. El foco está en un pipeline simple pero completo que permite la conversión vector→raster y un conjunto esencial de funciones de geometría e iluminación para escenas de baja complejidad.
- Frecuencia de trabajo en la demo de referencia: 25 MHz sobre placa FPGA Basys3.
- Framerate observado: entre 7,5 y 15 fps, dependiendo del modelo y la carga.
- Resoluciones típicas de render: 320 × 240 píxeles o inferiores.
- Formato de color: 4 bits por píxel (hasta 16 colores simultáneos).
- Buffering: doble búfer de 4 bits para la imagen.
- Profundidad: z-buffer de 8 bits almacenado en QSPI RAM externa.
- Geometría máxima: hasta 1.000 triángulos por escena.
- Culling: backface culling para optimizar la rasterización.
- Iluminación: una luz direccional dinámica.
- Shading: flat shading en la fase de pintado.
Este conjunto encaja con la filosofía del proyecto: enseñar con nitidez los bloques básicos de una GPU, desde la transformación de vértices hasta el z-buffer y el sombreado plano, todo apoyado en un hardware extremadamente austero. En otras palabras, se ha priorizado que cada componente sea comprensible y verificable, antes que perseguir efectos avanzados o tasas de refresco elevadas.
El corazón del diseño hace posible la conversión interactiva de coordenadas 3D a píxeles 2D con z-buffer, una función esencial del render clásico que, comprimida en tan pocas puertas lógicas, actúa como clase magistral para cualquiera que quiera estudiar la pipeline gráfica sin el ruido de arquitecturas descomunales.
Demostración en FPGA y salto a Tiny Tapeout

La presentación pública de TinyGPU v2.0 se ha realizado sobre una FPGA Basys3, donde el diseño funciona a 25 MHz. El propio autor ha sido claro: el chip producido mediante Tiny Tapeout no irá más rápido que esta demo en FPGA. Esa honestidad ayuda a calibrar expectativas y refuerza el objetivo principal del proyecto: aprender y enseñar, no batir marcas de rendimiento.
En el ecosistema Tiny Tapeout, el diseño ocupa el límite de 4×4 tiles, y su producción entra dentro del coste aproximado de 1.500 dólares para un diseño de hasta 16 tiles. Es un precio notablemente bajo si pensamos que hablamos de fabricar un “silicio educativo” que cualquiera puede estudiar en detalle, con verilog, diagrama de bloques y materiales de apoyo a un clic.
Resulta especialmente didáctico que, pese al presupuesto ajustado, se haya reservado espacio lógico y de memoria para mantener doble búfer y un z-buffer de 8 bits, dos piezas clave para comprender por qué una GPU necesita gestionar estados de frame y profundidad de forma explícita. En la demo, estos recursos se apoyan en la QSPI RAM, lo que simplifica el diseño del die sin sacrificar la lección técnica.
Rendimiento real y limitaciones prácticas
Con 25 MHz de reloj, los 7,5–15 fps están en la línea de lo que cabría esperar en escenas de baja complejidad poligonal y color de 4 bits. Sí, esos números nos sitúan en una estética de ordenadores domésticos de principios de los 80, pero no debe confundirse la apariencia con la sofisticación interna: hay transformación e iluminación de geometría, culling y z-buffer en juego.
La resolución de 320 × 240 es, por diseño, un compromiso entre claridad visual y presupuesto de lógica. A mayor resolución crece el coste en almacenamiento de búferes y el ancho de banda de escritura, algo que en un proyecto con ~200.000 transistores exige decisiones valientes. Por eso, el autor ha concentrado los recursos en garantizar la pipeline básica, manteniendo la interactividad con modelos sencillos.
Conviene dejar claro que TinyGPU v2.0 no pretende entrar en ninguna lista de mejores GPU para jugar. Su valor reside en reducir la GPU a su esqueleto funcional y dejar que cualquiera observe cómo cada bloque aporta algo tangible a la imagen final. Precisamente por eso, el framerate es secundario: lo prioritario es poder inspeccionar la arquitectura sin perderse en capas y capas de complejidad.
Comparativa con la Tiniest GPU y otros proyectos homónimos
Antes de TinyGPU v2.0, el propio Vichit ya había presentado la llamada Tiniest GPU, un diseño aún más extremo que priorizaba la simplicidad por encima de todo. Aquella versión admitía como máximo dos polígonos en escena, pero, a cambio, podía llegar a renderizar a 640 × 480 con color de 6 bits y alcanzar hasta 60 fps a 50 MHz, con control por teclado. Era una demostración de minimalismo llevado al límite.
La nueva TinyGPU v2.0 recorre el camino inverso: menos resolución y color, pero mucha más capacidad geométrica (hasta 1.000 triángulos) y, sobre todo, la incorporación de transformación e iluminación, culling y z-buffer. Se sacrifica velocidad a cambio de acercarse a una GPU completa, claramente más representativa de lo que hace una tarjeta gráfica real.
Para añadir más confusión al nombre, también hay otro proyecto denominado Tiny GPU (sin relación con Vichit) creado desde cero por Adam Majmudar, igualmente encauzado a través de Tiny Tapeout. La moraleja es simple: cuando se hable de TinyGPU, conviene mirar de cerca el contexto y el autor, porque no todos los TinyGPU son el mismo diseño ni persiguen idénticas metas.
El “otro” TinyGPU: un simulador de GPU en Python para aprender
Junto al hardware de Vichit, existe un proyecto paralelo llamado también TinyGPU, pero esta vez como simulador minimalista en Python. Su objetivo es didáctico: mostrar con claridad cómo se ejecutan hilos en paralelo, cómo se sincronizan y de qué manera la memoria y los registros cambian durante la vida de un programa estilo GPU.
El simulador implementa un pequeño conjunto de instrucciones tipo GPU y permite que varios hilos las ejecuten en paralelo con puntos de sincronización. Entre las instrucciones figuran SET, ADD, LD, ST, SYNC o CSWAP, suficientes para ilustrar patrones de paralelismo comunes sin ahogar al estudiante en detalles microarquitectónicos.
Para facilitar el aprendizaje, incorpora un ensamblador sencillo para archivos .tgpu con etiquetas y saltos, además de un visualizador con exportación a GIF que representa el estado de la memoria y los registros como mapas de calor a lo largo del tiempo. Es justo el tipo de herramienta que uno desearía tener para explicar en clase qué sucede dentro de un kernel paralelo.
- Programas de ejemplo incluidos: vector_add.tgpu (suma elemento a elemento), odd_even_sort.tgpu (ordenación paralela con barreras) y reduce_sum.tgpu (reducción para obtener la suma total).
- Enfoque conceptual: SIMT, divergencia y sincronización sin necesidad de una GPU real ni CUDA.
- Filosofía del proyecto: hecho en Python con fines educativos, no de rendimiento.
El autor del simulador anima a la comunidad a aportar ideas sobre qué algoritmos paralelos deberían añadirse a continuación: prefix-scan, histogramas y otros patrones clásicos de cómputo masivo en datos. La invitación a poner estrellas, hacer forks y experimentar con los ejemplos refuerza el carácter abierto del proyecto.
Por qué todo esto importa a científicos de datos y entusiastas
Buena parte de la ciencia de datos moderna se apoya en GPU: desde librerías de cálculo numérico como NumPy hasta frameworks de IA como TensorFlow o PyTorch. Entender qué hay detrás de un kernel paralelo, cómo se sincronizan hilos y cómo se gestionan memoria y barreras ayuda a escribir código más consciente y a interpretar mejor los cuellos de botella.
En ese sentido, la combinación de una GPU física diminuta y un simulador didáctico ofrece una ventana privilegiada a los conceptos nucleares del paralelismo. TinyGPU v2.0 enseña la pipeline de gráficos con un rigor inusual para su tamaño, mientras que el TinyGPU en Python pone el foco en la ejecución SIMT y la coordinación entre hilos con visualizaciones que aclaran lo invisible.
Detalles curiosos de la demo de TinyGPU v2.0
La elección de un mando de Super Nintendo para manipular la escena no es solo un gesto simpático: conecta de inmediato con el público y deja claro que, aunque la estética recuerde a otra época, hay un motor 3D realizando cálculo en tiempo real. Cambiar la orientación del modelo y mover la luz direccional al vuelo evidencia la presencia de T&L en la canalización.
Que los modelos 3D residan en memoria flash integrada simplifica la demo y, a nivel pedagógico, refuerza la idea de que una GPU se pone a trabajar cuando llegan datos bien estructurados. El recorte a color de 4 bits es un compromiso lógico para que todo quepa en el presupuesto de área y memoria, sin renunciar a doble búfer y z-buffer, piezas clave para explicar temas de sincronización y consistencia de frame.
Contexto frente a las GPU modernas
Poner lado a lado TinyGPU v2.0 y una GPU de consumo actual como una RTX de última generación es útil para dimensionar las diferencias. Un diseño con ~200.000 transistores cabe literalmente en el margen de error de los 92.200 millones de un tope de gama; y, con todo, logra condensar la esencia de la rasterización con iluminación y profundidad. Es una lección de arquitectura: qué es lo mínimo imprescindible para que exista una GPU funcional.
Desde el ángulo del aprendizaje, ese contraste es valioso. Permite abstraer el exceso de complejidad y concentrarse en el “esqueleto” del pipeline gráfico. Al fin y al cabo, z-buffer, culling, transformación, iluminación y rasterizado son conceptos que siguen vigentes, y verlos destilados al mínimo ayuda a cimentarlos para siempre.
Comunidad y conversación en torno a TinyGPU
El interés por proyectos así suele desbordarse en comunidades técnicas. Subreddits como /r/hardware acogen debates con buen nivel sobre arquitectura y diseño, mientras que espacios centrados en marcas como /r/AMD o /r/NVIDIA agrupan noticias, rumores y análisis de ecosistemas concretos. Es importante recordar que estos foros son gestionados por la comunidad y no representan oficialmente a ninguna empresa salvo que se indique.
Ese caldo de cultivo facilita que ideas como TinyGPU v2.0 y el simulador en Python reciban feedback, ejemplos, forks y propuestas. Cuanto más accesibles sean los materiales (código Verilog, scripts, ensambladores), más fácil es que estudiantes y makers construyan proyectos derivados que empujen los límites sin perder el espíritu pedagógico.
Qué puedes esperar si te sumas
Si vienes del mundo de datos, IA o computación gráfica y te llama la atención el “cómo” de las cosas, aquí encontrarás una forma directa de ver por qué existen las barreras de sincronización, cómo se coordina la memoria entre hilos y qué trade-offs impone el hardware cuando el presupuesto de área es ridículo. Explorar un pipeline gráfico mínimo o escribir un kernel paralelo en el simulador te obliga a pensar en costes reales, como bajar el voltaje de tu tarjeta gráfica.
Y si te motiva el cacharreo, el hecho de que el proyecto entre en un flujo como Tiny Tapeout significa que tendrás a la mano un silicio de estudio con el que experimentar. No moverá montañas, pero sí abrirá cabezas: justo lo que se espera de un hardware que pretende enseñar más que impresionar con benchmarks.
Rumbo futuro e ideas que se barajan
En el lado del simulador, hay propuestas para añadir patrones paralelos como el prefix-scan o los histogramas, muy útiles para asentar el manejo de memoria compartida, sincronización y acceso contencioso. En el lado hardware, el reto pasa por mantener la claridad del diseño mientras se exploran pequeñas mejoras que no rompan el delicado equilibrio entre área, memoria y complejidad.
Tras recorrer las dos caras de TinyGPU, queda clara la intención: hacer comprensible lo que las GPU hacen a toda velocidad detrás del telón. Ya sea con un chip minúsculo que rasteriza triángulos con z-buffer y una luz direccional, o con un simulador que muestra cómo evolucionan memoria y registros, el resultado es el mismo: más conocimiento práctico, menos magia negra y una invitación abierta a aprender, aportar ideas y seguir construyendo.