El misterio del doble procesador de comandos para gráficos en Xbox One (II)

Comentario Original:

Volviendo a tema del segundo Command Processor, creo que recordar que el mismo Urian defendió aquí que era por tener la Xbox los tres SO, y vino a decir que no teníamos ni p… idea. Que alguien me corrija si me equivoco, pero ha cambiado totalmente el discurso!! Ahora resulta que todo tiene que ver con DX12, que sí que hay GPU dual, etc.

http://www.elotrolado.net/hilo_hablemos-del-interior-de-xbox-one_1992540_s15500

Sigo diciendo y pensando que no tienen ni puta idea, son incapaces de comprender y de leer y encima son rencorosos. ¿Un ejemplo? Mirad la caterva de insultos de estos indocumentados e incapaces en el hilo que enlaza Cercadillo:

Captura de pantalla 2016-02-11 a las 11.34.32

Captura de pantalla 2016-02-11 a las 11.35.17

Captura de pantalla 2016-02-11 a las 11.35.57

Hay tres valores que considero muy importantes: La Lealtad, La Libertad y La Verdad. Absolutamente nunca me voy a rebajar al nivel de estos gusanos rencorosos para darles la razón en su mentira y odio extremadamente de que mis palabras y lo que escribo se manipule para intentar cuadrarlo en sy mentira la cual nunca han demostrado. Es más, esta demostrado empíricamente que mienten y aún siguen mintiendo al sostener una falsedad. No tenía pensado hacer esta entrada pero creo que es importante realizarla para zanjar el tema de una vez por todas de manera argumentada y con datos veraces.

Tengo que decir que nunca he negado la existencia del doble procesador de comandos en Xbox One porque las fuentes primarias que vienen de la propia Microsoft así lo dicen. Aparte de que un doble procesador de comandos no significa una doble GPU, esa enorme mentira hay que desterrarla porque esta gente se aprovecha de la ignorancia de la gente y al final hay que poner los puntos sobre las íes, pero eso ya lo haré mas adelante en esta misma entrada

¿Que hace un procesador de comandos? Lo que hace es coger las listas de instrucciones que son enviados por la CPU y las organiza, para luego enviarlas a las unidades de ejecución. Los procesadores de comandos suelen ser microcontroladores en la GPU que ejecutan un microcódigo que es generado por la API la cual es un programa que crea las listas de cosas a hacer que son enviadas al procesador de comandos.

Captura de pantalla 2016-02-11 a las 11.49.29

El Procesador de Comandos tiene acceso a una parte de la memoria que es el búfer de comandos allí es donde dicho procesador e comandos capta lee las instrucciones a realizar. En las APIs de alto nivel las aplicaciones no tienen acceso a dicho búfer de comandos y por tanto de eso se encarga el controlador del SO, en las APIs de bajo nivel o de nivel más intermedio la aplicación escribe directamente sobre dicho búfer de comandos.
cb1

Dicho búfer de comandos es circular, se encuentra en una parte de las direcciones de memoria y cuando se ha terminado de leer este se vuelve de nuevo al principio. De ahí que sea un anillo, en APIs como DX10 y OpenGL 3 hacía atrás solo hay un anillo de comandos, en DX11 y OpenGL 4 lo que existen son varios anillos de comandos pero solo uno pertenece al pipeline gráfico, la particularidad de Xbox One es que supuestamente tiene 2 anillos que tiene puede utilizar dos para gráficos. ¿La ironía? No está disponible para los desarrolladores. ¿Y quien lo utiliza? Hay dos respuestas posibles:

  1. Esta en desuso.
  2. Esta utilizado por el sistema.

¿Y de donde viene la segunda posibilidad? Pues de PS4, el cual también tiene dos procesadores de comandos:

Captura de pantalla 2016-02-09 a las 10.04.10

Sony tampoco da acceso a ese segundo procesador de comandos pero te dice que el segundo procesador de comandos es para uso del sistema mientras que el otro es para los juegos. De ahí a que la conclusión general sea sea dado que la arquitectura de ambas GPUs es la misma se acaba intuyendo ese punto. En la entrada anterior os comente lo siguiente:

