La nueva generación de videoconsolas Aspecto externo de: - Xbox 360 (izquierda) - Playstation 3 (arriba) El realismo de los videojuegos Esta presentación intentará delinear los sistemas empleados para conseguir el alto nivel de complejidad que los videojuegos han alcanzado, centrándose en los últimos y más actuales sistemas; la Xbox 360 y la Playstation 3, aún ni siquiera lanzada en Europa. Las videoconsolas clásicas Históricamente, las videoconsolas han sido sistemas con una CPU, su memoria principal (RAM), un chip encargado de las tareas gráficas, y una memoria de vídeo dedicada (VRAM). Este esquema se consolidó en el año 1986 con el lanzamiento en Japón de la Famicom, conocida en el resto del mundo como NES, o simplemente, Nintendo. El chip gráfico era en sí, un procesador, con su propia memoria, que apoyaba a la CPU en lo referente a: - La generación de la imagen - La paleta de colores -Gestión de los planos de scroll (que representan el mundo mostrado en el juego) -Manejo de sprites (las entidades móviles que interactúan entre sí, como son el personaje, los enemigos, los objetos, etc.) Este chip era necesario, pues las CPUs económicas de la época no eran suficientemente potentes como para manejar por sí mismas juego mínimamente complejos. La CPU sigue siendo el procesador principal, que controla al chip gráfico, habitualmente mediante puertos mapeados o no en memoria, así como al resto del sistema. Ejemplos de consolas clásicas Desde la Nintendo, en 1986, hasta la aparición de la Playstation, en 1995, el esquema de las videoconsolas permaneció bastante inalterado. No obstante, hubo una evolución. La generación de los 8 bits. 1986-1991 (Nintendo, Master System, Turbo Grafx,…) La generación de los 16 bits. 1991-1995 (Super Nintendo, Megadrive, Neo Geo,…) Los 16 bits supusieron un aumento en la velocidad de procesamiento, y en las capacidades gráficas de las consolas (más colores, más resolución, más sprites, más planos de scroll, …) A la izquierda se ve una placa de Nintendo. En amarillo, la CPU En rojo, la PPU (Picture Processing Unit) En verde, la RAM En azul, la VRAM En gris, el chip de bloqueo zonal, que impide que se ejecuten juegos extranjeros o no originales. Este chip, llamado CIC, estaba presente solo en la Nintendo y la Super Nintendo. La evolución de las videoconsolas En 1995 Sony lanzó la Playstation, que estableció la era de los 3D en los videojuegos. Las consolas debían enfrentarse al nuevo reto que suponían las aplicaciones tridimensionales: muchas operaciones de coma flotante, y mucho ancho de banda. La Playstation 2 (2000), la Xbox (2001) y la Gamecube (2001), consolidaron los 3D. Las tres son sistemas diseñados y optimizados para el procesamiento de aplicaciones tridimensionales de gran carga computacional. Las CPU empleadas, de 32 y 64 bits, oscilan entre los 300 y los 700 MHz, emplean avanzadas técnicas de pipeline y soportan la ejecución fuera de orden y superescalar. Todas ellas disponen de una GPU* excepto la Playstation 2, que emplea una serie de coprocesadores vectoriales, de alto rendimiento en coma flotante, que se dedican al cálculo de la geometría (alojados junto a la CPU en el Emotion Engine, izquierda, cerebro de la PS2). * chip gráfico, que además del renderizado, se encarga de tareas de transformación de geometría, que liberan aún más carga a la CPU. La llegada del multithreading a las videoconsolas La Xbox 360 y la Playstation 3 suponen un cambio de filosofía respecto a sus predecesoras, pues para aumentar el rendimiento de sus CPUs, apuestan por el empleo de varios core, y la supresión de las capacidades de ejecición fuera de orden. La CPU de la Xbox 360 (Xenon) es de tres cores, y funciona a 3,2GHz. Teniendo en cuenta que el procesador de PC más potente del momento, el Core2Duo, fue lanzado medio año después, en un rango de frecuencias de 1,8 a 2,6GHz, y es de dos cores, puede parecer que el Xenon es una CPU monstruosa. No obstante, hay “truco”. El Core2Duo es fruto de una larga evolución, dispone una capacidad de ejecución fuera de orden fabulosa, así como muchas funciones que optimizan la ejecución de las instrucciones (micro y macro fusión, mejor decodificación, memory disambiguation, predicción de saltos,…). En definitiva, la planificación de la ejecución es muy compleja. Mientras, en el desarrollo del Xenon se optó por prescindir de esta circuitería. Se le ha quitado la "inteligencia" para planificar la ejecución del código, lo cual abarata costes, y ahorra espacio en silicio, que ahora se puede aprovechar para integrar más cores, más caché, etc. Una filosofía de diseño totalmente distinta. De otro modo no se podrían haber integrado más de 2 cores, pues se hubiera requerido tecnología de 65nm, no disponible en el momento. El Xenon no tiene más opción que ejecutar las instrucciones tal y como vienen. Por tanto, un Athlon de doble core a 2,6Ghz, puede ser suficiente para derrotar al Xenon en aplicaciones de propósito general. Entonces, ¿cúal es la ventaja? Pues como ahora veremos, radica en el paralelismo a nivel de threads (TLP) TPL frente a ILP La ejecución fuera de orden y las arquitecturas superescalaras, están enfocadas a explotar el IPL (paralelismo a nivel de instrucción), esto es, el ejecutar el mayor numero de instrucciones simultáneamente. Otras técnicas empleadas son el pipeline, el renombramiento de registros, la ejecución especulativa, y la predicción de saltos. El Xenon, aunque tiene un pipeline largo, no soporta ejecución fuera de orden, y aunque es superescalar, no al nivel de otros procesadores. Su objetivo es explotar el TPL (paralelismo a nivel de thread). Es decir, ejecutar varios hilos de ejecución en paralelo, a costa de optimizar la ejecución de un solo flujo de instrucciones. El Xenon puede ejecutar hasta 6 threads. Para que los juegos de Xbox 360 aprovechen bien el hardware, deben organizar el código de manera que se pueda dividir en threads. Deben, además, de tener ciertas cosas en cuenta. No se pueden programar de cualquier modo, pues el rendimiento se degradaría, al no tener la versatilidad de un procesador de PC. Esquema general de una Xbox 360 Aspecto físico de la Xbox 360 Abajo se ve la placa base de la consola, sin los disipadores de calor. A la derecha, una vista cercana de la CPU, con restos de silicona termoconductora. Introduccion a la CPU de la Xbox 360 El Xenon Es un único chip, compuesto de 165 millones de transistores, que alberga 3 procesadores. Está fabricado en tecnología de 90nm CMOS, usando la técnica SOI. Cada core, basado en la arquitectura PowerPC, dispone de 32Kb+32Kb de cache L1 (instrucciones y datos). La caché L2, de 1Mb, es compartida por los 3 procesadores. Su ancho de banda con el bus de sistema es de 21.6Gb/s. Los procesadores funcionan a 3,2GHz, aunque ciertas partes del integrado funcionan a 1,6GHz. Las señales de reloj son generadas por 4 PPLs integrados en el chip. Core del Xenon Cada core es capaz de traer hasta 4 instrucciones de memoria por ciclo, hasta un buffer de instrucciones, de donde se van despachando a un ritmo máximo de 2 por ciclo, lo cual permite que cada core sea capaz de ejecutar 2 hilos de ejecución (threads). Cada core dispone de 5 unidades de ejecución: - 1 VMX (vectorial unit) - 1 FPU (floating point unit) - 2 FXU (fixed point unit) - 1 LSU (load-store-unit) Además de dispone de una unidad de predicción de saltos, con 4k entradas por thread de BHT (Branch History Table). GPU Una GPU se encarga de las tareas gráficas de transformación y renderizado, esto es, cálculos de la geometría, iluminación, texturizado, efectos, y generación de la imagen. Los vertex shaders se encargan de los cálculos matemáticos, que permiten determinar la posición y orientación de los polígonos en el plano bidimensional de la imagen. Además, permite aplicar efectos a los vértices. Luego, cada polígono es rasterizado, es decir, convertido a una serie de píxels que lo compondrán. El resultado de esta etapa pasa a los pixel shaders, que realizan operaciones sobre los pixeles, calculan su color, profundidad, texturizan, aplican efectos, etc. Los pixeles procesados son almacenados en la memoria de video, listos para ser ensamblados en la imagen final, que pueda ser mostrada en pantalla. De esta tarea se encargan los ROP La GPU de la Xbox 360. Xenos En la Xbox 360, el Xenos (GPU) propone algo un tanto distinto; una arquitectura unificada, donde los vertex shader y los pixel shaders se funden. El Xenos fue la primera GPU en emplear este sistema, y dispone de 48 shaders, que se pueden encargar tanto de procesado de vértices, como de píxels. Fue diseñada por ATI, emplea más de 300 millones de transistores, y está constituido por 2 dies, el core gráfico, y el core hijo (que contiene los ROPs y una memoria eDRAM integrada de 10Mb que sirve de gran caché gráfico). En su desarrollo trabajaron 175 ingenieros. Rendimiento gráfico de la Xbox 360 El Xenos dispone de 48 shaders, y funciona a 500MHz. Cada shader es capaz de realizar 10 operaciones en coma flotante por ciclo de reloj, lo que, simplificadamente, le confiere la capacidad de hacer 240 GFLOPS (500Mhz*48*10). A modo de comparación, la Playstation 2 era considerado un maquinón en coma flotante, con 6,2 GFLOPS, y ninguna de las consolas de la generación PS2-Xbox-GC supera por mucho esta cifra. Como la GPU dispone de 8 ROPs, cada uno de los cuales puede generar un pixel, para ser mostrado por pantalla, resulta que su fill-rate es de 4000 Mpíxels/s. (500MHz * 8) La geometría se cálcula sabiendo que 4 vertex shader pueden calcular un polígono por ciclo de reloj 48 * 500Mhz / 4 = 6000 millones polígonos/s, si todos los shaders se dedicaran a ello. Aún así, la Xbox 360 no es capaz de mover más de 500 millones por segundo (debido a otra limitación). Xbox 360 Xbox MHz 500 MHz 233 MHz Vertex Shaders - 2 Píxel Shaders - 4 Shaders (unificados) 48 - TMU (Unidades de texturas) 32 8 ROPs 8 4 Píxel Fill-rate (Mpíxels) 4,000 932 Geometría (sin pixel ops) 6000 Mpol/s 116 Mpol/s Geometría* 1000 Mpol/s 116 Mpol/s * Usando 8 shaders para vertex Antialiasing El Xenos permite realizar un antialiasing 4x casi sin penalización, gracias al core hijo La memoria unificada de la Xbox 360 Los 512 Mb de memoria RAM de la Xbox 360 son compartidos por la CPU y la GPU. Es de tipo GDDR3, funcionando a 700MHz (que efectivamente suponen 1400MHz). Se trata de una evolución de la memoria empleada en la Xbox (DDR) que funciona a 400MHz efectivos. Los buses de datos de las memorias de ambas Xbox son de 128 bits. Por tanto, el ancho de banda de la memoria de Xbox es 6.4Gb/s Y el ancho de banda de la memoria de Xbox 360 es 22,4Gb/s (3,5 veces superior). La ventaja de la memoria unificada es que es más flexible. En teoría, se podría llegar a usar 412Mb de RAM como memoria de vídeo, siempre y cuando se pudiera trabajar con unos 100Mb de memoria para datos y programa, algo que podría ser factible. Una desventaja de este sistema, es que como la CPU tiene que acceder a la memoria a través del Xenos, los datos tienen que viajar por el bus que comunica la CPU con el Xenos, reduciendo el ancho de banda restante entre ambos procesadores. A continuación indico los principales anchos de banda de varias consolas (Gb/s): Xbox 360 Playstation 2 Xbox CPU-RAM 10,8 (2x) 2,4 1 GPU-RAM 22,4 2,4 6,4 CPU-GPU 10,8 (2x) 1,2 1 Aspecto del Xenos Xbox 360 y su predecesora Esquema general de una PlayStation 3 Aspecto físico de la Playstation 3 El Cell Es un único chip de 234 millones de transistores, que alberga un procesador principal (PPE) y 8 coprocesadores vectoriales (SPE), funcionando a 3,2GHz. Está fabricado en tecnología de 90nm CMOS, usando la técnica SOI. El PPE está basado en la arquitectura PowerPC, capaz de ejecutar 2 threads, como el Xenon. Los SPE se encargan del cálculo vectorial en coma flotante. Cada SPE dispone de 128 registros y 256Kb de memoria local. Además, hay una L2 de 512Kb. Todos los componentes están unidos por un interfaz de alta velocidad. La GPU de la Playsation 3. El RSX La Playstation 3 tiene una GPU de bastante potencia, fabricada por NVIDIA, en tecnología de 90nm, y equiparable en muchos aspectos a una Geforce 7800 GTX*. Al contrario que el Xenos de la Xbox 360, el RSX sigue una arquitectura clásica, y por tanto dispone de vertex y pixel shaders. En concreto, tiene 8 unidades de vertex shaders, y 24 de píxel shaders, así como 8 ROPs, y trabaja a 500MHz. * una tarjeta gráfica de equiparable potencia saldría por algo más de 200 euros, a fecha del lanzamiento de la consola. Rendimiento gráfico del RSX Los vertex shaders del RSX son igualmente capaces de hacer 10 operaciones en coma flotante por ciclo (como los del Xenos). Pero los píxel shaders son más robustos, pues permiten hacer 20 operaciones, al disponer de 2 unidades de ejecución vectoriales, y 2 escalares. El Xenos es capaz de hacer 240 GFLOPS (500MHz * 48 shaders * 10 FLOPS) En el RSX, los vertex shaders son capaces de hacer 40GFLOPS (500MHz * 8 shaders * 10 FLOPS). Y por otro lado, los píxel shaders alcanzan los 240GFLOPS (500MHz * 24 shaders * 20 FLOPS) En total, 280GFLOPS. Este análisis está simplificado, y se refiere únicamente a operaciones shader sobre píxels y vértices, no teniendo en cuenta otras operaciones y contribuciones En diferentes demostraciones, Sony ha utilizado esta arquitectura, por ejemplo, para calcular escenarios con miles de personas, cada una con su física, propiedades y autonomia. Comparativa gráfica Xbox 360 – Playstation 3 Ambas GPUs son fruto de distintas filosofías de diseño. El rendimiento dependerá de la aplicación en concreto, y el aprovechamiento que se haga. Por ejemplo, mientras el Xenos tiene 10Mb de memoria integrada, el RSX no dispone de ella, y debe guardar todos los buffers y texturas en la memoria de vídeo, 10 veces más lenta. Además, el Xenos tiene la libertad de poder balancear el número de shaders que dedica a vértices y a píxeles, mientras que el RSX es fijo. Aunque lo compensa, al tener unos píxel shaders más robustos (normalmente las aplicaciones 3D actuales requieren mucho más trabajo sobre píxels que sobre vértices). Xbox 360 Plastation 3 Xbox MHz 500 MHz 500 MHz 233 MHz Vertex Shaders - 8 2 Píxel Shaders - 24 4 Shaders (unificados) 48 - - TMU (Unidades de texturas) 32 24 8 ROPs 8 8 4 Memoria de vídeo 512 Mb (shared) 256 Mb 64 Mb (shared) Ancho de banda (Gb/s) 22,4 + 256 (eDRAM) 22,4 6,4 Geometría* 1000 1000 116 Píxel Fill-rate (Mpíxels ) 4,000 4,000 932 La guerra de los polígonos Desde la aparición de los 3D, las compañías usan a su favor los datos numéricos y especificaciones técnicas como campaña publicitaria, a menudo dando estimaciones puramente teóricas e inalcanzables, en entornos ideales. En la práctica, se requiere un buen conocimiento de hardware para interpretar adecuadamente la información, y no dejarse sorprender por datos irreales. La Playstation 2 fue lanzada en el 2000 con la cifra oficial de 66 millones de polígonos por segundo, algo que jamás podría imaginarse en un juego real. Se deriva teóricamente de su alta capacidad de relleno, pero en la práctica, la consola está limitada por su ancho de banda y su capacidad para calcular tan alta tasa de geometría. Una cifra más realista, obtenida en juegos reales, podría ser entre 10 y 20 millones de polígonos De nuevo, aunque sus shaders podrían llegar a tasas más altas, la Playstation 3 y la Xbox 360 están limitadas a 250 y 500 millones de polígonos por segundo, respectivamente. No obstante estos valores son altísimos y seguramente no se alcanzarán. El potencial extra de los shaders no se pierde, pues se pueden emplear en aplicar más operaciones a cada uno de los vértices. Comparativa de memoria La Playstation 3 dispone de 512Mb de memoria, como la Xbox 360, pero no unificada. 256Mb de memoria principal (XDR), y 256Mb de memoria de vídeo (GDDR3) La memoria gráfica es del mismo tipo que la memoria de la Xbox 360, GDDR3 a 700MHz. La memoria principal es distinta, XDR, que funciona a la impresionante velocidad de 3,200MHz. Pero ojo, su anchura de bus es de sólo 64 bits. Por lo tanto es poco más rápida que la memoria a 1400MHz de la Xbox 360, cuyo bus es de 128 bits. La XDR está basada en la RAMBUS, un tipo de memoria, ya usada en la Playstation 2, y que llegó a emplearse en los PC, pero sin éxito (RIMM). Por tanto, es muy distinta a la familias DDR, la más común actualmente. La Xbox 360 tiene la ventaja de tener 10Mb de memoria integrada en la GPU, más del doble que cualquier otra consola (la Playstation 2 disponía de 4Mb, y la Gamecube de 3Mb). Aunque por desgracia, cuando usa resoluciones de pantalla de alta definición (720p o 1080i), y antialiasing, la memoria integrada de 10Mb no es suficientemente grande para alojar el buffer de la pantalla, y la imagen debe renderizarse por partes (tile rendering). Playstation 3 Xbox 360 Gamecube Playstation 2 Xbox CPU-RAM 25,6 Gb/s 10,8 Gb/s (2x) 1,3Gb/s 2,4 Gb/s 1 Gb/s GPU-RAM 15+20 Gb/s 22,4 Gb/s 3,6 Gb/s 2,4 Gb/s 6,4 Gb/s CPU-GPU 15+20 Gb/s 10,8 Gb/s (2x) 1,3 Gb/s 1,2 Gb/s 1 Gb/s Pipeline de los PPE Las siguientes transparencias son sólo ilustrativas, y pretenden mostrar la complejidad que pueden alcanzar algunos pipelines. IC: Fases de busqueda de instrucción, y su transferencia al front-end. Se hace parte de la decodificación, para identificar saltos. IB: Alineamiento y parte de la decodificación. MC: Fases de decodificación por microcódigo, para instrucciones complejas que no pueden ser decodificadas por hardware. ID: Principales fases de decodificación, para aquellas instrucciones que pueden ser directamente decodificadas por hardware. Pipeline (2) IS: Las instrucciones pasan a la unidad de control, donde son despachadas en orden a las unidades de ejecución. DLY: Su misión es asegurar que el retardo de cableado no limita la frecuencia de trabajo. RF: Fases de lectura de registros, para llevar los datos a la unidades de ejecución.. EX: Fases de ejecución: Su longitud depende de la instrucción particular. Conclusión Las arquitecturas de propósito específico pueden obtener un mayor rendimiento que un sistema de propósito general, pues aprovecha al máximo los recursos de la máquina. Además, el diseño gira en torno a la optimización de un cierto tipo de aplicaciones, lo que simplifica la tarea; no tiene porque rendir bien en cualquier ámbito. Las consolas de videojuegos lo han aprovechado desde hace más de 20 años. La Nintendo usaba un 6502, una CPU que funcionaba a 1,79 MHz y era de sólo 8 bits (registros, ALU y bus de datos). Empezaba a emplear algunas técnicas muy arcaicas de segmentación, pero era una CPU muy lenta. Pero barata, y eso era imprescindible. Como Nintendo tenía su objetivo muy claro, se diseño un chip llamado PPU (Picture Procesing Unit) que dotaba a la CPU de una serie de funciones fijas que aceleraban los tratamientos de los planos de scroll, sprites y paletas de colores. Las funcionalidades gráficas de la consola estaban , por tanto, limitadas, pero permitieron la ejecución de juegos avanzados para su época, en un sistema con una CPU muy poco potente, que apenas contaba con 2Kb de memoria RAM, y 2Kb de memoria de vídeo. La Nintendo no tenía sistema operativo, ni BIOS, ni nada. Los juegos iban en cartuchos, en memorias ROM de semiconductor. En un PC, gran parte de la memoria RAM y rendimiento de la CPU es consumida por el sistema operativo, gestión de memoria, y por códigos que se ven obligados a funcionar en un abanico muy amplio de hardware posible. Y por lo tanto, se requiere un hardware más potente que el de una videoconsola, donde este tipo de sobrecargas son mucho menos fuertes, al ser un sistema cerrado. Fuentes Esta presentación es una adaptación de un artículo mío publicado en pagina Web personal. (sección de artículos). http://www.consolasparasiempre.net Y en una conocida Web de videojuegos, con comentarios. http://www.anaitgames.com/?p=2223 ----------------------------------------------------------------------------------------------------------La bibliografía ha sido un interés en el hardware y la electrónica digital práctica durante los últimos 5 años. Mucha información se obtiene en sitios Web como http://www.beyond3d.com (sobretodo GPUs, pero tienen foros de hardware donde se discuten aspecto muy técnicos a alto nivel) http://www.tomshardware.com (sobretodo noticias de mercado) http://arstechnica.com/ (artículos sobre hardware, entre los que se pueden encontrar disuciones muy interesantes de muchas arquitecturas) Y muchas más…