Blog personal sobre tecnología

Disruptive Ludens

No descartéis una Switch 2 con SoC de NVIDIA

Rumores Banner

Este post es largo, lo he protegido con contraseña, ya que es exclusivo para el Discord. Parte de él aparecerá en un futuro artículo en HardZone.

Parte I: La patente del Tile Rendering de NVIDIA

Hay una patente que NVIDIA público el año pasado, que sinceramente me ha llamado poderosamente la atención. ¿el motivo? No parece describir una GPU como las que habitualmente utilizan en PC y me sorprende que haya pasado desapercibida.

La patente se titula: MULTI-RATE SHADING USING REPLAYED SCREEN SPACE TILES.

Y ya desde su introducción ya nos indica que estamos ante un Tile Renderer, lo que no es normal en las GPU de NVIDIA.

Un aspecto de la divulgación proporciona un método renderizar una imagen, el cual incluye:

  • Colocar las primitivas de la imagen en un espacio de pantalla.
  • Agrupar las primitivas en tiles del espacio de pantalla que tocan a las primitivas.
  • Rasterizar los mosaicos.

La rasterización antes mencionada incluye sombrear un subconjunto de las primitivas agrupadas en uno de los tiles en múltiples paos a múltiples tasas de shading. Cada una de las tasas de sombreado se basa al menos en una frecuencia en la que un color que se sombrea en cada pasada cambia en el espacio de la pantalla.

El subconjunto de las primitivas se almacenan en caché en una memoria en chip de un procesador que representa la imagen entre las pasadas.

Es la definición exacta de un Tile Renderer, por lo que lo primero que he pensado es que podría ser una version actualizada del Tile Caching, pero entonces me he encontrado con esto.

NVIDIA PPU Patent

La patente dice lo siguiente sobre dicho PPS:

FIG. 1 es un diagrama de bloques que ilustra un subsistema de procesamiento paralelo (PPS) 100 configurado para implementar uno o más aspectos de la divulgación.

 

El PPS 100 puede ser una parte separada de un sistema informático o estar integrado con otros elementos de un sistema informático para formar un solo sistema. En una realización, el PPS 100 puede incluso integrarse con una CPU y otros circuitos de conexión en un solo chip para formar un sistema en chip (SoC).

Lo cual tiene sentido desde el momento en que hablamos de una pieza para renderizar algo y por tanto de una GPU. Vamos, que esta parte no debería sorprender a nadie.

Lo que nos interesa es en lo que se diferencia del resto:

En la patente ilustrada, el PPS 100 comprende una o más unidades de procesamiento en paralelo (PPU) 110. Las PPU 110 están configuradas para realizar varias operaciones que incluyen operación de propósito general, operación de cálculo y / o operación de procesamiento de gráficos.

En los Tile Renderers se suele hablar de clusters o núcleos. El motivo es que se les llama así es porque habitualmente cada uno de ellos se encarga de un Tile de la escena en paralelo, y por tanto trabajan con varias imágenes en paralelo. Aunque sean parte de una más grande.

A12Z

Sigamos con lo que dice la patente, por qué a continuación veréis el motivo por el cual la patente habla de un Tile Renderer completo:

En la patente ilustrada, la PPU 110 comprende un procesador 120 y una memoria 125 local en el chip.

 

El procesador 120 puede ser una unidad de procesamiento de gráficos (GPU) configurada para implementar el pipeline de procesamiento de gráficos para realizar diversas operaciones relacionadas con la generación de datos en píxeles, basados en datos gráficos suministrados por una CPU y / o una memoria del sistema.

 

Cuando se procesan datos de gráficos, la memoria local 125 se puede utilizar como memoria de gráficos que almacena uno o más búferes de cuadros convencionales y, si es necesario, uno o más de otros destinos de renderizado también. Entre otras cosas, la memoria 125 se puede usar para almacenar y actualizar datos de píxeles y entregar datos de píxeles finales o cuadros de visualización a un dispositivo de visualización (no mostrado) para visualización.

Es decir, estamos ante una patente de NVIDIA que nos describe una GPU distinta a lo habitual en ellos. Un Tile Renderer, un tipo de GPU que se utiliza en entornos de bajo consumo donde no hay un ancho de banda muy grande y se ha de buscar la forma de ahorrar los accesos a memoria.

Vayamos ahora a la FIG. 2, la cual nos confirma que estamos ante una GPU:

La FIG. 2 es una ilustración conceptual de un pipeline 350 de procesamiento de gráficos que puede implementarse dentro de una unidad de procesamiento en paralelo en una aplicación de esta patente.

 

El pipeline 350 de procesamiento de gráficos puede implementarse mediante uno o más elementos de procesamiento, tales como uno o más multiprocesadores de flujo continuo dentro de una PPU. Alternativamente, el pipeline de procesamiento de gráficos 350 puede implementarse utilizando elementos de procesamiento de función fija dedicados.

 

