Por qué la CPU de PlayStation 4 no es una ridiculez

El pasado 20 de febrero se presentó la PlayStation 4, la nueva consola de Sony.
Me apetecía hacer un comentario acerca del procesador ya que seguramente muchos piensen que tiene muy poca capacidad de proceso.

Estamos hablando de una APU de AMD basada en los chips Jaguar, microprocesadores que van destinados a los netbooks, bajo consumo con un buen rendimiento gráfico proveniente de la GPU integrada (se puede llegar a jugar a juegos modernos, eso sí sin máxima calidad ni altas resoluciones, pero con una tasa de fotogramas presentable, a diferencia de los Intel Atom).

La sensación de lentitud que nos puedan dar dichos procesadores en un ordenador convencional viene dada por el hecho de que en un ordenador los procesos son más exigentes con la CPU, se maneja también un sistema operativo con más capacidades de multiprogramación, concurrencia y en general, de gestión de recursos. Si a ello le sumamos navegadores como Chrome, Firefox o Internet Explorer, suites ofimáticas como LibreOffice o Microsoft Office que manejan la web no destinada a móviles, nos hacemos una idea de la capacidad para cómputo de propósito general que requiere un ordenador convencional. También es evidente que este requisito extra de capacidad nos permite también realizar tareas más eficientemente a nosotros (interfaces más avanzadas, más contenido en pantalla, etc.).

A este requisito de rendimiento extra le tenemos que sumar el hecho de que ningún programa sin usos específicos y que pretenda abarcar el mayor rango de público posible, ninguno utiliza las posibilidades que ofrece el juego de instrucciones AMD64 o IA-32 extendido como son las múltiples extensiones SIMD tales como SSE en cualquiera de sus versiones o las más recientes AVX. Sólo en las versiones de 64 bits se tiene asegurado el soporte hasta SSE2 (era lo que llevaban los AMD Athlon 64, los primeros en hacer uso de la versión de 64 bits de IA-32, llamada AMD64).
Los únicos programas que hacen mayor uso de estas instrucciones son los científicos y los relacionados con el mundo de lo multimedia, es decir, en general programas para profesionales, y tampoco todos.

Si nos ponemos a hablar de videojuegos, ninguno hace un uso avanzado de estas extensiones más allá de lo que pueda hacer un compilador. Pensad por un momento qué es lo que ponen en la mayoría de juegos modernos como requisitos mínimos: un Core 2 Duo o AMD equivalente, normalmente un Athlon 64 X2 (cuando por rendimiento tendrían que pedir un Phenom II X2 como mínimo, eso da una idea de lo que se pule a día de hoy el desarrollo de videojuegos para PC). Al estar pidiendo como mínimo un Athlon 64 X2, es un indicativo de que van a fuerza bruta. Un Core 2 Duo tiene instrucciones adicionales y por supuesto una mayor medida de IPC (Instrucciones Por Ciclo). Y bueno, basta con mirar el registro de arranque de cualquier juego que tenga uno para ver qué funciones buscan. Algo similar también ocurría en la época de los primeros Pentium 4 poco después de los Pentium 3. Aquellos Pentium 4 llegaban a rendir menos que un P3 a la misma frecuencia, por lo que al compararlos con un AMD Athlon la diferencia era aún mayor ya que un AMD Athlon rendía más que un Pentium 3. Sin embargo cuando se pedían requisitos mínimos se ponía, igual que se hace ahora, a bulto el requisito de procesador y tarjeta gráfica, declarando mismas frecuencias para un Athlon y un Pentium 4.

Evidentemente tienen que optar por el mínimo común denominador, ya que AMD hasta los Bulldozer no introdujo las SSSE3 ni otras muchas nuevas, sin embargo un Athlon 64 X2 rinde menos que un Core 2 Duo por lo que tampoco están pidiendo los mismos requisitos mínimos y seguramente con un Athlon 64 X2 el juego no funcione todo o bien que se esperaría, mostrando la dejadez que abunda en los videojuegos para ordenador.
Sin SIMD hacemos las tres sumas secuencialmente. Utilizando instrucciones SIMD se pueden hacer al mismo tiempo, con registros vectoriales que permiten cada uno albergar más de un operando, es como sumar, restar, multiplicar o dividir los componentes de un vector simultáneamente.
En general estas instrucciones adicionales de las que estoy hablando permiten hacer múltiples operaciones en menos tiempo, en vez de ir haciéndolas una detrás de otra, por lo que no dar soporte a las mismas es perder una parte importante del rendimiento posible, y esa estrategia de mínimo común denominador (que encima está mal escogido) no ayuda nada. Aun con todo, los videojuegos para ordenador logran alcanzar un aspecto mejorado con respecto al de las versiones para consola.

