El terco de Urian sigue con que DX12 es un port del DX11 Mono de Xbox One

En uno de sus blogs comerciales, la gente de AMD ha hablado de los beneficios del DX12 y han hecho hincapié en como la arquitectura GCN esta pensada para dicha API. Esto es algo que me llama poderosamente la atención porque yo tengo la hipótesis que DX12 es en mayor parte, hay que reconocer que tiene cosas nuevas, un port de la API DX 11 Monolithic de Xbox One. Es más, yo teorizo que dado que la API de Xbox One se diseño para sacar provecho de la arquitectura gráfica de la consola que es la GCN 1.1.

La primera tecnología de la que hablan son los shaders asíncronos, el nombre pese a rimbombante no esconde un concepto que sea extraterrestre:

Async_Intro_678x452

En el DX11 estandar y otras APIs del mismo nivel pese a que la GPU soporta multiples hilos de ejecución estos se hacen de forma sincronizada, es decir, en la linea de tiempo lo que se hace es realizar primero el trabajo gráfico utilizando toda la potencia de la GPU y dejar luego el resto del tiempo para otras tareas. Para que la gente entienda el concepto voy a tirar otra vez del concepto del cine del que hable hace unas semanas para explicaros como funciona esto.

Imaginaos que el cine una vez que los espectadores han comprado la entrada se encarga de organizar colas para ir distribuyendo los diferentes espectadores en las diferentes butacas. Pues bien, los encargados de realizar esta tarea son los llamados ACEs o motores de computación asíncrona. Estos forman parte de la arquitectura GCN y hacen precisamente esa tarea, la de acomodar los diferentes programas (espectadores) a cada uno de los shaders.

AMD-ACE

¿Que ocurre cuando tienes un solo acomodador y tienes muchas salas de cine? Pues que habrá salas que no funcionaran porque el pobre acomodador no se puede desdoblar. Es aquí donde entran los ACEs, que toman las listas de cosas a realizar fuera del hilo principal y reparten las tareas al mismo tiempo de tal manera que se ejecutan paralelamente en las Compute Units que no están siento utilizadas. No hay que olvidar que la GPU de Xbox One es del tipo GCN 1.x y cada Compute Unit puede ejecutar hasta cuatro WaveFronts al mismo tiempo, pues bien, el planificador/acomodador solo puede enviar un WaveFront por ciclo de reloj. Tened en cuenta que tenemos unas 12 Compute Units activas, lo que hacen unos 48 Wavefronts activos por lo que tener un solo planificador/acomodador enviando tareas a los shaders es contraproducente.

Así que aprovechando los ACEs/Planificadores se pueden enviar de forma asincrona, es decir en cualquier momento sin estar sincronizado con el hilo principal y con el objetivo de aprovechar las unidades en desuso en ese momento. Al final el resultado es que esas tareas se ejecutan simultaneas el hilo principal que es es el renderizado de la escena, por lo que de esto:

Async_DX11_575px

Pasamos a esto:

Async_DX12_575px

¿Lo cual se supone una novedad de DX12 no? Pues mirad por donde que el mismo concepto fue comentado por la gente de Sony de cara a PS4, recordad que Xbox One y PS4 usan la misma arquitectura para la GPU. Pues bien, la gente de Q-Games, desarrolladores de Tomorrow Children en una presentación del pasado mes de Septiembre en la CEDEC afirmaron que fueron capaces de utilizar los shaders asincronos, solo que el nombre que le dieron es la de computación asincrona.

AsyncQGames

Lo curioso es que Mark Cerny hablo como si fuese el inventor de la idea:

Cerny esta convencido que en los años siguientes, los desarrolladores van a querer utilizar la GPU para más que mover gráficos, y cree que él ha determinado una solució poderosa y flexible para darsela a ellos. “La visión de utilizar la GPU para gráficos y computación de forma simultanea” dijo “Nuestra creencia es que a mitad de la vida de la PS4, la computación asíncrona será una parte muy grande e importante de la tecnología de los juegos.

Cuando realmente es cosa de AMD que son los ingenieros de la GPU, pero el caso es que quiero que entendáis que la computación asíncrona pese a que no existía en DX11 ya se encontraba en PS4 y si Xbox One utilizaba la misma arquitectura. ¿Pero que hay de Xbox One? ¿Dicho soporte va a venir de la mano de DX12? Pues no, resulta que es algo que se implemento en el DX11 Mono de Xbox One:

AsyncXboxOne AsyncXboxOne2Dicho de manera mucho más clara, DX12 en PC es sobretodo un port del DX11 Mono, no confundir con el DX11 estandar, de la Xbox One al PC y los desarrolladores de la consola hace un año que pueden aplicar las “novedades” de DX12 en sus juegos de Xbox One a través de DX 11 Mono.

 

Anuncios