En algunas implementaciones, una PPU puede configurarse para implementar múltiples pipelines de procesamiento de gráficos.

Esto es un poco más complicado, pero nos esta indicando que cada PPU no es un SM sino un GPC al completo al integrar todos los elementos necesarios para renderizar una escena.

Es decir, la PPU es un GPC que esta conectado a una memoria. Si miramos la organización de las GPU de NVIDIA veremos que la memoria a la que la GPC esta conectada es la Cache L2.

Y es que en el caso del Tiled Caching, que no Tile Rendering, de las actuales GPU de NVIDIA. Estas escriben los tiles en la Cache L2, con el peligro que acaben siendo descartados a la RAM de vídeo que se encuentra externamente al chip, lo que le impide a las arquitecturas de GPU de NVIDIA actuar como Tile Renderers al uso.

Por lo que tendremos que ir a la FIG. 3 para aclarar esta confusión y saber si la patente es de un Tile Renderer o no.

Este diagrama puede parecer bastante confuso, pero hemos de tener en cuenta que en el diagrama de la FIG. 2 aparece la Tiling Unit 375 justo antes del Screen Space Pipeline.

La unidad de mosaico 375 es un motor que ordena las primitivas (polígonos) de los gráficos y que reside entre el World Space Pipeline y el Screen Space Pipeline. El espacio de la pantalla es dividido en tiles, donde cada tile representa una una porción distinta del espacio de pantalla.

 

Para cara primitiva (polígono) la unidad de tiling 375 identifica los tiles que en pantalla que se cruzan o tocan con la primitiva en un proceso que es llamado «binning». Después de agrupar una cantidad concreta de primitivas gráficas sobre un tile, todas las primitivas gráficas relacionadas con dicho tile se transmiten al setup engine (unidad de rasterizado) 380.

Es decir, la Tiling Unit hace exactamente lo mismo que la unidad análoga de un Tile Renderer, donde lo que hace es clasificar las primitivas de la escena según su espacio de pantalla.

¿Qué tiene que ver esto con la FIG.3? Pues que esta la describe con mayor detalle.

La FIG.3 ilustra una implementación de una parte 500 de un pipeline de procesamiento de gráficos que está configurada para reproducir y procesar datos primitivos en múltiples pasos.

 

Como se ilustra, la parte 500 incluye una unidad 510 de múltiples pasos (MP) que se sitúa antes del Screen Space Pipeliine. La unidad MP 510 puede residir dentro de una unidad de tiling, como la de unidad en la FIG. 2

 

La unidad MP 510 esta acoplada a un búfer 520 que esta configurada para almacenar los datos de las primitivas. Los datos que se almacenan en dicho búfer corresponden a uno o más tiles.

 

En una aplicación, el búfer 520 es una unidad de memoria de acceso aleatorio (RAM), puede ser una memoria local, como la 125 de la FIG. 1

Ahora tenemos los tres diagramas perfectamente conectados entre si de manera coherente, por lo que con esto podéis visualizar mejor la patente.

El búfer 520 contiene los datos de las primitivas graficasque van de PD0 a PDN Cada dato de dichas primitivas gráficas incluyen los índices de cada primitiva gráfica, las máscaras así como los paquetes de estado (de cada primitiva).

Es lo mismo que los Tile Renderers donde ordenan la geometría y la catalogan por cada Tile, claro esta que la patente no nos da ninguna pista sobre que es y donde se encuentra dicha memoria, pero llama poderosamente la atención que en la aplicación sea llamada RAM, ya que una memoria RAM y una cache no funcionan igual. Una memoria RAM requiere que sea el programa mismo el que llene o vacié sus líneas de datos, en una cache en cambio el proceso es automático.

Dicho de otra manera, en un Tile Renderer el uso de una cache es contraproducente ya que su funcionamiento depende de que los datos del Tile se encuentren dentro de la RAM dentro del chip en cada momento. Por lo que NVIDIA solo tendría que añadir una RAM interna a la Tiling Unit escriba, pero se ha de tener en cuenta que una vez ordenados los datos, estos necesitan ser leídos por la unidad de rasterizado, la cual lee de la Cache L2. ¿La solución de NVIDIA? Operar sobre la cache L2 en vez de crear un mecanismo de copia.

¿Describe la patente un futuro procesador de NVIDIA con Tile Rendering completo? Pues no, la patente es clara sobre esto.

No, no vamos a describir como funciona el proceso de nuevo ni daros  nuevos detalles, solo que os quedéis con lo siguiente:

La FIG. 4 ilustra una realización de un método 700 para reproducir una imagen con shading de velocidad múltiple.

