PS2 vs DC Ultimate Version (III)

Ahora le toca el turno a PlayStation 2.

Playstation

 

He aquí la arquitectura del sistema:

PS2arch

El gran error que comete mucha gente al hablar de PS2 es ignorar por completo la la logística interna de la consola, como los diferentes procesadores se comunican entre ellos y como acceden a las memorias del sistema.

  • El controlador de memoria que permite a la CPU comunicarse con un ancho de banda de 3.2 GB/seg con los 32MB de memoria, en PS2 el único procesador del Emotion Engine que se puede comunicar directamente con la memoria con ese ancho de banda es la CPU y no el resto del Emotion Engine.
  • Un controlador DMA con diez canales, esta pieza es FUNDAMENTAL para entender el funcionamiento de la consola, el DMA se encarga de la comunicaciones entre los diferentes procesadores y de estos con la memoria, el DMA es el camino alternativo al controlador de memoria para acceder a la memoria principal y otorga un bus bidireccional con la misma de 2.4GB/seg aproximadamente, pero es el único camino que tienen los diferentes componentes del EE para acceder a la memoria principal y también de comunicarse entre ellos.
  • Graphics I/F (GIF): La interfaz utilizada por el el Graphics Synthetizer para comunicarse tanto con la memoria principal (a través del DMAC) como con el VU1.

¿Como es que la logística es tan importante? Pues por el hecho que las comunicaciones entre los diferentes procesadores y memorias nos sirven para entender como es la arquitectura y cuando hablamos de PS2 nos encontramos con el hecho de que hay diferentes caminos de datos. Solo hay que ver el siguiente diagrama donde se ven más detalladas las comunicaciones entre los diferentes procesadores y memorias:

PS2DMAC

 

Sí quiero acceder por ejemplo el VU0 puedo hacerlo desde la misma CPU  (EE Core) o a través del VIF0, si quiero acceder al VU1 puedo hacerlo desde el VU0 o desde el VIF1, sí accedo al GS/Graphics Synthesizer tengo tres caminos distintos a utilizar. La dificultad de entender a la consola de Sony viene por eso, por el hecho de que realmente según los caminos de datos que se tomen se tiene un rendimiento u otro, una arquitectura u otra y de ahí la disparidad de resultados. Ya que pese a esa versatilidad solo hay una forma correcta de utilizar el sistema para obtener el máximo rendimiento posible del mismo y esa forma es completamente contraría a la forma en la que la mayoría de desarrolladores de videojuegos suelen trabajar donde los caminos de datos suelen estar prefijados y por tanto no se suelen preocupar mucho hacía donde van los datos. Sí os fijáis en el diagrama la CPU no esta directamente conectado con las dos VU sino solamente con el VU0 y la FPU, los cuales son los dos co-procesadores de la CPU. Esto es porque al contrario de lo que piensa mucha gente las dos VU no están pensadas para una misma tarea sino para tareas distintas, es por ello que el VU0 es el único de los dos esta conectado a la CPU y el VU1 al procesador gráfico. Sí tenemos en cuenta la función de cada grupo la cosa queda de la siguiente manera:

figure2

¿Nadie se ha preguntado el motivo por el cual el nombre es Emotion Engine? El concepto original es por el VU0, su supuesta función es realizar tareas como la animación de los vértices (de ahí a darle emoción a los personajes y lo de “motor de emociones”), la detección de colisiones y/o  las primeras etapas del procesamiento de la geometría. Sí comparamos con el MIPS R3000A de la primera PlayStation con el Emotion Engine veremos que todo tiene un equivalente excepto el VU0, el cual fue durante mucho tiempo la oveja negra de la familia según los usuarios de PC y la pieza incomprendida del puzzle según una Sony que estuvo años insistiendo en su uso. ¿Pero cual era el problema? Supuestamente el VU0 puede funcionar de dos maneras distintas, en modo macro y modo micro, en el primer caso actúa como co-procesador de la CPU ya que esta escribe sobre su memoria los programas que ha de ejecutar para devolverle el resultado a la CPU, en este caso su función es la misma que las de las unidad SSE, AVX, VMX, en el modo micro funciona como un procesador independiente y los datos pasan por el VIF0, pero casi nadie utilizo el VU0 en modo procesador independiente, para los desarrolladores era mucho más fácil comunicar la CPU con el VU1 que era el motor geométrico de la consola y dejar aislado el VU0.

El VU1 en cambio era el motor geométrico que estaba conectado al rasterizador, el GS, a través del bus GIF. Su tarea era hacer de motor geométrico para la consola, pero no era unidad T&L al uso de función fija sino que era completamente programable y su rendimiento dependía del microcódigo utilizadopero es ahí donde estaba el problema de inició. La VU1 en realidad no era un procesador especializado sino uno de propósito general que tenia que ser programado por los desarrolladores con un microcódigo para que realizará su tarea, paradójicamente las VU de PS2 parecen más una evolución del RSP dentro de N64 que una evolución del GTE de la primera PlayStation por lo que la velocidad a la hora de generar la geometría de la escena dependerá del microcódigo utilizado en las VU. De ahí la disparidad de resultados en cuanto a la geometría de los juegos en PS2.

