Así funciona NVIDIA SER, la clave en el rendimiento de las GPU RTX 40
Una de las novedades más importantes que se ha introducido en las tarjetas gráficas RTX 40 es el llamado NVIDIA SER, una característica que será común en todas las GPU de la marca a partir de ahora y que promete aumentar el rendimiento en los juegos, especialmente de cara al Ray Tracing. En este artículo os contaremos cómo funciona y qué problema soluciona.
Ante el creciente problema del aumento del coste de los chips, la solución de tirar de fuerza bruta a base de aumentar núcleos indiscriminadamente pronto no tendrá sentido. A todo ello, hemos de agregar que los cuellos de botella con la memoria tampoco permitirán un aumento del rendimiento a la par como ocurría hasta ahora. Es en estos momentos, en los que soluciones como el NVIDIA SER pasan a tener todo el sentido del mundo
¿Qué es NVIDIA SER?
"SER" son las siglas de Shader Execution Reordering, y no se trata de ningún dispositivo nuevo y desconocido hasta el momento que se ha sacado NVIDIA de la manga, sino más bien de una característica que se ha implementado por primera vez en las RTX 40. Se trata de uno de los motivos para el aumento de rendimiento de la actual y futuras generaciones de GPU de la marca.
Es más, se trata de una característica que no es única de NVIDIA, ya que el mismo concepto se encuentra en las GPU Intel Arc bajo el nombre de Thread Sorting Unit. A primera vista podríamos decir que se trata de un tipo de ejecución fuera de orden, como la que se encuentra en las CPU para móviles y PC a día de hoy.
Sin embargo, hemos de tener en cuenta que la forma en la que una GPU gestiona su información es diferente a la de una CPU. En todo caso, el concepto sería el mismo, el hecho de reorganizar internamente la ejecución de las instrucciones para que estas no tengan que esperar a que las unidades correspondientes se encuentren libres para poderse ejecutar, pero una cosa es el concepto y otra muy distinta es el funcionamiento y es en ese punto donde las cosas difieren por completo.
Una GPU funciona diferente a una CPU
Para entender lo que es NVIDIA SER, tenemos que tener en cuenta la forma en la que una GPU ejecuta sus instrucciones y cuál es la diferencia respecto a una CPU convencional. En todo caso, hemos de empezar por el hecho de que el concepto de núcleos que se usa en el marketing tradicional es totalmente falso. Los llamados “núcleos CUDA” no se pueden considerar núcleos, dado que no realizan el resto de tareas clásicas de una CPU como ahora:
- Captación y decodificación de instrucciones.
- Predicción de saltos.
- Ejecución fuera de orden.
Son una simple ALU, que añade la capacidad de realizar operaciones aritméticas, normalmente en coma flotante. Lo que sí que se podría catalogarse como un núcleo completo son lo que solemos llamar:
- En NVIDIA recibe el nombre SM (Streaming Multiprocessor)
- En AMD CU se les bautizó (Compute Unit) y más recientemente, en arquitecturas RDNA, WGP (Workgroup Processor).
Sin embargo, estos tampoco tienen toda la funcionalidad completa de un núcleo, ya que se encargan de planificar el orden en el que se ejecutarán las instrucciones previamente enviadas por los procesadores de comandos que se encuentran en la parte central del chip. El procesador de comandos es la pieza que lee la lista de instrucciones para la GPU creada por el procesador central, decodifica realmente las instrucciones y luego las envía a las unidades correspondientes.
Ocupación en una GPU y el símil con la sala del cine
Para entender cómo funciona una GPU vamos a hacer un símil con un cine convencional, que tiene varias proyecciones al mismo tiempo. Cada hilo de ejecución es una persona o un grupo de personas que va a ver una película.
El procesador de comandos son las taquillas que nos venden una entrada para una sesión en concreto. Tras ellos, los espectadores buscan su sala, la cual sería en el argot de NVIDIA la unidad SM, pero el acomodador sería el equivalente al planificador dentro de cada unidad y, por tanto, se encargaría de acomodar a quienes van a ver la película.
Sí, sabemos que se trata de una explicación muy simplificada de cómo trata una GPU sus instrucciones, ya que es algo más complejo que esto, pero nos sirve para explicar el concepto de la ocupación respecto al rendimiento. Las unidades más utilizadas en un chip de este tipo son las llamadas SIMD, una sola instrucción múltiples datos.
¿El problema? Cuando se carece de datos suficientes y parte de las butacas y por parte las ALU quedan sin usar. Lo cual significa que no estás usando el 100% de la unidad y esto es algo que ocurre de forma más común de lo habitual. Es aquí donde entra el SER o Shader Execution Reordering que NVIDIA ha implementado en sus RTX 40.
¿Cómo funciona NVIDIA SER?
Pues de una forma bastante sencilla realmente. Hemos de partir que las unidades SIMD realizan todas la misma instrucción al mismo tiempo y lo que nos interesa es ocupar todas las unidades posibles. En el caso del NVIDIA SER, la trampa está en que todas las instrucciones de un tipo se unifican en un mismo bloque y se ejecutan al unísono, independientemente de cuál sea el orden de salida en el que se tengan que ejecutar. Es decir, y volviendo al ejemplo del cine, es como en vez de tener dos salas medio vacías donde dan la misma película, recolocamos todos los espectadores en una misma sala.
Al fin y al cabo, el rendimiento que obtenemos de hacer esto es el mismo, la cantidad de unidades de procesamiento son las mismas, pero no malgastamos los recursos de usar unidades SM de más y esto permite reducir entre otras cosas el consumo energético del chip. El hecho de tener más unidades activas no solo lo aumenta por el mismo hecho que es peor mantener encendidos el equipo de dos salas de nuestro cine de ejemplo, es que, además, esto nos permite alcanzar mayores velocidades de reloj, o sea, más MHz, en nuestra GPU.
¿Cómo mejora el Ray Tracing?
No obstante, hemos de partir del hecho que NVIDIA vende esta nueva característica como clave para aumentar el rendimiento en el Ray Tracing. Sin embargo, no es la única mejora que aportan, ya que las instrucciones de salto, las cuales, han sido históricamente las más lentas en una GPU. Es decir, la clave se encuentra en el concepto de coherencia de memoria.
Tradicionalmente, lo que hace una GPU es trabajar con una primitiva gráfica cómo un píxel o un vértice, por ejemplo, los cuales se encuentran en una parte concreta de la pantalla. Esto nos ayuda a ordenarlos según su posición en el frame, ya que como mucho afectaran los elementos colindantes.
Por lo que la coherencia de datos, es decir, asegurarse que todos tengan la misma visión de la memoria, solo lo han de hacer para las primitivas gráficas colindantes. Sin embargo, un rayo en el Ray Tracing es diferente, por el hecho de que puede atravesar toda la pantalla y afectar a varios objetos al mismo tiempo.
El hecho de unificar la mayor parte de las instrucciones en una sola unidad nos asegura que todas usan la misma caché y, por tanto, se aumenta la coherencia. Es decir, en vez de tener todas las instrucciones relativas al recorrido de un rayo por la escena en varias unidades, lo que supondría tener que coordinar la coherencia de varas cachés locales distintas y un impacto sobre la caché de segundo nivel importante.