Profundizando en Xbox One y DirectX 12

 

Miguel Mellado, nos sorprendió el otro día con un interesante post que el mismo nombró como entendiendo Xbox One. En este artículo nos comentaba las bondades del esperado Directx 12 y el por qué de la arquitectura de la nueva consola de Microsoft. Todo comienza con una breve explicación de la Ley de Moore que nos llevaba a la reinterpretación de la misma por parte de Microsoft.

Como ya se esperaba y se conocía, los ingenieros de Microsoft no son idiotas, y las claves de la Xbox One son el futuro y la sinergia/eficiencia. Las anteriores consolas de Microsoft se han caracterizado por ser maquinas potentes, optimizadas y sencillas de programar y  algo en lo que cualquier persona puede estar de acuerdo es que el hecho por cual esta vez hayan invertido 10 veces más en el  desarrollo de la nueva consola en comparación con su predecesora para lograr un SoC con estructura NoC de supercomputación y paralelización de tareas a traves de un hardware nativo no es un error de la compañia, nada se ha dejado al azar.

La respuesta para la reciente generación de consolas no podía estar únicamente en la potencia bruta, es algo inviable continuar así en el desarrollo de estas debido a dos factores, el encarecimiento del producto y la electromigración.

De ahí, a la solución pasada por esa re-interpretación de Microsoft sobre las leyes de Moore, la optimización de microcódigo. De aquí Miguel nos recuerda otro problema importante, no solo basta con pensar en el microcódigo, hay que tener una arquitectura de hardware pensada para ello de forma nativa.

Cuando tú le hablas a tu consola a bajo nivel a través de optimización de microcódigo y/o API LowLevel y repartes las tareas de manera inteligente obtienes un aumento de la eficiencia del sistema pero también requieres que “quien comunica como se debe repartir las tareas… 1-sea rápido y preciso comunicando 2-sea capaz de hacer muchas cosas a la vez y 3-cuando transporte esas microinstrucciones tenga buenas carreteras en ambas direcciones.

Todos sabemos lo que pasó con la pasada generación, en la cual PS3 tuvo numerosos problemas con el CELL debido a la baja cantidad de memoria que disponía para cada SPU (256KB) y como consecuencia, pese a ser en teoría más potente que Xbox 360 siempre estuvo a la sombra de esta en cuanto a resoluciones y texturas. Para solucionar esto tuvieron que crear un nuevo software que diera el salto del codigo representativo en mosaicos y lo enviara paralelamente a cada uno de los SPU.

Llegados a este momento, entender lo que está ocurriendo en esta fase inicial con Xbox One y el tema de resoluciones es bastante sencillo, algo que ya sabíamos todos y no es precisamente esa falta de capacidad que es arduamente puesta en duda en muchos medios. Xbox One está diseñada para aprovechar este concepto, es decir,  para paralelizar, optimizar, romper, canalizar y estructurar todos sus datos de forma nativa a través de hardware pero ha estado usando un software que no estaba preparado para ello, una API y unas middleware que no entendían de forma nativa el proceso de paralelización (directx 11).

Microsoft lleva más de 5 años desarrollando una API en concreto con capacidades nativas “to the metal” a niveles “físicos”. DX12.

Para poder aprovechar esta forma de computación, además de comunicarse rápido hay que poder hacerlo de forma paralela, onmidireccional (NoC), hay que tener capacidad de dar órdenes mientras ordenas, un sistema eficiente¿Por qué este es el camino? Una GPU moderna se pasa hasta el 80% de su tiempo en ciertas áreas y técnicas gráficas sin hacer “absolutamente nada” con lo cual, tienes una arquitectura que es completamente ineficiente y no es capaz de hacer rendir su potencia base (Teraflops) como debería.

El objetivo es precisamente eliminar esa carencia o inactividad para usar toda la potencia de manera eficiente eliminando los estados de inactividad, sleep forzados, de un CU.

 

 

