Comentario Original:

…Me gustaria que se pusieran de acuerdo y las gpus avanzaran haciendo que losbrops dejen de ser de función fija…

Esto merece una entrada en si misma, para quien no lo sepa los ROPS son la parte final del pipeline gráfico y son los encargados de dibujar sobre el búfer de imagen los fragmentos ya texturizados y calculados por el Fragment Shader (mal llamado Pixel Shader). Dado que se suele texturizar en bloques de 2×2  los ROPS se agupan en grupos de cuatro unidades ya que reciben la información de 4 pixeles por ciclo de reloj, es por ello que siempre se ven configuraciones con una cifra de ROPS que es múltiple de 4.

Los ROPS tienen una relación directa con la complejidad del Fragment Shader del juego. Existe un rato entre el número de ROPS y la cantidad de Stream Processors por un lado y con el ancho de banda por el otro por el hecho que dicho ratio se mantiene constante cuando se cambia la resolución de salida, se aumenta la tasa de fotogramas objetivo o se utiliza renderizado en estéreo (dos cámaras en vez de una). El caso es que estamos volviendo al Forward Shading por un motivo muy simple, el Deferred Shading al utilizar shaders mucho más cortos acaba impactando en la memoria mucho más rápido, es decir… Los Render Targets múltiples acaban impactar a los ROPS y con ello la tasa de relleno por lo que cualquier motor que renderiza en diferido esta limitado por los ROPS aunque hay una serie de trampas para evitarlo y algunas vienen de la anterior generación pero todas se resumen en el Tile Based Deferred Shading.

 

En la anterior generación los desarrolladores prescindían de los ROPS en PS3… ¿como? Los fragmentos generados por los Fragment/Pixel Shaders no se enviaban a los ROPS sino directamente a los SPE del CBEA para ser generados allí. Tened en cuenta que cada SPE tiene una ancho de banda de 51.2GB/seg con su memoria local.

figure1

Más que lo que tienen los ROPS del RSX para todos ellos en conjunto.

PS3Architecture

Con esto Sony le hacía bypass a los ROPS y conseguía el ancho de banda suficiente y la tasa de relleno para aplicar el renderizado por diferido sin problemas. En PS4 el CBEA no existe pero ha sido reemplazado por la función de los Compute Shaders que hacen exactamente lo mismo, en realidad el concepto de utilizar el CBEA en PS3 no es otro que el de utilizarlo como si fuese un Compute Shader y es aquí donde entramos en lo que la actual generación se refiere… ¿Que es un Compute Shader y cual es su ventaja? Pues su ventaja es que funcionan aparte del pipeline de renderizado, su trabajo principal no es renderizar sino procesar datos pero se hacen importantes como sustitutos a los Fragment Shaders en muchos casos por el motivo en que no están asignados a los ROPS y es que en casos como PS4 los ROPS son un cuello de botella enorme… ¿El motivo? Esta diapositiva lo explica muy bien:

ROPSPS4

Lo paradójico de PS4 es que pese a tener el ancho de banda más alto de las dos consolas de la actual generación y tener el máximo número de ROPS resulta que tiene problemas en lo que al ancho de banda para los ROPS y por tanto esto afecta a la tasa de relleno. ¿Como se solventa esto? En PS3 se tenía el CBEA pero en PS4 no por lo que se tienen que buscar alternativas, la cuales son la siguientes:

  1. Forzar a que el pipeline ejecute en tiles que quepan en tamaño en la cache asignada de los ROPS y desde allí procesar el búfer trasero, si son demasiado grandes van a la GDDR5 y se entra en insuficiente del ancho de banda.
  2. Utilizar los Compute Shaders y almacenar el resultado en la LDS de la Compute Unit como si fuese el equivalente a la memoria local de los SPE.GCN_CU
  3. Tirar de Tile Rendering puro (lo que es una optimización a nivel de arquitectura).

Dado que PS4 y Xbox One utilizan la misma arquitectura gráfica pero con diferente número de unidades lo que se aplica a una se le aplica a la otra.

optimizing-playstation-4-xbox-one-compute-shaders

Es decir, actualmente se puede prescindir en buena parte de los ROPS… y buena parte de los algoritmos gráficos están siendo diseñados para prescindir de los mismos por el hecho que en muchos casos resultan en un enorme cuello de botella. ¿Como es eso? Pues por el hecho que al ampliar el ratio de operaciones por pixel los programas se hacen más largos y las dependencias de los ROPS se acortan al reducirse el número de accesos a memoria.Es decir, la tendencia es que al alargarse la complejidad de los shadersa la limitación son los propios stream processors y los ROPS pasan a tener menos importancia.

Ahora bien, curiosamente Xbox One tiene un mejor equilibrio ROPS:Ancho de Banda:

XB1ESRAMBW

¿Como es que PS4 tiene unos 32 ROPS? El motivo de ello es bien simple, con tal de poder colocar una configuración de unos 8GB GDDR5 hace falta un controlador de memoria de 256 bits y la única manera de conseguirlo en PS4 era con un exceso de ROPS. Si Sony hubiese mantenido el mismo ratio que en Xbox One entonces la consola tendría 24 ROPS pero solo hubiese podido colocar una configuración de 6GB GDDR5 en la consola. Microsoft en cambio al usar DDR3 para la memoria externa no necesita unos controladores de memoria tan anchos pero dado que la DDR3 no tiene suficiente ancho de banda por si sola Microsoft ha solventado el problema con la ESRAM para aquellos efectos que dependen de los ROPS y dado que el ratio de ancho de banda por ROP es mejor en Xbox One en dicha consola se prescinde más de los Compute Shader que en PS4 si se hace uso de la ESRAM, sino se hace uso de la misma entonces la situación es la misma que en PS4. Pero es que la situación de PS4 es la misma que la del PC y este es uno de los motivos por los cuales pienso que Microsoft le ha colocado la carta de despido a la ESRAM en Project Scorpio. Los juegos con la UWP tendrán que estar optimizados por igual en PC y Xbox y el uso de memoria embebida es un imposible en las GPUs de PC por lo que en Project Scorpio muchos juegos se tendrán que optimizar en el mismo sentido que los de PS4 y PC.

El otro tema es el postprocesado, se le llama postprocesado cuando trabajamos con el búfer de imagen ya generado de una escena. Pues bien, la gran mayoría de efectos de postprocesado se están llevando a los Compute Shaders, el motivo es que sus shaders son lo suficientemente cortos como para estar limitados por los ROPS por lo que para que la tasa de relleno no sea un problema se calculan en los CS. Precisamente esto es lo que he explicado antes con el Deferred Rendering.