Entonces llegaron los rumores de la nueva Play y la confirmación de los mismos. Resulta que ese procesador para netbooks, además de tener más núcleos que la versión estándar (8 contra 4 o 2), también lleva un buen paquete de instrucciones SIMD, según Wikipedia: SSE4.1, SSE4.2, AES, PCLMUL, AVX, BMI, F16C, y MOVBE. Por supuesto las SSE anteriores también están incluidas, la retrocompatibilidad a nivel hardware en arquitecturas Intel siempre está asegurada.
Esto es bueno también para el mercado de ordenadores. Significa que los desarrolladores de consola estarán haciendo ya un esfuerzo para programar los juegos con el soporte para todo ello y al llevar los juegos a los ordenadores tienen dos opciones: establecer como requisitos mínimos un AMD FX e Intel Core i7 2XXX de los de hoy día o bien hacer lo mismo de siempre pero mejorado: código lento (comparativamente hablando) para procesadores anteriores y que tengan la suficiente «fuerza bruta» para mover los juegos y luego el código debidamente optimizado que también se usa en consola, con la ventaja de que en los ordenadores los procesadores con dichos juegos de instrucciones son mucho más rápidos también. Sólo mencionar que los nuevos Intel Haswell con las instrucciones AVX2 se dobla el tamaño de los registros vectoriales para todo el conjunto de instrucciones SSE anteriores a AVX, pasando de 128 bits a 256 bits (de vectores de 4 enteros a 8). Las AVX eran sólo para operaciones de coma flotante.

Otra de las novedades interesantes de que Sony haya optado por un hardware que se parezca más a un ordenador convencional es el hecho de que ese procesador Jaguar no está solo, al ser una APU también incluye un chip gráfico. A día de hoy los chips gráficos permiten también realizar procesado más general, eso significa que para cuestiones de físicas o efectos adicionales se puede utilizar también la GPU integrada y dejar en manos de una GPU externa con el rendimiento convencional el renderizado de los gráficos. La consola de Sony sin embargo sólo dispone de la GPU integrada en la APU, así que quizá hagan uso de los núcleos adicionales con sus unidades SIMD para cálculos extra.

Para los que tengan un ordenador con una APU de AMD esto no son más que buenas noticias. En ordenadores existen bibliotecas como OpenCL y DirectCompute (este último desde DirectX 11) que permiten ejecutar código tanto en CPU como en GPU. Teniendo una APU de AMD y además una tarjeta gráfica de AMD, podría obtenerse un buen rendimiento, aunque esto ya requeriría más esfuerzo. Por tema de drivers no es, dichas bibliotecas y los drivers permiten perfectamente utilizar más de una GPU para realizar cualquier tipo de tarea.
Eso sí, no se puede combinar una GPU de NVIDIA con una GPU de AMD, ni que sea integrada, más que nada porque los drivers de dichas compañías si detectan una GPU o driver del contrario, no se instalan o crean conflictos. En cambio una NVIDIA con una Intel o una AMD con una Intel no hay problema, véase por ejemplo el caso de los ordenadores portátiles. Mencionar que las GPUs integradas de Intel que tienen soporte para OpenCL y DirectCompute son las incluidas en sus procesadores Ivy Bridge (Core iX 3XXX), los últimos (hasta que salgan los Haswell, Core iX 4XXX), así que hay demasiado mercado que no las tiene, quedando relegados a su(s) GPU(s) externa(s), que por otra parte la gama alta tiene potencia de sobra para hacerse cargo tanto del renderizado como de cálculos adicionales.

En resumidas cuentas, dadas las características de uso de una consola el tener una CPU potente para propósito general no es importante, y menos aún si se aprovechan los juegos de instrucciones adicionales incluso en la ejecución del sistema operativo (más bien para drivers gráficos, ya que en el núcleo de un SO no hay mucha cosa que se pueda tomar como cálculo de matrices, aunque en recorrido y asignación sí, o incluso en el uso de memcpy) y los programas que corran sobre el mismo. Y como comparte arquitectura con los ordenadores, estos se deberían de ver claramente beneficiados cuando un videojuego obtenga el control de la CPU en su ejecución. Así pues si a pesar de la dejadez actual se obtienen buenos resultados (aunque no siempre), si el código es debidamente optimizado habrá que ver cómo queda la cosa ya que promete bastante.

También añadir que claro, todo esto ahora mismo afectaría principalmente a Windows, pero en un futuro con más ports a GNU/Linux gracias a Steam (y esperemos que más empresas se sumen) quizá se obtenga como resultado núcleos de sistema con funcionalidades y optimizaciones dedicadas a los videojuegos, pudiendo decidir en el arranque qué núcleo utilizar o incluso con el sistema arrancado cargar algún módulo especial con versiones optimizadas de algunas funcionalidades o cambiar el tipo de planificador a usar. A la larga Steambox tendrá que aportar algo al sistema si en un futuro pretende ser también una máquina de alto rendimiento. Por ahora sabemos que no será así, ya que desde Valve se afirma que la competencia de su aparato no son PlayStation 4 ni la nueva Xbox.

Comentarios