La realidad es que tenemos 2 pipelines gráficos, la explicación de los gráficos en el bus no-coherente y la computación en el bus coherente no explica el doble procesador para comandos gráficos porque es algo que se da también en los SoC/APU de PC. El hecho de tener que presentar el sistema tampoco por el hecho que es tan fácil como hacer que la interfaz del sistema se renderice en una de las listas en diferido y convertirla en inmediata con un simple cambio de lista desde un simple procesador de comandos gráficos por lo que no es necesario el doble procesador de comandos gráficos en realidad y no explica el motivo de su existencia.

 

¿Y de donde viene la idea de renderizar en diferido? Si miráis el diagrama de arriba sobre PS4 veréis que es el mismo que las GPU de arquitectura GCN con 8 ACEs, bueno, es lo mismo. Pues hay una particularidad, fijaos también en PC donde hay un solo procesador de comandos, fijaos en el procesador de comandos para gráficos:

AMDACE_575px

¿No lo veis? Tenemos un solo anillo en ambos casos y lo que nos dice el SDK de Xbox One es lo siguiente:

La GPU de Xbox One tiene ocho contextos gráficos, siete de lo cuales están disponibles para los juegos.

Dado que cada anillo de comandos es un contexto gráfico esto significa que el procesador de comandos ha sido modificado para soportar hasta 8 contextos diferentes y no uno solo por lo que tenemos que cada procesador de comandos en Xbox One soporta hasta 8 anillos de comandos distintos de los cuales 7 van al juego y el octavo para el sistema. Por lo que de repente nos encontramos en un escenario distinto al de PS4 y por tanto tenemos que buscar otras explicaciones para el segundo procesador de comandos gráficos en Xbox One y volcar la mesa, ya que la anterior explicación ya no nos vale.

tableflip02

De ahí a buscar posibles explicaciones y aparecer el cancelado proyecto Fortaleza como explicación para la inclusión de dos procesadores de comandos distintos. ¿El motivo? Los 8 contextos no se ejecutan simultaneamente sino que el procesador de comandos solo puede tener uno en activo y el resto en espera y va saltando de un anillo a otro. Es debido a ello que merece la pena replanteárselo todo porque entonces la explicación anterior pasa a ser una falsedad y mantenerla sería mentir. No es contradecirse sino mantener los principios morales y la integridad.

Pero claro, uno tiene que llegar a pensar como es que esta gente ha llegado a la conclusión de que un doble procesador de comandos significa una doble GPU. Hay que darle al tarro y buscar el origen de semejante confusión y como es que se aferran tanto a ella. Al final llegas a la conclusión que no conocen la diferencia entre la parte aritmético-lógica de la GPU y la unidad de control de la misma. Dos elementos que se encuentran en TODOS los procesadores. Es para ello que hace falta una explicación.

En todo procesador independiente de su naturaleza el camino que siguen los datos es el siguiente:

600px-The_Fetch-Execute_Cycle.svg

La unidad de control no ejecuta nada, no es la que encargada de procesar los datos. Veamos la definición en la Wikipedia:

La unidad de control (UC), en inglés: control unit (CU), es uno de los tres bloques funcionales principales en los que se divide una unidad central de procesamiento (CPU). Los otros dos bloques son la unidad de proceso y el bus.
Su función es buscar las instrucciones en la memoria principal, decodificarlas (interpretación) y ejecutarlas, empleando para ello la unidad de proceso.

¿Y en una GPU cual sería la unidad de control? Tomando en cuenta la arquitectura GCN como referencia sería la siguiente:

Captura de pantalla 2016-02-11 a las 12.52.13

El llamado Global Data Share es la unidad que se encarga de ir distribuyendo lo diferentes hilos a ejecutar entre las diferentes compute units, forma parte también de la unidad de control:

Captura de pantalla 2016-02-11 a las 14.20.48

Las Compute Units no forman parte de la unidad de control, sino que son la unidad de proceso:

Captura de pantalla 2016-02-11 a las 14.18.09

¿Y los buses? Que hay de los buses? Esta claro cuales son en el diagrama:

Captura de pantalla 2016-02-11 a las 14.21.53

¿Como extrapolamos esto a Xbox One?

vh26w9eddxy3brz9kfkc

La unidad de control:

Captura de pantalla 2016-02-11 a las 14.24.12

La unidad de procesamiento:

Captura de pantalla 2016-02-11 a las 14.24.54

Los buses:

Captura de pantalla 2016-02-11 a las 14.25.21

 

Duplicar la capacidad de la unidad de control no duplica la capacidad de la unidad de ejecución porque son dos partes distintas.

