Hoy os traemos un artículo especial de domingo; nunca más volveréis a desconocer que esconde Xbox One en su interior. Atendiendo a vuestras peticiones hemos querido hacer este pequeño resumen del SoC.
Más historias en la categoría Editorial
- ¿Necesitamos más juegos de Transformers? Rotundamente, sí
- Los Remakes y Remasters se han posicionado en la industria ¿son realmente necesarios?
- 343 Industries estaba destruyendo Halo y no lo sabíamos
No te pierdas nada y ¡Síguenos en Google News! |
Hola a todos, hace tiempo que prometí crear el siguiente artículo y, aunque he tardado más de lo esperado, aquí lo tenéis. En él explicaré las distintas partes que componen el SoC (System On Chip) que tenemos en nuestras Xbox One, así como el papel que representan; intentaré no entrar en algo demasiado técnico para evitar que se haga pesado y difícil de entender para los menos puestos en el tema.
Habéis sido muchos los que nos habéis pedido mojarnos con respecto a este tema y hemos querido ir entrando poco a poco. Nada de magias, brujos o poder oculto. Esta es la realidad de la consola de Microsoft.
No seas rehén de las ideas preconcebidas de lo que pueden hacer las GPU, las reglas han cambiado, ¡y el cielo es el límite!
No, no me he vuelto loco, esta frase podemos leerla en los SDK de Xbox One, y con este escrito intentaré explicar un poco a que se refiere Microsoft con este juego de palabras. Para empezar diré que al contrario de lo que mucha gente piensa, el SoC de la Xbox One incorpora importantes componentes especializados, de cara a liberar de trabajo a la CPU y la GPU, y que todo el sistema completo se ha pensado con un único fin, el data flow. Para definir esto voy a usar las palabras de Boyd Multerer durante el Architecture Panel del Reveal de Xbox One:
Tener el dato correcto, en la cache correcta, en el lugar correcto, en el momento correcto.
Este término también sirve para sacarle el máximo partido posible al procesamiento en la nube. Estas dos cosas comparten la misma filosofía, la capacidad de procesar la mayor cantidad posible de paquetes pequeños de datos, lo que hace que la latencia del sistema (sobre todo la de la memoria) sea muy importante, debiendo ser la mínima posible, de ahí el uso de las memorias eSRAM y DDR3.
[quote_left]“El procesamiento en la nube forma parte del concepto que Microsoft usó para diseñar la arquitectura de Xbox One.”[/quote_left]Bueno, acabada la introducción, dejar claro que en este artículo me voy a limitar a lo que se ha podido ver claramente en los esquemas, tanto del Hotchip de mano de Microsoft como en el publicado en la Asociación Tecnológica IEEE por John Sell y Patrick O’Connor de Microsoft, por lo que todo lo que aparece en este artículo está sacado de datos oficiales.
Antes de ponernos con el interior del SoC de la Xbox One, comentaré un par de particularidades que podemos encontrar fuera de este. Aquí tenéis un esquema de la placa base completa de la consola:
Ethernet
Como se puede ver en este esquema, y es algo que (al menos yo) no había visto nunca, el puerto Ethernet está conectado directamente en el PCIe del SoC de la Xbox One, cuando como norma los puertos Ethernet suelen pasar por el SouthBridge.
Por parte de Microsoft no se ha revelado el porque de esto, pero todo apunta a que ha sido pensando en el procesamiento en la nube, ya que al conectarlo así ésta tiene conexión directa con los componentes de procesamiento de la Xbox One, pudiendo convertirse en una especie de extensión de estos, cosa que no sería posible (o al menos no de manera óptima) si estuviera el puerto Ethernet conectado al SouthBridge.
8GB de memoria Flash eMMC 4.5
Otra de las cosas curiosas que nos podemos encontrar fuera del SoC, es que la Xbox One dispone de 8GB de memoria Flash eMMC 4.5, los cuales (al igual que el anterior punto) se desconoce a ciencia cierta porqué están ahí. Las teorías más predominantes respecto a este tema son dos:
• Que en estos 8GB es donde se va almacenando el vídeo temporal que nos permite guardar los últimos 30 segundos de partida.
• Que sea la memoria de arranque para cuando dejamos la consola en modo suspendido, y que cuando entramos en este modo tanto el juego que tengamos iniciado como aplicaciones y sistema se hospeden en ella, para así conseguir el arranque rápido sin necesidad de usar el Disco Duro, lo cual consumiría más electricidad.
A mi personalmente la primera teoría no me cuadra, demasiado tamaño para solo 30 segundos, a no ser que pusieran más pensando en ampliar en el futuro ese tiempo, me decanto entonces más por la segunda, la cual para mi tiene mucho sentido y la veo la más posible. Pero como he dicho creo no equivocarme afirmando que no se sabe nada a ciencia cierta.
System On a Chip de Xbox One
Para empezar a la izquierda de este párrafo os dejo una imagen del esquema global del SoC. Este SoC de la consola se sustenta en los siguientes componentes, CPU, GPU, coprocesadores, controladores de memoria, MMU, y ESRAM.
Empezaré por los MMU o Memory Management Unit, como su nombre indica, son los encargados de administrar los accesos a la memoria, principalmente mediante la creación de direcciones virtuales de memoria y traducirlas en accesos a la memoria física con el fin de crear un acceso organizado a ella por parte de uno o varios componentes. En el caso de Xbox One nos encontramos con dos distintos:
IOMMU
Este es el más usado en la actualidad, podemos verlo en CPUs, Tarjetas gráficas, Placas Base, etc… Aquí vemos que se usa para los procesadores de audio y la conexión PCIe con la placa base, sirve de conexión con el Acceso Coherente a Memoria Cache de la CPU.
GPUMMU
[quote_right]” DirectX 11 no es compatible con la virtualización de tablas de GPUMMU, cosa que si lo es el DirectX 12.”[/quote_right]Este, al contrario que el anterior, es totalmente nuevo, no encontrándose en ningún producto en la actualidad, a excepción de la Xbox One y si no me equivoco en los servidores GRID de juegos streaming de Nvidia, y como su nombre indica está especialmente diseñado para GPUs. Desgraciadamente la API actual de Xbox One, DirectX 11.x, no es compatible con el sistema de virtualización de tablas del GPUMMU, cosa que si lo es el DirectX 12.
En este caso vemos que se usa para la GPU y una cantidad importante de coprocesadores para organizar su acceso a la ESRAM y DDR3.
La CPU de la Xbox One está basada en la familia Jaguar de AMD y dispone de 8 núcleos, de los cuales uno y parte de otro están reservados para sistema, cada uno tiene una frecuencia de 1,75Ghz, y es capaz de ejecutar 6 operaciones por ciclo, lo que hace un total de 48.
Los 8 núcleos están divididos en dos clusters de 4, y en cuanto a lo que memoria caché se refiere, tenemos 64KB de L1 por núcleo y 2MB de L2 por cluster.
[quote_left]“DirectX 12 permitirá Multi-Thread, que hará que los núclos funcionen en paralelo.”[/quote_left]Actualmente debido al uso de una versión anticuada del DirectX en la consola, los núcleos al igual que en PC no funcionaban en paralelo, lo que también se llama multi-thread, algo que confirmaron los desarrolladores de 4A Games, creadores de Metro. Esto es algo que con el DirectX 12 será solucionado.
También mencionar que en las fotos de Rayos X del SoC se puede ver un bloque de memoria (aparentemente eSRAM por su composición) entre ambos clusters de la CPU, pero se desconoce su uso y qué es exactamente ya que Microsoft no se ha pronunciado al respecto.
Audio Processors y Audio DMA
También conocido como SHAPE (Scalable Hardware Audio Processing Engine)
El SHAPE es uno de los componentes más importantes de la consola, está compuesto por 8 procesadores de audio y su fin es descargar a la CPU y GPU de todo el trabajo sonoro, codificación, procesamiento de sonido, remezclas, efectos sonoros, etc… todo lo que tenga que ver con el sonido lo procesa el SHAPE. Esto es un gran desahogo para CPU y GPU, ya que el sonido es una gran carga.
Tiene una capacidad de procesamiento de 15.4 GFLOPs, que para que os hagáis una idea, esa capacidad de procesamiento equivale a la de 2 núcleos de la CPU de la Xbox One, una capacidad nada desdeñable tratándose de un procesador exclusivo para audio, es más, un usuario de Beyond3d (un conocido foro tecnológico) el cual trabajó en su desarrollo (certificado por Beyond3d) explicó hace cosa de año y medio que la capacidad de procesamiento del SHAPE es equivalente a la de equipos de audio profesional con valor de hasta 1500€, eso no quiere decir ni mucho menos que el SHAPE esté valorado en esa cantidad, pero es interesante saber que tiene la misma capacidad de procesamiento que equipos de ese importe.
* Nota: Actualmente se desconoce cuantos juegos y cuales son los que ya hacen uso del SHAPE.
Memoria DDR3
Bueno esto no está metido en el SoC, pero aún así es importante explicar como funciona y como está implementada esta memoria en Xbox One.
Los ya muy conocidos 8GB de memoria DDR3 de Xbox One, como indica el esquema, tienen un pico de ancho de banda de 68GB/s, rondando los 54GB/s de velocidad sostenible. De ese ancho de banda, la CPU puede hacer uso hasta un máximo de 30GB/s si fuera necesario.
De esos 8GB, 2,5 están reservados para sistema, 5 para juegos y 500MB de uso libre (sistema o juegos según sea necesario).
Al contrario que su competidora, Xbox One no usa memoria unificada, estando esos 8GB de memoria divididos en 4 bloques independientes. Estos bloques, aunque usan el mismo controlador DRAM, pueden leer o escribir independientemente los unos de los otros. Esto hace que el trabajo con gran cantidad de pequeños paquetes de datos sea más eficiente, de ahí también la elección de Microsoft por este tipo de memoria, ya que la DDR3 tiene una baja latencia.
El que la memoria esté dividida en bloques independientes también es beneficioso en caso de acceso simultaneo por parte de la CPU y GPU a ella, ya que de esta manera cada Processor Unit (CPU y GPU) puede acceder a un bloque distinto sin así perjudicarse el acceso mutuamente, consiguiendo que el ancho de banda sea siempre estable y el máximo posible.
Memoria ESRAM
Esta ha sido la gran criticada, y no porque sea un mal tipo de memoria, si no porque algunos desarrolladores opinan que los 32MB de capacidad que tiene se quedan escasos y porque la actual API de Xbox One no dispone de las herramientas idóneas para un uso óptimo de ella. Ambos motivos están relacionados ya que sin DirectX 12 el uso del sistema de DDR3 + ESRAM, aún cuando en los SDK explican como, es complicado.
El uso de eSRAM no es ni mucho menos solo el de caché para los frames, sirviendo para multitud de cosas más importantes, como por ejemplo servir de extensión de la GPU y ser usada para renderizado de objetos en memoria, pero como he dicho esto es difícil sin la API y herramienta nativas de la consola, el DirectX 12.
La estructura de la EeSRAM incluida en Xbox One es bastante compleja y está completamente personalizada por Microsoft, los 32MB están divididos en 4 bloques al igual que la DDR3, estos a su vez a nivel interno están divididos en 8 segmentos de 1.
*Nota: Algunos de estos datos fueron revelados durante una entrevista por parte de Digital Foundry a los arquitectos de Xbox One.
¿Por qué es así? Pues por la siguiente razón, la velocidad de la eSRAM es de 109GB/s, pero bidireccional simultánea, esto significa que es capaz de leer y escribir a esa velocidad al mismo tiempo, lo que hace un total de pico de ancho de banda de 204GB/s, siendo 156 su velocidad sostenible; para ello necesitaban fragmentar la memoria lo máximo posible creando así segmentos independientes los unos de los otros, permitiendo que mientras unos están escribiendo otros puedan leer.
Esto hace que, como en el caso de la DDR3, que la eSRAM en Xbox One también esté pensada para un uso intensivo de lecturas y escrituras de paquetes pequeños de datos.
En caso de usar la eSRAM como caché para los frames, también es importante mencionar que Xbox One permite fragmentarlos y hospedar parte en la eSRAM y parte en la memoria DDR3, eliminando el problema del espacio. Aquí os dejo una imagen sacada de los SDK de Xbox One, en la que muestra un caso práctico.
Como notas importantes, mencionar que el uso de la eSRAM es exclusivo desde el GPUMMU, por lo que la CPU no puede hacer uso de ella, quedando reservado el acceso para el núcleo gráfico (GPU) y a algunos de los co-procesadores; al contrario de lo que algunos piensan, las velocidades de la memoria DDR3 y la eSRAM se pueden sumar ya que se pueden usar simultáneamente, lo que da como resultado que Xbox One tenga un ancho de banda total sostenible sobre 200GB/s.
GPU y coprocesadores que comparten GPUMMU
Swizzie Engines
Estos también son conocidos como Data Move Engines (DME), y su labor es descargar de trabajo a la CPU y GPU. Los cuatro DME tienen la capacidad de mover los datos de un lado para otro del sistema, liberando a la CPU de esa labor haciendo que el sistema pueda seguir computando sin interrupción mientras los datos se mueven.
Aun así hay dos que tiene otra funcionalidad extra, uno de ellos también se encarga de la codificación LZ, y el otro de la descodificación JPEG y LZ, este último es un formato que comprime evitando perdida alguna de calidad, liberando así de esa labor a la CPU.
Video Engines
Estos no tienen mucha perdida, y como su nombre indica se dedican a la codificación y descodificación de formatos de vídeo, soportando múltiples fuentes simultáneas y una gran cantidad de formatos distintos. Como en los casos anteriores, haciendo que la CPU no tenga que ocuparse de dicha labor, con la consiguiente descarga de trabajo.
3 Channels Resize Composite Engine.
Cada uno de los 3 canales de este co-procesador es capaz de hacer varias labores, algunas de ellas son Escalador por hardware y Conversión de modo de color.
Con estos co-procesadores la imagen se divide en partes, cada una pudiendo tener una resolución y framerate distinto, concretamente 2 de estos canales son para el juego en sí, mientras que el otro está destinado a la UI del mismo, por ejemplo:
• En un juego de coches un canal se encarga de la UI procesándola a 1080p pero a 30fps ya que al ser UI no es necesario que vaya a 60.
• Otro canal se encarga de los retrovisores del coche mostrándolos a 900p y 60fps.
• El último muestra el resto (salpicadero, escenario, etc..) a 1080p 60fps.
Tras esto se genera el frame final, escalándose por hardware las partes por debajo de los 1080p a 1080p. ¿Qué conseguimos con esto? Bien, pues que la GPU pueda ahorrarse trabajo procesando ciertas partes a un framerate o resolución inferiores cuando no es necesario que sean a 1080p y/o 60fps, además estos canales tienen memoria, y si algo no ha recibido cambios de un frame a otro le pueden ahorrar a la GPU el trabajo de tener volverlo a procesar, usando el que tienen en caché.
Algo muy similar se puede hacer sin necesidad de estos co-procesadores, podemos verlo en juegos como Dark Souls en los que los enemigos más lejanos van a muy bajo framerate, o en algunos juegos de coches donde los retrovisores tienen una resolución inferior al del resto del juego, pero el tener unos co-procesadores que hagan el “collage” de los distintos planos le ahorra mucho trabajo a la GPU.
Graphic Core (GPU)
Seguramente que esta es la parte que muchos estabais esperando, la GPU, ésta toma como base la arquitectura de la familia Sea Island de AMD, pero recibiendo una gran cantidad de cambios por parte de Microsoft que hacen que las similitudes sean prácticamente anecdóticas; entre ellas, la incorporación de un numero extra de Command Processors cuando las GPUs actuales de AMD solo disponen de uno (incluso las de mayor gama), en Xbox One nos encontramos con 4, 2 Compute Command Processors, y 2 Graphics Command Processors soportando cada uno de ellos 16 work streams.
La GPU también contiene 2 Geometry Primitive Engines, 12 Compute Units (CU) y 4 Render-Backend, todos estos soportan su división en dos contextos gráficos independientes y capaces de trabajar en paralelo, lo que la convierte en la primera GPU que existe con estructura dual.
La pregunta es ¿Por qué hacer eso e incluir 4 Commands Processors y 2 contextos gráficos? Si recordamos lo anteriormente mencionado durante el artículo, una parte importante de Xbox One es la capacidad de manejar pequeños paquetes de datos y de forma ininterrumpida e intensiva. Con un solo Command Processor y un solo contexto gráfico esa filosofía se daría de bruces contra un cuello de botella en la GPU, de ahí el aplicarle el mismo principio que el aplicado en el resto del sistema, DDR3 y ESRAM divididas en bloques que puedan funcionar en paralelo, varios co-procesadores especializados para liberar de trabajo a la CPU y GPU, DME para mover datos sin interrumpir computación, etc…
Un sistema con el único fin de que todo funcione sin parar y en una armonía perfecta.
Resumen de puntos clave de la arquitectura de Xbox One
Sin DirectX 12 muchos de estos puntos o no están siendo utilizados o no lo hacen de una manera óptima.
• Primera GPU del mercado en disponer de más de un Command Processor.
• GPU con estructura dual con dos contextos gráficos independientes y paralelos.
• Memoria de baja latencia para máxima eficiencia al trabajar con paquetes pequeños de datos.
• Gran importancia de la memoria caché, teniendo un total, contando los 32 de la ESRAM, de 47MB en SoC.
• Sistema enfocado en el balance y evitar cualquier tipo de cuello de botella.
• 15 co-procesadores especializados para descargar de trabajo a la CPU y GPU.
• Liberación completa para la CPU y GPU de cualquier proceso sonoro gracias al SHAPE.
• Sistema de manejo de memoria totalmente integrado con todos sus componentes para un uso óptimo de la misma.
• Sistema en el que predomina el paralelismo entre todos sus componentes, coprocesadores, CPU, GPU, ESRAM, DDR3, etc.. de cara a una capacidad de trabajo óptima.
• Arquitectura y sistema de trabajo pensado para el procesamiento en la nube, la cual se puede usar para cualquier tipo de cálculo (iluminación, física, IA, etc..)
• ESRAM, memoria de bajísima latencia y una alta velocidad, dividida en 4 bloques capaces de escribir y leer al mismo tiempo.
• DDR3, memoria de baja latencia y velocidad moderada, dividida en 4 bloques independientes pudiendo leer o escribir cada uno sin importar lo que estén haciendo los otros.
Conclusión
Una pregunta que muchos se harán será, “Si tan avanzada es ¿Por qué está teniendo ciertos problemas de cara a los juegos?” La respuesta es muy simple, la forma de trabajar para la que está preparada la consola es algo nuevo y su API actual, DirectX 11.x, al ser una versión de PC ligeramente adaptada para la consola, complica aún más las cosas.
Los desarrolladores tienen que sacar el rendimiento a la fuerza bruta. Sin embargo vemos a estudios como Turn 10, PlayGround, Crytek o Insomniac que han creado juegos que aún habiendo pasado más de un año en algunos casos, siguen siendo referentes gráficos y tecnológicos en muchos apartados en su género, básicamente porque sabían como adaptarse a la nueva arquitectura aún teniendo una API que les bloquea ciertas capacidades, un par de ellas son, el uso del doble contexto gráfico paralelo y el paralelismo entre componentes.
¿Por qué entonces no hacen lo mismo el resto? (Y esto es una opinión puramente personal). La respuesta es el dinero; a las compañías no les interesa invertir en aprender como usar correctamente una sistema con una API anticuada la cual cambiará totalmente con la llegada del DirectX 12 y Microsoft tampoco puede estar encima de todos los desarrollos asesorándoles como si fueran first parties.
Esto no significa que con la llegada de DirectX 12 a la consola mágicamente todo le vaya mejor, habrá mejoras ya implementadas,la propia API optimiza ciertas áreas de manera automática al portarle código DirectX 11, pero hasta la llegada de los juegos full DirectX 12 la mejora podría no ir más allá de un moderado aumento del rendimiento.
Y para terminar me remito de nuevo a las palabras del 21 de Mayo de 2013 de Boyd Multerer durante el Architecture Panel tras el Reveal de Xbox One y que tras el artículo espero que entendáis mejor:
Esta próxima generación de GPU es… va a ser un salto respecto a la pasada generación de GPU´s, que son muy sensibles a la optimización del micro-código.
Sabes, donde el orden exacto de los códigos y los shaders marcan una gran diferencia en cuanto a su velocidad de ejecución.
Esta vez, la arquitectura del chip se basa en tecnologías como las de las supercomputadoras y se trata más del ‘data flow’ (fluir de los datos).
Tener el dato correcto en la caché correcta en el lugar correcto en el momento correcto es lo que marcará completamente la diferencia en el mundo por sacarle partido a estos chips.