Las GPUs son bestias realmente complicadas en esta ocasión. En la era de la Xbox 360, para obtener el máximo rendimiento de la GPU si deseabas optimizar el rendimiento, era todo acerca de cómo ordenar las instrucciones que vienen en su sombreado. Todo con el fin de obtener el máximo rendimiento, ajustarlo todo a mano. En esta era, eso es importante – pero no es tan importante como conseguir que todas las estructuras de datos estén en el lugar correcto para que puedan ofrecerte el máximo uso de ancho de banda a través de todos los diferentes buffers. Por lo que es relativamente fácil conseguir porciones de datos que alimenten y maximicen el rendimiento del GPU. Tienes que tener el GPU constantemente alimentadodijo el director de Xbox de Desarrollo Boyd Multerer.

 

Para ello, Xbox One tiene un diseño basado en el de las supercomputadoras y a pesar de tener una potencia más que humilde y unos ROPs y unos ACEs discretos nos damos cuenta que se han doblado ciertas áreas de la piscina del CU y se ha potenciado y doblado la comunicación. Xbox One maneja dos procesadores de comando para GFX y otros dos rocesadores de comando para GPGPU.

Los Render Back Ends, (RBE) y los Raster Operation Pipeline (ROP) ésta vez no son necesarios en la parte de computación general (GPGPU). Las GPU de nueva generación tiene desdobladas ciertas áreas del pool de forma física (como las Unidades Lógicas Aritméticas), los render pipes, los procesadores de comando y un largo etcétera. El aumento de las drawcall entre otras cosas (no todo es drawcall, palabra de moda), junto a la posibilidad de eficiencia en DP y la superioridad de las operaciones por ciclo de la CPU y la GPU crean un sistema sin cuellos de botella y una máquina ultra eficiente con una GPU discreta.

El concepto de PS4 es de el de potenciar la arquitectura actual a través de Teraflops base con lo que sólo tiene un procesador de comando para GFX + los ACE’s extra, para intentar gestionar la parte balanceada de GPGPU.

Si Microsoft no necesita más de 16 ACE para gestionar de base los 1.34Tf ¿por qué Sony pone en PS4 más de los 22-24 que necesitaría para gestionar los 1.8Tf hasta un total de 32? Pues porque es un acercamiento para dotar a la máquina de una capacidad extra en GPGPU a consecuencia de ciertos cuellos de botella que se han visto en Infamous.

El recurso de propósito general y/o GPGPU en Xbox One no se ejecuta con más y más ACE’s como se hace en la arquitectura DX11. El concepto cambia. Mientras el propósito general se ejecuta de manera asincrónica en PS4, en Xbox One tenemos sincronismo en el hilo de ejecución. Sumado al hecho de que DX12 es compatible con múltiples procesadores de comando de manera nativa por hardware de manera eficiente y no por software como hacen las API modernas.

 

Ya bien entrados en el tema nos damos cuenta que DirectX 12 es algo así como el cerebro que necesita Xbox One. Con este nuevo software podremos disfrutar de una importante mejora en nuestra consola porque actualmente se genera un gran tiempo para las tareas de paralelismo en una GPU, pero esto se debe a que la idea en sí de presentar múltiples hilos desde varios subprocesos en paralelo no tiene ningún sentido en las arquitecturas modernas al no estar diseñadas para ello.

Ahora bien, la GPU de Xbox One admite usar dos render pipes concurrentes, es decir, permiten que el hardware pueda representar el contenido del juego en la prioridad alta alta mientras que al mismo tiempo puede representar el contenido del sistema en baja prioridad. Esto está diseñado para maximizar el rendimiento y rellenar vacíos en las tareas de procesado aprovechando así el sistema de una manera más que eficiente.

La alta prioridad puede permitir la prestación del sistema para hacer uso de los programas operativos regionales para el llenado, por ejemplo, mientras que el título está haciendo simultáneamente las operaciones de cómputo sincrónicos en las unidades de cálculo puede estar manejando al mismo tiempo el SO+APP sin problemas. Dicho fácil, las 2 render pipes son para juegos y es trabajo de la gestión de la doble cola de trabajo el gestionar los recursos. DX12 Slogan “2 Cabezas mejor que 1”

 