Curiosamente lo que ha hecho Microsoft es darle al procesador de comandos de Xbox One la misma capacidad que tienen los ACEs, los cuales pueden trabajar con múltiples anillos de comandos. Los propios arquitectos de la consola realizan una explicación en su entrevista a Digital Foundry sobre los ACEs que se puede extrapolar a la perfección en este escenario dado que los procesadores de comandos de Xbox One y los ACE funcionan igual al trabajar con varios anillos de comandos.

Andrew Goossen: El número de colas de computación asíncrona proveídas por los ACEs no afectan a la cantidad de ancho de banda o el número efectivo de FLOPS o cualquier otra métrica de rendimiento de la GPU. Más bien dicta el número de contextos simultaneos con el que el planificador de la GPU puede operar en cualquier tiempo. Puedes pensar en ello como análogo a los hilos de software de la CPU, son lógicamente hilos de ejecución que comparten el hardware de la GPU. Tener más no necesariamente mejora la potencia del sistema, de hecho es como un programa corriendo en la CPU, demasiados hilos concurrentes pueden crear el efecto agregado que el rendimiento efectivo sea peor debido al trhashing.

Es decir, el aumento del número de contextos no supone un aumento en el número de estos contextos que se pueden procesar por ciclo y es precisamente lo mismo que ocurre con las CPUs multihilo. La idea bajo esto es aprovechar los tiempos muertos del procesador en el que los tiempos no llegan para un mayor rendimiento pero no duplica la potencia total, es como si tuviésemos un operario que hiciese el trabajo en n horas y tuviese una jornada de n+x, pues esas x horas donde no hace nada aprovechemos para que no este parado, pero no es lo mismo que tener dos operarios.

Por cierto, como inciso, si continuamos con la definición de la unidad de control de la Wikipedia:

Existen dos tipos de unidades de control: las cableadas, usadas generalmente en máquinas sencillas, y las microprogramadas, propias de máquinas más complejas. En el primer caso, los componentes principales son el circuito de lógica secuencial, el de control de estado, el de lógica combinacional y el de emisión de reconocimiento de señales de control. En el segundo caso, la microprogramación de la UC se encuentra almacenada en una micromemoria, a la cual se accede de manera secuencial para posteriormente ir ejecutando cada una de las microinstrucciones.

¿Que es lo que he explicado antes con el tema de los anillos de comandos? 😉

Perdón, por el desvío y continuemos. Obviamente el encargado de realizar dichas listas es la API, hay que recordar lo que dijeron los mismos arquitectos de la consola sobre la API Gráfica de Xbox One:

Así que hemos tomado oportunidad con Xbox One y nuestro procesador de comandos a medida y hemos creado extensiones por encima de D3D que van muy bien con nuestro modelo D3D y es algo que nos gustaría integrar de vuelta en la linea principal de PC también.

¿Cual es la modificación en el procesador de comandos gráficos? El hecho de operar con varios contextos/anillos en vez de uno, para ello han creado extensiones sobre DX11 para DX11.x que es la API exclusiva de Xbox One y es DX11 con extensiones y dichas extensiones posteriormente han sido llevadas a DX12 tal y como anunciaron los arquitectos de Xbox One. Es decir, DX12 deriva de los cambios sobre DX11 hechos de cara al hardware de Xbox One principalmente y uno de estos cambios es el hecho de poder manejar varios anillos de comandos gráficos, lo que nos lleva al siguiente diagrama:

DX11 to DX12_zpsj4qm3yiy

Pero esto no aumenta el número de núcleos de ejecución de la GPU en ningún momento ni su potencia . Y como he dicho antes hace aún más misterioso el uso del segundo procesador de comandos para gráficos. En PS4 tiene sentido que se utilice para el sistema porque no están modificados respecto a la arquitectura GCN (Sony no lo mencione en sus modificaciones en el hardware de PS4) y por tanto solo pueden operar con un anillo. En Xbox One donde tenemos 8 anillos/contextos y dejamos uno de ellos al sistema la cosa cambia, de ahí como he dicho antes de buscar una explicación para el doble procesador de comandos y es cuando como he dicho antes aparece el cancelado Fortaleza como explicación.

Explicado esto me retiro, los de siempre pueden continuar con su historia de la doble GPU, no por mucho repetirla la convertirán en verdad.

Anuncios