No es que los desarrolladores fuesen unos vagos y/o la consola no diese para más en ciertos momentos sino que en un hardware de función fija es muy fácil saber el rendimiento que tendrás ya que el programa es inmutable y esta codificado en el hardware, pero en el caso de PS2 no era así y el rendimiento dependía del micro-código, lo cual no es algo negativo teniendo en cuenta que cuando fue diseñado el chip no habían unidades especializadas y todo se hacía por código de propósito general. Los desarrolladores no podían hacer bypass al VU1 desde el momento en que era la única forma de llegar al Graphics Synthetizer que era el encargado de dibujar la escena en pantalla.  La clave de todo ello esta en el GIF (Graphics Interface) que es una interfaz que comunica el VU1 con el GS a través de dos caminos distintos pero también existe un tercer camino que comunica el GS con la memoria principal. Los dos primeros caminos son para enviar comandos y datos y el tercero para que el GS pueda copiar las texturas desde la memoria principal a la memoria embebida dentro del mismo. El GIF es una interfaz uni-direccional que solo envía los datos hacía el GS desde la VU1 y/o la memoria principal. Ahora bien, en la anterior entrada he comentado como el tamaño de un polígono en memoria es de 64 bytes, dado que estos se pasan a través del GIF y son procesados al vuelo entonces tenemos que hacer el cálculo de 147Mhz*8 bytes (64 bits)/64 bytes o lo que es lo mismo de 147/8 o lo que es lo mismo, unos 18.375.000 polígonos sin texturas pueden ser transmitidos a través del GIF, una cifra muy por debajo del teórico máximo de 66 millones de las especificaciones del EE pero que no están nada mal sí tenemos en cuenta que fue contemporáneo a la GeForce256 en cuanto a procesamiento gráfico.

La geometría de Dreamcast se veía limitada por dos factores, falta de memoria VRAM para almacenar la geometría necesaría para el Tile Rendering y el hecho de que al rasterizador no fuese lo suficientemente potente en cuanto a la tasa de dibujado. En el caso de PlayStation 2 la geometría post-procesada llegaba directamente a través del GIF para ser procesada por el GS por lo que no hace falta almacenarla y por otro lado tenemos que la tasa de dibujado del Graphics Synthetizer es lo suficientemente alta como para que esta no resulte nunca un cuello de botella.

Captura de pantalla 2014-08-08 a la(s) 11.56.13

El GS con una tasa de relleno de 2400 Millones de pixeles/seg resultaba tener una potencia bruta 24 veces superior en ese aspecto respecto a la consola de Sega, pero la polémica vino realmente por otro lado. Para mantener unas tasas de relleno así de grandes Sony tenia que colocar memoria embebida en el chip y todos sabemos que la memoria embebida sacrifica densidad de memoria por ancho de banda. Cuando aparecieron las especificaciones de la consola por primera vez muchos se echaron las manos sobre la cabeza por los 4MB de video en la consola, esto era la mitad que DC y para colmo ya existían tarjetas de PC con 16MB de memoria y las de 32MB estaban a la vuelta de la esquina. Lo que muchos ignoraban era que el GS podía acceder a la memoria principal para obtener texturas utilizando la interfaz GIF.

El problema viene por los tiempos de inactividad del GS ya que mientras cargamos las texturas en la cache de texturas del GS el VU1 supuestamente no se estaba enviando geometría de la escena y no es que no se pudiese, en realidad gracias a los diferentes caminos/Path se podían enviar simultáneamente (eso si, con el limite del ancho de banda del GIF) tanto datos desde el VU1 como texturas desde la memoria principal sin que el GS se parase por falta de datos. Esto reducía la geometría que se podía enviar ya que el bus se tenía que ir intercalando y por otro lado también la tasa de relleno, con tal de conseguir la cifra de 2400 millones las texturas se tenían que leer directamente de los 4MB y estos eran insuficientes… ¿pero como afectaba a la tasa de relleno los accesos continuos a la memoria?

Captura de pantalla 2014-08-08 a la(s) 11.52.52