¿Y qué quiere decir todo esto? Xbox One no está pensada como una máquina moderna, sino que está realmente pensada para el futuro, es decir, no basa su potencia en los Teraflops base, sino en la utilización de estos al 100% de manera eficiente.

Posiblemente después de leer todo esto te estés dando cuenta que muchas de las cosas que teníamos todos por sentadas están cambiando están cambiando totalmente. Si ayer para calcular la potencia de algo decíamos que 4+4=8 es más potente que 3+3=6, hoy ese 3+3 podría cambiar a 3*3=9.

El concepto de GPGPU es el concepto en el cual un GPU pretende ser un CPU, pero usando solo partes de FPU (Floating Point Unit). Así que atendiendo a Moore, la lógica y a la economía y sabiendo que no puedes poner en el salón de tu casa una máquina con 5 Teraflops, Microsoft ha creado un sistema de 1.3 Teraflops discretos que se multiplican por 4 cuando la API correspondiente (DX12) y las herramientas de trabajo (middlewares) están adaptadas. Además hay ciertas soluciones en forma de ASIC a través de procesadores programables tensilica que facilitan la miniaturización y el bajo consumo de la estructura SoC/NoC acelerando el DataFlow (flujo de datos).

¿Por qué decirle a tu GPU que calcule en cada CU una cosa cuando cada CU puede hacerlo todo? Ahora el cálculo primitivo, el vertex, el shader el GPGPU, puede ser gestionado en paralelo en cada CU al mismo tiempo, con lo cual, y citando a Boyd Multerer “poniendo los datos correctos, en el lugar correcto” se obtiene una máquina de increíble eficiencia y poder.

 

Por último, recientemente se hicieron pruebas de portabilidad entre Directx 11.2 y 12 en las que se mejoraba el uso de la CPU en un 50% y de la misma forma en las CPGPU se obtenía otro 50% de eficiencia con tan solo el cambio del software en bruto.

El nuevo DirectX no es únicamente optimización como piensa la mayoría del sector con falta de conocimientos especializados. La gente, de manera errónea, está confundiendo lo que aporta su uso en una arquitectura moderna y actual con las posibilidades que este tiene en una arquitectura nativa para su uso que, previsiblemente se verá de forma nativa en los próximos años en la mayoría de dispositivos.

Ya pudimos ver durante su presentación que Xbox One estaba pensada para DirectX 12, es decir y en mi opinión, tanto DirectX12 como Kinect 2.0 son partes esenciales de la nueva consola de Microsoft y ni mucho menos el hecho de que a partir de junio se vaya a vender sin Kinect supone que se hayan dado por vencidos con él porque ya sabemos que es parte esencial para disfrutar no solo de contenidos adicionales en todos los juegos sino que también será esencial para el uso de la realidad virtual en la consola.

Como nota final, a modo de reflexión y debate, suponiendo que finalmente no ocurra como PS3 y Xbox One logre exprimir toda esa «potencia» o más bien logre ese nivel de eficacia, se producirá un brutal avance en comparación con su rival actualmente pero no hay que cerrar las puertas a una más que posible respuesta en software por parte de Sony Y su OpenGL. Ambas máquinas están destinadas a competir a la par y los usuarios notaremos muy poco estos avances a corto plazo de igual manera que la diferencia visual actual entre los juegos es totalmente ilusoria y está en los números porque cualquier superioridad aplastante podría dejar fuera del mercado a la otra.

Además este dato quizás haga plantearse a los menos partidarios de la consola si Xbox One debería haber salido entonces a la par que DirectX 12. La respuesta a mi parecer es no, no había necesidad, el hardware estaba listo y el reescalador hanna 2 preparado para solventar la carencia del software en los primeros compases de la andadura.

Con esto espero que os sea más fácil comprender lo que supondrá DirectX 12 y el por qué de la arquitectura de Xbox One, todo ha sido muy minuciosamente pensado y desarrollado, en Microsoft no son nuevos e ingenuos.

Fuente: Entendiendo a Moore. Entendiendo Xbox One

Salir de la versión móvil