He decidido salirme del hiatus para comentar una cosa que me parece interesante, en realidad dos desde el momento en que tendréis las dos entradas correspondientes hoy pero como dije hace unos días el blog va a tener una falta de actualizaciones periódicas durante un tiempo, es decir, hago esto porque tengo tiempo para hacerlo.

Uno de los videos recientemente públicadas por Digital Foundry es este en el que especulan sobre el hardware de Xbox Scorpio añadiendo algunos datos adicionales sacados del SDK de la consola.

El hecho de que la ESRAM haya sido eliminada de la ecuación es importante porque esto supone cambios muy pero que muy profundos en código de los juegos. Os voy a poner una cita que algunos ya habréis visto ya con anterioridad pero la cita es importante al venir de alguien como Sebastian Aaltonen alias sebbbi en Beyond3D quien tiene experiencia y mucha tocando el hardware de las diferentes consolas y sobre la ESRAM y Xbox One él dijo lo siguiente en su día:

Mirad algunas de las presentaciones de la GDC y el SIGGRAPH (en los últimos tres años). Se mencionan optimizaciones a medida de la ESRAM por varios equipos. Y estoy seguroque cada juego AAA utiliza fuertemente la ESRAM hoy en día y tiene montones de código para esta. Sin la ESRAM el ancho de banda total de la Xbox One es de 68 GB/seg. Incluso los juegos Indie se están volviendo tan gráficamente intensivos que perder 2/3 del ancho de banda total ya no es una elección realista.
Necesitas dirigir manualmente tu uso de la ESRAM y políticas de localización de esta, mover los datos hacía dentro/fuera y escribir/leer datos hacía/desde la ESRAM utilizando la ESRAM y los Compute Shaders. La ESRAM de Xbox One no es una cache automática, esta es una memoria scratchpad completamente manual. La cache eDRAM L4 de Intel (en algunos  modelos Broadwell y Skylake) por el otro lado es una cache automática. Las caches necesitan un espacio considerable en el chip para los tags de la cache y el hardware coherente. Microsoft (AMD)  probablemente decidieron que una cache manual era más adecuada para una consola, debido a que el código a medida será escrito para la consola de todos modos. Intel por otro lado escogio implementar una cache eDRAM de 64MB/128MB completamente automatizada porque en el software de PC casi nunca se optimiza para una sola arquitectura.
La arquitectura de memoria UMA de las consolas modernas (Xbox 360, Xbox One, PS4) hacen dificil emular juegos en una plataforma con una GPU dedicada (como es el PC). Los juegos de estudios internos de los fabricantes pueden utilizar algoritmos donde la CPU y la GPU estén colaborando estrechamente. Este nivel de (baja latencia) cooperación no es posible en un PC con una GPU dedicada. En general ninguna consola con la que he trabajado ha sido diseñada para ser completamente compatible hacía adelante (he trabajado con 7 consolas). Es siempre un sacrificio hacer la consola anterior completamente compatible hacía atrás. Mientras los desarrolladores tengan permiso para acceder al hardware a bajo nivel, la compatilidad 100% a lo fácil no ocurrira.
La cosa esta en que si Microsoft o Sony no permitieran acceso al hardware a bajo nivel, pero su competidor lo permitiera, los juegos se verían y se moverían con un framerate más suave en la consola del competidor. A nadie le gustaría esto, ni a los clientes y tampoco a los fabricantes. Es mejor dejar a los desarrolladores utilizar el hardware al completo ya que resulta en los mejores juegos.
Se ha de tener en cuenta que la ESRAM no funciona como una cache sino como un scratchpad donde el movimiento de los datos se ha de llevar a cabo de manera manual. ¿Que significa esto? Pues que al contrario de PS4 Pro donde la versión de la PS4 más avanzada toma como base la versión de PS4 con cambios en ciertos puntos, en el caso de Xbox Scorpio y Xbox One las builds son completamente distintas.

esram1esram2

Es decir, que de cada juego como mínimo van a haber dos builds, una de ellas pensada para Xbox One y la otra para Xbox Scorpio dond el codigo gráfico de ambas sería dispar por las diferencia en esa parte del hardware, pero lo que llama la atención es esto:

 

esram3esram4