La tasa de relleno se reducía a la mitad utilizando una textura por polígono, recordad que ciertos efectos requieren varias texturas para realizarse por lo que la tasa de relleno se va reduciendo progresivamente por los continuos accesos a la memoria principal que se han de realizar. Obviamente pese a estos cuellos de botella la consola rinde de una forma muy superior a Dreamcast ya que su tasa de relleno de base es lo suficientemente grande como para aguantar lo que le echaban y seguir dando buenos resultados, a PS2 no la salvaba su horrible arquitectura sino su potencia bruta ya que su arquitectura era altamente ineficiente y con ineficiente me refiero a que su máximo práctico real estaba muy lejos de su máximo teórico. No obstante creo que es injusto comparar PS2 con Xbox y GCN por un motivo muy simple, salieron más de un año más tarde al igual que considero injusto comparar PS2 con DC por lo mismo… ¿entonces con que la comparamos? Pues con los PCs equivalentes de la época, cuando la PS2 llego al mercado el chip más potente que había en PC era la GeForce256 y la comparación no la hago para sacar a PS2 de un apuro sino al contrario.

La GeForce256 fue la primera GPU completa, por tanto con una unidad T&L/Geometría en su interior que supuso el aumento repentino de la tasa de polígonos en los juegos de PC, pensad que el juego más avanzado por aquel entonces era el Quake 3: Arena con unos 15K-20K polígonos/fotograma y pese  a que la tasa de relleno de los rasterizadores de PC podían dibujar más en realidad las CPUs no podían, por eso Dreamcast fue tan espectacular en su día, pero fue llegar la primera GeForce y los juegos de PC entonces empezarón a aumentar su tasa geométrica de forma espectacular pero no lo hicieron realmente hasta pasado un tiempo del lanzamiento de la GeForce y con DC ya fuera de mercado. El caso es que teniendo en cuenta que el hardware de PS2 fue terminado en 1999 y la GeForce256 salió 6 meses después en PC y la verdad es que en rendimiento la consola de Sony sale muy bien parada y por encima de la GF256. Mirando la documentación de Nvidia de dicha tarjeta gráfica nos encontramos con lo siguiente:

  1. La GeForce 256 transfoma e ilumina 15 millones de triangulos por segundo. Para conseguir altos ratios de geometría, tienes que re-utilizar los vertices. Sí especificas triangulos especificos la tasa que conseguirás son 5 millones.

Basicamente los modelados no están hechos por polígonos independientes y lo que es un lado de un polígono lo es también de otro polígono, si tengo tres vértices puedo hacer un polígono/triangulo, pero si quiero hacer una forma hecha de dos polígonos entonces solo me harán falta 5 vértices ya que una estara compartida y a medida que vaya subiendo el número de polígonos en el modelo la cantidad de vértices compartidos irá subiendo hasta llegar al ratio 1:1 donde el número de vértices y polígonos sea lo mismo. Por lo que la cifra de los 15 millones de la GeForce es trampa y en realidad son 5 millones,sí tenemos en cuenta las cifras del PA que se dieron en 2003 esta más que claro que PS2 superaba esa cifra y era superior a un PC contemporáneo a su lanzamiento:

Captura de pantalla 2014-08-07 a la(s) 10.44.29

Por lo que podemos concluir que pese a la horrible ineficiencia de la arquitectura la consola para el año en que salió cumplía de sobras en cuanto a rendimiento para lo que se pedía a un hardware doméstico que salió a principios del año 2000 pero no podemos olvidar que el éxito de un sistema lo damos los consumidores y no si es fácil o dificil de programar, a los desarrolladores no les quedo otra que pasar por el aro de PS2 si querían llegar al grueso del mercado y eso creo una mitomanía entre los aficionados de Sony donde se llego a relacionar el éxito comercial de la consola con el hecho de que la consola tenía una buena arquitectura, en realidad el motivo por el cual Xbox 360 recibíó tanto apoyo fue gracias al infierno que era la PS2 en cuanto a desarrollo y progresivamente hemos ido viendo como Sony se ha ido alejando de lo que es PS2 en cuanto a arquitectura. ¿Sí tan buena era la arquitectura de PS2 como es que con PS4 Sony ha renegado completamente de ella? Siempre me he preguntado que hubiese ocurrido de aparecer la DC de Sega un par de años más tarde y siendo tan competitiva como la que salió en 1998, ¿hubiese supuesto su facilidad de programación una ventaja o en su defecto la marca PlayStation y su enorme marketing hubiesen vencido la partida? Lo que esta claro es que PS2 durante su fase de crecimiento no tuvo competencia alguna por parte de ninguna plataforma. Cuando Microsoft y Nintendo tenían a sus consolas saliendo del cascarón para PS2 veíamos cosas como GT3, GTA3, MGS2, SH2, DMC… y todos esos juegos de alto calibre de finales de 2001 que hicieron que Sony ganase el mercado de calle, por lo que el éxito de PS2 fue en parte dado por el timing que permitió que se asentará sin competencia durante casi dos años y cuando esta llego ya estaba todo el pescado vendido a favor de PS2.

Para terminar, el problema es que DC nunca fue competencia para PS2, tan pronto como Sony aterrizo Sega se rindió. Nunca hubo una batalla real más allá de la mente de cuatro fanboys.

Anuncios