El método 700 puede ser realizado por una PPU, tal como la PPU 110 en la FIG. 1. En una implementación, el método 700 se realiza mediante una PPU en arquitecturas NVIDIA Maxwell ™, Pascal ™ y Turing ™. El método 700 comienza en el paso 705

Pues bien, esto es solo la introducción, y si, han sido «solo» 1500 palabras, pero es necesario que entendáis esto para entender lo que viene a continuación.

Parte II: Nintendo Switch

Nintendo Switch

Uno de los problemas que en teoría tiene Nintendo Switch, mirando las especificaciones sobre el papel. Es que en teoría debería tener problemas en emular el funcionamiento de la Wii U, en concreto los algoritmos gráficos que hacían uso de la memoria embebida en la GPU de dicha consola y que dependen de un enorme ancho de banda que solo es posible alcanzar con dicho tipo de memoria.

¿Cuál es la realidad? Pues que esto no ocurre en absoluto y solo hay una explicación para ello, lo que se llama la invalidación de líneas de cache y es un proceso que es fácil de explicar. Invalidar una línea de cache consiste en hacer que el mecanismo de cache ignore cierta parte de sus líneas de memoria. ¿El resultado de ello? Dichas partes se pueden tratar como memoria RAM convencional.

¿En que se traduce esto? En que los datos para el Tile Rendering en la Cache L2 no se descartan y se quedan en la misma hasta que el programa lo avisa. Claro esta que esto requiere manejar la GPU con una API de bajo nivel y totalmente propietaria, y es aquí cuando me voy a comer todo el cuervo. NO de cara a lo del DLSS que es donde creo que todo el mundo esta equivocado respecto a la asociación Nintendo-NVIDIA, sino de cara a la no continuidad con NVIDIA en una eventual Switch 2.

Nintendo en Switch utiliza una API creada por NVIDIA llamada NVN API. La cual le permitiría invalidar las líneas de cache para que la GPU pudiese funcionar como un Tile Renderer y que no hubiese problemas de rendimiento a la hora de aplicar ciertos algoritmos gráficos que requieren de un alto ancho de banda y que no pueden permitirse ser ejecutados en la LPDDR4 que tiene el sistema como memoria.

Las consecuencias de esto es que si Nintendo quisiera mantener la compatibilidad hacía atrás con la Nintendo Switch en una eventual sucesora debería mantenerse junto a NVIDIA, dado que el código de los juegos esta altamente atado a los procesadores gráficos de dicha marca.

Parte III: El pacto Nintendo-Samsung

Los rumores acerca de una eventual tercera revisión de Switch con una pantalla de Samsung son parte de un plan que tiene Nintendo de cara a asegurarse la mayor producción de una futura generación de la consola.

Los rumores hace unos meses hablaban que Nintendo utilizaría una GPU RDNA de AMD debido a un posible contrato entre Samsung y Nintendo. Los medios mezclaron el trato AMD-Samsung por el medio, pero actualmente sabemos que el mayor cliente de Samsung es NVIDIA y no AMD, gracias a sus RTX 3000.

Un SoC Tegra bajo el proceso de 8 nm de Samsung es posible para una eventual Nintendo Switch 2, pero dicho SoC no va a ser como los mentideros de la red van diciendo por ahí. No tiene sentido incluir elementos como los Tensor Cores si su mayor funcionalidad que es el DLSS no sería utilizable a tales niveles de potencia, mucho menos los RT Cores, los cuales pueden ser extirpados sin problemas de las unidades SM.

En realidad NVIDIA no necesitaría diseñar nada, ni unidades custom ni nada por el estilo, sino extirpar todo aquello que los NVIDIA Tegra para automoción tienen y que una consola no necesita, ya que no utilizaría para nada de nada.

¿Ejemplos? Veamos:

  • El NVENC que es el codificador de vídeo de las GPU de NVIDIA, el cual dado que en las plataformas de Nintendo no hay integrado una función de streaming no es necesario.
  • EL NVDLA, que son las unidades Deep Learning integradas en los Tegra desde Xavier para la visión por computador. No serían más que espacio inútil.
  • El PVA, otra unidad basada en la visión por computador que es descartable.
  • El ISP, relacionado con las cámaras, Nintendo Switch no tiene y la sucesora tampoco debería tener, no aportan nada a los juegos.
  • Las interfaces PCI Express y NVLink.

El actual Tegra Xavier es una bestia de 360 mm^2, algo que es inviable en una consola. Sus 9000 millones de transistores indican una densidad de 25 millones de transistores por mm^2. El nodo de 8 nm de Samsung tiene una densidad de 45 millones por mm^2. Lo que nos da un SoC de 200 mm^2, un tamaño mucho mayor que los 120 mm^2 que el Tegra X1, eso si, contando todas las unidades que no serían necesarias en una eventual Switch 2.

Esto es todo, perdonad por el enorme tocho.