Graphics Future (II)

Comentario Original:

Eso que dijiste de los tiles es algo que me vengo preguntando hace un tiempo, si aporta tantas ventajas y permite reducir la necesidad de un gran ancho de banda por parte de la memoria externa, realizar renderizado por diferido sin problemas, etc…como es que los demás no lo usan

Por motivos económicos.

El Tile Rendering es mucho más complejo que el renderizado tradicional y acaba haciendo que por el mismo coste salgan chips cuya potencia bruta es mucho más baja. En PC las soluciones de optimización nunca se han utilizado en el diseño de nuevos procesadores gráficos y el Tile Rendering es una de ellas. Lo que se busca en PC es… “Lo más rápido y potente posible” mientras que en entornos embebidos (ciertas consolas, dispositivos Post-PC) las limitaciones son otras y por tanto se optan por otro tipo de arquitecturas más adecuadas a estas situaciones.

Aunque sinceramente si se puede es mucho mejor una arquitectura basada en Tile Rendering que no una arquitectura convencional, obviamente esto significa sacrificar potencia pero a cambio de reducir las exigencias en el ancho de banda de la memoria lo que significa un ahorro en el coste y el consumo totales del sistema. En el coste porque al reducir el ancho de banda reduces el número de chips de memoria necesarios y en consumo porque al reducir el número de chips de memoria reduces el número de pines de conexión y la transmision eléctrica entre ellos.El motivo de ello es que el búfer de dibujado se resuelve sobre la memoria interna y la memoria de video o principal se utiliza solo para copiar el búfer final que será leido por el adaptador de pantalla.

Ahora bien, lo de renderizar sobre la memoria interna no es único de las arquitecturas con Tile Rendering por hardware ya que es el concepto en el que se basan los sistemas con memoria embebida en la GPU. Actualmente en el mercado tenemos tres consolas con esa característica:

#1 3DS y New 3DS (6MB y 10MB aproximadamente).

clipboard07l

#2: Wii U (Con 32MB eDRAM).

wiiugpudie

#3 Xbox One con 32MB ESRAM:

Teardown-Xbox-One-processor-die-2

La diferencia con un sistema de Tile Rendering por hardware es que estos operan con búfers de imagen completos y no con porciones/tiles. La única consola en tener un Tile Renderer por hardware es PS Vita, pero dado que opera no con el búfer entero sino con porciones muy pequeñas del mismo no requiere una enorme cantidad de memoria interna. Es más, cada uno de los cuatro núcleos de Vita puede trabajar en un Tile en concreto de forma paralela al resto. Ahora bien… ¿se puede hacer esto por “software”, es decir… se puede hacer utilizando los shaders? Pues si, pero dado que no hay unidades encargadas del traslado de datos para el Tile Rendering de dichas operaciones se tienen que encargar los shaders por lo que resulta una pérdida de potencia.

No obstante es posible emular el comportamiento de un Tile Renderer en una GPU aunque solo tiene sentido en sistemas con memoria embebida por un lado y por el otro en sistemas en los que se de soporta a multiples listas de pantalla. Las GPU contemporaneas (DX11 u OGL4 en adelante, por lo que la GPU de Wii U la dejo fuera) pueden ejecutar varias listas de pantalla al mismo tiempo en vez de una. Sin ellas aunque emulasemos el Tile Rendering solo podríamos utilizar la potencia de la GPU en uno solo de esos Tiles dado que solo tendríamos una lista de pantalla. En los PowerVR no es que se soporten varias listas de pantalla sino que al existir varios núcleos cada uno de ellos tiene su propia lista de pantalla con la que trabajar.

Ahora bien, hay ignorantes que confunden o hacen confundir malignamente lo que son los Tiled Resources de DirectX 11.2 en adelante con el Tile Rendering, mirando el SDK de Xbox One queda muy claro que a lo que se refieren con los Tiled Resources es a lo que llamamos Virtual Texturing o MegaTexturing, basado en tener un atlas/textura maestra a un nivel superior que la RAM de de video y donde se guardan las texturas utilizadas en la escena pero donde no se encuentran todas las texturas del juego, dicha memoria al estar a un nivel superior es mucho más rápida en ancho de banda y tiene una menor latencia.

XboxOneTiledResources

Lo que si que es posible en Xbox One es almacenar el búfer de imagen o los render targets como si fuesen texturas dentro de la ESRAM. A esto se le llama Render to Texture y es muy viejo, en el caso de Xbox 360 como el búfer final se copiaba sobre la RAM principal tenía que se rescatado, en Xbox One es posible almacenarlo en la ESRAM para rescatarlo desde la misma y operar con el mismo. Todas estas operaciones requieren que los ROPS escriban en memoria varias veces. Ahora bien, en todas las GPUs contemporáneas la resolución no se hace ya sobre la memoria realmente sino sobre la cache de primer nivel por lo que si el programador es lo suficientemente hábil podrá operar con el resultado antes de que se haga la copia en la memoria para luego recuperarla de nuevo.

Eso se consigue con los llamados Compute Shaders… ¿Cual es la diferencia entre un Compute Shader y un Fragment/Pixel Shader o cualquier otro tipo de Shader gráfico? Fácil, en el caso del FS/PS este resuelve escribiendo sobre los ROPS y tomando acceso de la cache L1 para texturas para coger sus datos, al fin y al cabo opera con los datos incluidos en esas memorias. Pero desde donde trabaja es en la Local Data Share y en los registros de la propia Compute Unit (esto es aplicable a Xbox One y PS4 al compartir arquitectura gráfica):

Compute Unit

Los Compute Shader solo operan en la LDS por lo que el truco esta en resolver primero con el FS/PS para que una vez obtenido el resultado el CS se encargue de hacer las operaciones pertinentes en la propia LDS sin necesidad de utilizar los ROPS, volcar los datos a memoria y luego recuperarlos de nuevo.

¿Cual es el siguiente paso que se hará? El siguiente paso es prescindir de los ROPS y para ello se va a implementar el Tile Rendering por hardware en estas unidades, las cuales cuando resuelvan no copiaran en memoria sino en pequeñas secciones de memoria que incluirán cada Tile. El aumento en lo que al número de listas de comandos permitirá emular el mismo funcionamiento de varios núcleos PowerVR con Tile Rendering. Pero…

Secret_to_everybody

En fin, esto es todo, creo que necesitaba aclarar a lo que me refería en la entrada anterior.

Anuncios