Por qué una GPU es más rápida (y por qué a veces no lo es)

Este episodio lo grabé mientras estaba aprendiendo el tema, no después. Es algo que me pareció interesante, que estuve leyendo y que iba a necesitar para un proyecto, y quise compartir el proceso y no sólo el resultado. Así que si ves que me equivoco en algo, dímelo: prefiero investigarlo y que aprendamos juntos.

Con eso por delante, vamos.

Serie y paralelo

Si conoces algo de electricidad, o si has visto unas series de luces de Navidad, ya tienes la imagen: los focos están unidos por el mismo cable, en la misma cadena, conectados al mismo tomacorriente. Uno después del otro. Eso es serie.

Un programa tradicional funciona igual: paso uno, paso dos, paso tres, en ese orden exacto. Cada instrucción espera a que termine la anterior.

En paralelo conectas varios focos a tomacorrientes independientes. Se ejecutan varios procesos al mismo tiempo, y son independientes entre sí.

Una advertencia antes de seguir: voy a empezar explicándolo con hilos, y quien sepa del tema va a decir que un hilo y el cómputo paralelo no son lo mismo. Es cierto, no lo son. Es sólo por dónde me sirve empezar.

En tu teléfono puedes tener WhatsApp e Instagram abiertos y estar en una llamada. Cuando te llega una notificación, el programa que estás usando no se detiene. No tienes que cerrar todo para que te lleguen las notificaciones, ni esperar a terminar con una aplicación para usar otra. Son varios procesos ocurriendo a la vez, sin esperarse unos a otros —salvo cuando uno necesita la respuesta del otro, que es donde empieza lo difícil.

Por qué los gráficos

Las películas animadas y los videojuegos tienen gráficos casi realistas, y eso se consigue con una cantidad brutal de operaciones matemáticas: reflejos, texturas, los modelos de cada personaje, los edificios, los carros del fondo, el flujo del agua, las nubes, los motores de física.

Eso hoy se hace en GPU: unidades de procesamiento gráfico, parecidas a un CPU pero con muchísimos más núcleos. Cada núcleo individualmente no es gran cosa. Lo que importa es que son muchos.

Y funciona por una razón muy concreta: cada píxel de la imagen requiere el mismo tipo de procesamiento. Es la misma operación una y otra vez, sobre datos distintos. En vez de procesar un píxel, esperar, y pasar al siguiente, se procesan todos a la vez en núcleos separados.

Ese es el patrón. Cuando lo veas, la GPU sirve. Cuando no, no.

Dónde más aparece el mismo patrón

En todos, muchas repeticiones idénticas sobre elementos independientes.

Y aquí está lo que no te dicen

Todo lo anterior suena a que basta con repartir el trabajo. No basta, y ésta es la parte que de verdad decide si vale la pena: cada procesador no tiene acceso a la memoria global. Hay que copiarle la información, y esa copia puede costar más tiempo que el procesamiento mismo.

Además, como los procesos son independientes, ninguno sabe si los demás ya terminaron. El proceso principal tiene que esperar a todos antes de poder juntar el resultado final. Sigue siendo menos tiempo que hacerlo solo, pero deja de ser gratis.

Los números, y su letra chica

Se habla de mejoras de entre cuatro veces y treinta o cincuenta veces con tarjetas más potentes. Son números reales, y son números de casos donde el patrón encaja perfecto: mucha operación idéntica, poca transferencia de datos.

Cambia esa proporción y el mismo problema en paralelo puede ser más lento que en serie. La pregunta no es "¿tengo una GPU?", es "¿mi problema se ve como una imagen?".

Una nota al margen

Ese episodio lo grabé en una época en la que estaba trabajando en este podcast, en cosas de Kichihua, en un trabajo, en hacer ejercicio y en aprender un idioma nuevo, todo al mismo tiempo. Y al final a veces terminas haciéndolo todo mal.

No se me escapó la ironía de estar explicando paralelismo. La diferencia es que una GPU tiene mil núcleos idénticos y yo tengo uno, y que el costo de copiar contexto de una tarea a otra —que es exactamente el problema de la memoria del que hablé arriba— en las personas es altísimo.

En ese mismo episodio recomendé un libro y un experimento que no tienen nada que ver con GPUs y que resultaron ser lo que más me marcó de todo: el efecto Lucifer y el Rat Park.


Este texto sale del episodio 006 del Podcast Algoritmos.

No se pudo guardar tu suscripción. Por favor, inténtalo de nuevo.
Tu suscripción ha sido exitosa.

Boletín

Recibe nuevos artículos por correo.