Y Cell apareció
En el mundo de las consolas, la generación que traería los sucesores de la PlayStation 2, Gamecube y XBOX tenía como objetivo demostrar que por hardware se podía llegar a crear mejores juegos. Así, mientras Nintendo armaba Revolution tras bambalinas, Sony y Microsoft empezaban a mejorar mover las piezas internas de sus respectivos productos. XBOX 360 golpeó primero, con la típica camada de videojuegos que rozan las dificultades técnicas y varios problemas de sobrecalentamiento, pero que se recuperó al año. ¿Y Sony, dónde estaba? Ellos anunciaban que tenían una bomba nuclear en la palma de la mano.
PlayStation 3 fue uno de esos productos hiper-recontra-hypeados que sembró fanboys en los campos de la Internet mucho antes de su lanzamiento. Prometía volarle la cabeza en poder – tanto gráfico como de cálculo – a cualquier cosa que se le pasara por delante, hackear la NASA, transformarte en el más inteligente del colegio, y dejar cualquier otra consola mordiendo el polvo, o por lo menos, así lo mostraban las numerosas demostraciones de la consola que presentaban Ken Kutaragi – padre del PlayStation – y Kazuo “Kaz” Hirai, el cabezón de Sony Entertainment Entertainment Inc.
El responsable de todo esto era CELL, en gran parte, y así Sony lo hizo ver: cuando alguien decía “Cell” también decía “PlayStation 3” y al revés. Mientras IBM se jactaba que, junto con Toshiba, era el producto de 4 años de desarrollo y 400 millones de dólares. Junto al RSX (Reality Synthesizer) de NVIDIA, lo que mostraron en la E3 de lo que era capaz tanto la consola como su núcleo era casi como lo mejor que hacía Industrial Light & Magic en esas películas de La Guerra de las Galaxias. Todo tardó 1 año más tarde en salir que su competencia más directa, a precios estrafalarios, pero que según los mandamáses de Sony, valían la pena esas horas extra en tu trabajo para adquirirla. Consumismo en su más puro estado.
¿Qué tenía de interesante este chip? Además de estar basado en PowerPC, básicamente rompía el molde con lo que teníamos entendido de un procesador común y corriente, pues su arquitectura era, en pocas palabras, un chip de 8+1 núcleos. El funcionamiento es muy parecido a lo que podemos encontrar en los procesadores multinúcleo, como CPUs de Quad-Cores o tarjetas gráficas, pero hecho para tareas mucho más particulares. Cell consta de 8 SPE, todos funcionando de forma organizada por un PPE, y que podían acceder directamente a la memoria XDR. Creo que no muchos me entendieron…
¿Qué acabas de decir?
El PPE, Power Processor Element, es el núcleo multihilo organizador de la fiesta, muy parecido al CPU de un procesador de escritorio de arquitectura PowerPC. Mientras, los SPE, Synergistic Processing Elements, son mini-procesadores de arquitectura RISC (como algunos procesadores PowerPC y ARM) diseñados especialmente para procesar instrucciones vectoriales, cada uno con 256KB de SRAM.
Como analogía, bastante rara y básica para no dejarlos dormidos frente a la pantalla, imagínense una Tienda de Ropa Personalizada, algo así como un sastre pero más top y con más gente trabajando. En éste hay un dueño y 8 sastres 100% especializados en hacer trabajo de… sastre. Al entrar un cliente, el dueño (PPE) recibe al cliente, escucha la petición, y manda a cada asistente (SPE) a tareas específicas: uno toma medidas en la cabeza y las anota en una hoja (SRAM), otro toma medidas en la cintura, de los brazos, piernas, etcétera. Al final el dueño junta todas las medidas, las analiza, arma la cotización y despide al cliente.
A diferencia del PPE, que es comparable con el procesador de esos antiguos Mac G5, los SPE son núcleos donde no existe Out-Of-Order Execution, Branch Predictor y Caché: aquí hay completo control de lo que hace cada SPE, el cual corre mejor código vectorial que escalar. Eso quiere decir que se tendrá un mayor rendimiento si le decimos a un SPE “Suma A1, A2, A3 con B1, B2, B3 y dame los resultados en C1, C2, C3” que “Suma A con B y dame el resultado en C, pero hazlo tres veces“. Se puede alcanzar mucho rendimiento programando de forma vectoral (o en SIMD, o en Array, como quieran llamarlo), pero también tiene sus problemas: ¿Cómo le pides que en la segunda vuelta no sume sino multiplique A2 con B2? Sí, no es fácil programar para Cell que como cualquier otro procesador de escritorio, porque a veces todo el rendimiento ganado se puede perder con algunas líneas de código mal optimizadas.
En una consola, este modus operandi, donde cada SPE se puede especializar en una tarea en específica mientras el PPE corre código escalar sin problemas soberbios de rendimiento, es muy provechoso. No está en una computadora multi-propósito, sino en un aparato pensado específicamente para las decenas de procesos que tienen lugar en los videojuegos como inteligencia artificial, detección de colisiones, físicas, casi todo paralelizable. Pero existía un problema gigante, que terminaron por sepultar a PS3 en sus primeros días como a Cell por el resto de su vida. Dicen que el papel soporta mucho, las palabras se las lleva el viento, siempre podrás usar un render para tus presentaciones, WYSINWYG, y que del dicho al hecho, hay mucho trecho.
Lento y complicado por favor
Hace 4 años me dí cuenta que no todo sería un paraíso para los desarrolladores de PlayStation 3. Quienes tendrían que lidiar con la consola, y sobretodo Cell, debían soportar un pastelazo con el diseño del procesador y el acceso a memoria, algo muy importante cuando se trata de simplificar procesos y el movimiento de información. En la PS3 existen dos memorias: una XDR para uso de Cell, algo así como la RAM de nuestros equipos, y la memoria GDDR3 para RSX, el chip gráfico. Ambos chips pueden leer las memorias del otro chip ¿Van conmigo?
El pastelazo que mencioné es el siguiente: Cell era lento para escribir en la memoria vecina GDDR3 de RSX y ¡250 veces más lento para leerla! Para los desarrolladores, el problema se traducía en más trabajo: Para llegar a la memoria de RSX desde el procesador sin perder rendimiento, tenían que darse la vuelta a la manzana y pasar lo que querían en Cell a RSX para que desde ahí pudiesen hablar con la memoria gráfica, y viceversa. La memoria XDR podía servir como una extensión a la memoria gráfica GDDR3, porque el chip gráfico RSX no tenía problemas en leer ambas memorias a máxima velocidad, pero Cell no podía extender a GDDR3 su memoria principal ya que andaba a la velocidad de pendrive chino. Sí, yo también tuve uno. ¿Muy complicado? Tu vecino puede llegar a tu propia casa corriendo y en un instante, pero si necesitas algo de la casa de tu vecino tú no puedes hacerlo a la misma velocidad, debes pedírselo a él.
Sumado a eso la mitad de triángulos por segundo (275 millones) que RSX podía procesar al compararlo con Xenos de XBOX 360 (500+ millones), el resultado estuvo a la vista los primeros 3 años de vida de la consola, y con ello la reputación de Cell: Era un parto programar para la consola, los videojuegos que salieron tenían serias fallas y se veían pésimo comparado con la competencia, nadie quería arriesgarse con crear un título exclusivo sin soporte financiero (por lo menos de Sony) por medio, y muchos juegos cancelados para esa consola, dejando títulos que pegando simultáneamente en XBOX 360, Wii y/o PC. Todo eso sucedió en una consola que costaba casi la mitad del sueldo de mucha gente.
¿Quieren más? IBM tuvo bastantes problemas para producir el famoso chip. Algunos de los SPE simplemente estaban muertos, lo que significó dejar sólo 6 disponibles para los desarrolladores, 1 para el sistema operativo y otro por si llegase uno a fallar.
En la Internet el tema de las imposibilidades de PlayStation 3 resonó bastante. El que sabe algo de inglés se va a reír con esta tira si no es primera vez que la lee.
Cell, el chip que se quedó solo
Como dijo delfín, “¿Quién lo hizo, y por qué lo hizo?” Las primeras impresiones siempre son importantes, lo sé por experiencia propia en mi carrera, y su inicio no partió con el pie derecho a pesar de no ser completamente su culpa. Comentaban por ahí que las herramientas para desarrollar en CELL eran prehistóricas y difíciles de dominar. Los SPE eran bastante específicos, y a pesar de tener bastantes para ser ocupados, si uno quería sacarle el jugo se necesitaba bastante trabajo en el software, pensar mucho en procesos multihilo, y así evitar tiempos muertos. Mientras el CPU de la XBOX 360 era algo así como tres grandes Hummer, que servían hasta para llevar tres cadáveres fresquitos, Cell disponía de seis Kia Pop que requerían desarmar y armar muy bien lo que querías llevar adentro de ellos. Eso era un trabajo mucho más abordable por el sector de supercomputadoras, por ello Cell fue puesto en Blade Center H y luego Roadrunner de IBM.
Sólo el año pasado supimos que IBM le cortó la cabeza a un sector del desarrollo de Cell, presumiblemente porque la evolución de la arquitectura era un callejón sin salida. Toshiba anunció modelos de televisores con este chip para salir justamente este mes (si no lo han retrasado), que seguramente serán carísimos. Por ahora las aplicaciones para Cell se han limitado a una consola de videojuegos principalmente. De hecho, Sony no planea contar con una evolución de Cell en PlayStation 4, lo que en otras palabras significa que buscarán alguna solución que no termine por dejarlos vendiendo una consola a pérdidas y matando la reputación del hardware que lleva adentro. Por otra parte, la merma de triángulos por segundo en RSX le estaría costando a NVIDIA el contrato con Sony para la próxima consola. ¿Es mi idea o todo lo que tocó Cell cayó en desgracia?
Menos mal, PlayStation 3 ha demorado su resto en madurar, y la arquitectura promete durar bastantes años ya que el desarrollo también ha madurado… aunque prefiero pensar que si llegara la PS4 ahora todos los partners de Sony no apoyarían ni un pixel la nueva consola, bastante tienen con las aneurismas para programar en ella.
Por favor, si van a lanzar una PlayStation 4, ojalá no terminen por quitarle cosas a medida que pase el tiempo, porque es la única consola que en mi vida he visto le han restado cosas por cada versión que sale: Retrocompatibilidad, puertos USB, y OtherOS. Por otra parte, el gran plus de estas consolas es la posibilidad de jugar aquellos títulos de la generación anterior, así que está en el aire qué hará Sony para remediar eso cuando salga la próxima versión de su consola si no contarán con Cell. ¿Volverán a juntarse con IBM y Toshiba para remediar los errores del pasado o simplemente olvidarán todo esto? ¿Dejará Sony un sucesor de Cell en la PS4 o veremos un chip totalmente diferente? ¿Cuánto durará Cell en el mercado?
Links:
– Cell (microprocessor) (Wikipedia)
– SIMD (Wikipedia)
– How PlayStation 3 Works (How Stuff Works)
– Understanding the Cell Microprocessor (Anandtech)
– PS3 hardware slow and broken (The Inquirer)
– Nuevos Problemas para la PS3 (CHW)
– Nadie quiere hacer juegos para PS3 (CHW)
– IBM Cell tiene los días contados (CHW)
– NVIDIA no estaría en PlayStation 4 (CHW)
– Can somone please give me a run-down on this!? (Yellow Dog Linux Community Board)
– First look at Windows 7’s User Interface (Ars Technica)
– IBM Roadrunner Supercomputer powered by Cell (ITech News)
– Programming The Cell Processor (Nicholas Blachford)
– Branch Prediction (FIO School of Computing and Information Services)
– Predictor de saltos (Wikipedia)
– Microprocessor Design/Out Of Order Execution (Wikibooks)
– Toshiba’s ‘ultrapremium’ Cell TV breaks out of features prison (CNET)
– Basics of SIMD Programming (Kernel.org)
– De consolas a supercomputadores (CHW)