Entre ambas versiones lo que son los assets (modelados, texturas…) serán comunes pero tendremos dos ejecutables distintos en el disco, uno para Xbox Scorpio y el otro para Xbox One y Microsoft venderá a partir de cierto momento discos universales que incluirán ambas versiones. ¿Pero que ocurrirá con los juegos que ya han sido lanzados en Xbox One y que tendrán versión Scorpio? Si los tenemos bajados desde nuestra cuenta nos pedirán que nos los descarguemos de nuevo en la nueva consola y si los tenemos en disco seguramente podremos bajar el parche con el nuevo ejecutable por lo que no será diferente que en PS4 Pro.

Sin salirnos de la GPU lo que nos confirman es un aumento en la cache L2 respecto a Xbox One.

scorpio1

¿Que nos dice el aumento de la Cache L2 de los 512KB a los 2MB? Pues que la Cache L2 sería la misma que la de PS4 Pro y el AMD Polaris 10/RX 480 por lo que podemos deducir un controlador de memoria de 256 bits en total pero no lo tendríamos conectado a memoria GDDR5 sino a memoria GDDR5X para que el ancho de banda de 320GB/seg cuadrase por completo. ¿Significa esto cambios en el controlador de memoria al pasar de GDDR5 a GDDR5X? No, la respuesta es no.

micron_gddr5x_2_575px

Es decir, se puede construir un controlador de memoria para GDDR5 y GDDR5X porque los cambios de uno a otro son nimios. Por lo que podemos deducir que estaríamos ante una configuración de 8 RBEs como en PS4 y PS4 Pro pero se duplican en comparación con Xbox One y aquí entramos en un tema muy interesante. Como he dicho antes ciertos elementos en Xbox One se ven beneficiados por la ESRAM pero para ello tiene que haber un equilibrio entre el ancho de banda de la ESRAM y la tasa de relleno de los RBEs.

XB1ESRAMBW

Pero en PS4 y PS4 Pro lo que ocurre es que no hay ESRAM y pese a la GDDR5 hay un cuello de botella importante.

humusps4bw

Aquí entramos en un punto importante porque si suponemos que la GPU es un AMD Vega y digo suponemos porque de la misma manera que Sony ha podido colocar una Polaris con elementos de Vega en PS4 es posible ver Xbox Scorpio llevando una GPU con arquitectura Vega  y aquí entramos en un elemento diferenciador respecto a Xbox One, PS4 y PS4 Pro que es la Cache L2.

l2vega

En Xbox One era necesaria la ESRAM porque los Render Backends de la GPU (ROPS) no estaban conectados directamente a la Cache L2…

rbe480x

…pero en el AMD Vega si por lo que para ciertas operaciones no habría una bajada repentina por la falta de ancho de banda, pero la diferencia es que en este caso hablamos de una cache por lo que la gestión de la memoria se hace automáticamente, pero no se si vamos a una Vega completa por un motivo muy pero que muy simple y tiene que ver con l forma en la que nueva GPU de AMD para PC gestiona la memoria.

hbccvega

El HBCC puede acceder a diferentes niveles de memoria y gestionarlos él mismo, en Xbox One pare hacer eso necesitamos el uso de los Move Engines/DME para hacerlo de manera manual y muchos juegos funcionan en ese modo manual como he comentado antes por lo que la GPU de Xbox Scorpio no sería una AMD Vega y para poder acceder a la Cache L2 todos los componentes de la GPU se han de conectar al HBCC por lo que por lógica vendría a ser una Polaris vitaminada, seguramente derivada de la misma GPU que AMD le concedió a Sony para la PS4 Pro.

Otro de los elementos que me han llamado la atención del video ha sido lo siguiente:

raster1raster2

¿No es un poco contradictoria la afirmación? La diferencia real entre 1080P y 4K/2160P es de unas 4 veces exactas en lo que al número de pixeles se refiere en pantalla y en el video de DF recuerdan muy claramente que hay juegos de Xbox One ejecutandose no solo a 1080P sino también a 900P e incluso a 720P.

4kscorpio

Sin cambios la GPU debería ser capaz a través de fuerza bruta de renderizar de manera nativa juegos de Xbox One de 1080P a unos 4K pero si tenemos en cuenta la resolución de la mayoría de juegos entonces no se puede escalar a lo bruto y es aquí donde llegan las malas noticias en forma de «Half-Resolution» Rendering y «Sparse Rendering». En el video comentan lo siguiente:

En Project Scorpio, un efecto a media resolución qie es renderizado a 1080P y bilateralmente escalado a 4K podría verse tan bien o mejor que el mismo efecto renderizado a resolución completa en Xbox One. Por ejemplo, en Xbox One, el efecto es producido a resolución completa, digamos que 900p, pero en Project Scorpio este es producido a 1080P lo cual es medía resolución.

¿Media resolución? Si, esto es porque la muestra es renderizada de manera nativa a 3840*1080 por lo que hablamos del doble de pixeles respecto a 1080P pero la mitad respecto a 4K nativo… ¿Por qué es esto importante? Bueno, el salto de esta manera desde los 900P es solo de 2.88 veces por lo que nos sobra potencia para escalar y desde los 720P es justo de… ¡4.5 veces que es la diferencia entre Xbox One y Project Scorpio en cuanto a potencia de calculo!

El «Sparse Rendering» por otro lado no es otra cosa que el «Checkerboard Rendering» que también tiene PS4 Pro y dado que AMD es el proveedor podemos llegar a la conclusión de que funciona justamente de la misma manera que la GPU de PS4 Pro.

Otro de los elementos que llaman enormemente la atención de lo comentado por Digital Foundry del SDK es lo siguiente:

cpulackcpulack2

Llevo tiempo defendiendo la idea de que la CPU de Xbox Scorpio son 8 núcleos Jaguar y sinceramente me gustaría que fuesen núcleos Zen pero esto es para mi la conclusión de que la CPU de Xbox Scorpio es un cuello de botella para esta como lo es en PS4 Pro y por tanto es un AMD Jaguar pero esto no nos debería sorprender desde que Spencer afirmo lo que afirmo no hace mucho y que el dispositivo no se puede alejar mucho del precio de PS4 Pro.ero esto no nos debería sorprender desde que Spencer afirmo lo que afirmo no hace mucho y que el dispositivo no se puede alejar mucho del precio de PS4 Pro e incluso diría que utilizarían casi el mismo SoC para ahorrar tiempo de desarrollo y dinero.

  • Un mayor número de CUs (máximo 48).
  • El sistema de sonido de Xbox One estaría intacto, Microsoft no tiene motivos para cambiarlo en Xbox Scorpio.
  • Los Move Engines continuarían estando porque para ejecutar el código nativo de Xbox One es necesario que estén.

Una vez que tenemos ya el hecho que es una versión vitaminada de la GPU de PS4 Pro, voy a explicar lo de las NCUs/CUs

amd-radeon-rx-480-polaris-10_gcn-4-0-block-diagram

Tenemos unos cuatro Shader Engines y cada uno de ellos con 3 bloques de 3 CUs cada uno.

RX480ShaderEngine

En PS4 Pro cada una de esas CUs han sido sustituidas por una NCU. Recordemos que la GPU de PS4 Pro tiene ciertos elementos de la AMD Vega como son los NCUs capaces de hacer 2 operaciones por ciclo en modo FP16.

ncuvega

Y las NCUs han podido ser implementadas sin problemas y complicaciones de algun tipo por AMD por lo que el mismo cambio podemos esperar en Xbox Scorpio.

Al mismo tiempo sabemos que podemos colocar un cuarto CU por grupo, esto se ve en la RX 460 que también utiliza arquitectura Polaris pero se trata de un chip de menor escala llamado Polaris 11.

AMD-RX-460-Polaris-11-Pro-GPU

Aquí vemos una configuración de 3-4 en cada uno de los Shader Engines por lo que es posible colocar las CUs en grupos de 3 y de 4 y si tenemos en cuenta que falta un cuarto CU en los diferentes grupos del RX 480/Polaris 10 entonces se hacen posibles las siguientes variaciones.

Compute Units Configuración Stream Processors Velocidad de reloj
36 4*(3-3-3) 2304 1302 Mhz
40 4*(3-3-4) 2560 1172 Mhz
44 4*(3-4-4) 2816 1065 Mhz
48 4*(4-4-4) 3072 977 Mhz

Hay que tener en cuenta que de Polaris a Vega lo que ha tocado AMD es la organización interna de las CUs y el hecho de que los RBEs ahora tienen acceso directo a la Cache L2 pero el resto de cosas que no han tocado continuan exactamente igual y esto incluye la organización interna de las NCUs. En realidad la GPU de PS4 Pro no es más que un Polaris 10 cuyo único cambio ha sido la actualización de las CUs por NCUs.

Con esto termino, no me esperaba esta filtración tan pronto.