Después de la pérdida del dominio de SGI en el mercado gráfico, Nintendo necesitaba nuevos aliados con los que asociarse.
Un candidato prometedor parece ser IBM: Aparte de su famoso trabajo en mainframes, recientemente se aliaron con Motorola y Apple para crear una CPU lo suficientemente potente como para competir con el dominio de Intel en el mercado de PC. El producto resultante es una serie de procesadores que llevan el nombre PowerPC, que se seleccionaron para impulsar el 99% de los Macintoshes de Apple y algunos sistemas integrados.
Saltando al futuro, Nintendo necesitaba algo potente pero barato, así que para cumplir con esas líneas rojas, IBM tomó uno de sus diseños anteriores, el PowerPC 750CXe (encontrado en el último iMac G3, conocido como el Early-Summer 2001), y lo reforzó con capacidades que agradarían a los desarrolladores de juegos. El resultado fue el PowerPC Gekko y corre a 486 MHz.
Características
Vamos a ver qué hace que el Gekko sea tan especial, y para hacer eso necesitamos primero tenemos que ver las funcionalidades del 750CXe :
- ISA de PowerPC: Sin entrar en muchos detalles, es otra arquitectura de conjunto de instrucciones RISC de 32 bits. El 750CXe implementa la especificación v1.10.
- Bus de datos de 64 bits: Aunque la ISA puede caber en un bus de 32 bits, todavía necesitamos mover trozos más grandes de datos (explicado en la siguiente sección) sin sufrir penalizaciones de rendimiento.
- Superscalar de doble emisión: Si las unidades requeridas están disponibles, la CPU puede procesar hasta dos instrucciones en la misma etapa del pipeline. En el caso de que la cola incluya una instrucción de bifurcación, el número de instrucciones concurrentes posibles se eleva a tres.
- Ejecución fuera de orden: La CPU puede reordenar la secuencia de instrucciones para mantener todas sus unidades trabajando, aumentando así la eficiencia y el rendimiento.
- Unidades de Dos Enteros: Combinadas con el modelo superscalar y fuera de orden, incrementa el número de operaciones de enteros realizadas por unidad de tiempo.
- FPU integrada con registros de 32 bits y 64 bits: Acelera las operaciones con floats y doubles.
- Pipeline de cuatro etapas (con bonificación): Aquí hay una introducción anterior al pipeline de instrucciones. En el 750CXe, las operaciones FPU se dividen en tres etapas más (7 etapas en total), mientras las operaciones de carga-almacenamiento se dividen en dos (5 etapas en total).
- En conjunto, esto incrementa el rendimiento de las instrucciones sin descontrolarse.
Adicionalmente, esta CPU también incluye unidades dedicadas para acelerar ciertos cálculos específicos :
- Unidad de predicción de bifurcaciones: Siempre que hay una condición que necesita ser evaluada (lo que decidirá si la CPU debe seguir el camino 'A' o el camino 'B'), la CPU seguirá uno de los caminos basado en ejecuciones anteriores y luego evaluará la condición. Si la predicción resulta ser correcta, la CPU habrá ahorrado algo de tiempo, si no, revertirá y seguirá el camino correcto.
- Unidad de carga-almacenamiento dedicada: Separa las unidades que manipulan registros y las que manejan la memoria principal.
- Unidad de gestión de memoria integrada: Interfa cualquier acceso a la memoria desde la CPU.
- Las consolas anteriores incluían este componente como otro coprocesador, la MMU ahora se encuentra dentro del mismo chip, reduciendo los costos de fabricación.
Y, por supuesto, también se incluye algo de caché para acelerar el ancho de banda de la memoria:
- 64 KB de caché L1: Dividido en 32 KB para instrucciones y 32 KB para datos.
- 256 KB de caché L2: Se puede llenar con instrucciones y datos, lo que mejora enormemente el ancho de banda.
Mejoras de IBM
Mientras que las características previas son muy apreciadas (comparadas con las generaciones anteriores), esta CPU aún queda por detrás en el rendimiento de juegos, comparada con otras CPU (no olvidemos que esta sigue siendo una CPU de uso general, buena en hojas de cálculo pero mediana con la física). Para compensar, IBM agregó los siguientes ajustes que constituirán el Gekko :
- Conjunto de instrucciones mejoradas con 50 nuevas instrucciones SIMD: Estas operan dos números en punto flotante de 32 bits o un número en punto flotante de 64 bits usando un solo ciclo. En consecuencia, las nuevas instrucciones SIMD acelerarán los cálculos vectoriales, particularmente útiles durante las transformaciones geométricas.
- No confundir con la extensión SIMD de Motorola (AltiVec) que se enviaba en los G4 Macs de gama alta.
- 32 registros en punto flotante: Estos vienen con las nuevas instrucciones SIMD.
- Tubería de recolección de escritura: Un mecanismo especial de escritura de memoria disponible para usar. Si está habilitado, en lugar de realizar transferencias single-beat, retiene todas las solicitudes de escritura de memoria en un búfer de 128 bytes hasta que esté al 25% lleno, luego realiza las escrituras solicitadas utilizando una técnica llamada transacción ráfaga que puede mover bloques de 32 bytes de datos a la vez.
- Como puedes imaginar, esto ahorra mucho ancho de banda al utilizar completamente los buses disponibles.
- Caché L1 bloqueada: Los programas pueden quitar 16 KB de caché de datos L1 para usar como 'scratchpad' (memoria increíblemente rápida).
Además de manejar la lógica del juego (física, colisiones, etc.), estas mejoras permitirán a la CPU implementar partes del pipeline gráfico (transformaciones de geometría, iluminación, etc.) con un rendimiento aceptable. Esto es muy importante ya que la GPU solo puede acelerar un conjunto limitado de operaciones, por lo que el resultado final no está condicionado por las limitaciones de la GPU.
¿Un paso adelante o un paso atrás?
En tu artículo de la Nintendo 64, explicaste que el sistema tiene una CPU de 64 bits, pero la de GameCube es de 32 bits. ¿Acaso Nintendo degradó su consola?
Es cierto que Gekko implementa una especificación PowerPC de 32 bits, mientras que el MIPS R4300i puede alternar entre modos de 32 y 64 bits. Para responder si esto es una mejora o no, debes preguntarte: ¿Por qué necesitarías '64 bits'?
- Para direccionar más de 4 GB de memoria -> La GameCube no tiene cerca de esa cantidad de ubicaciones de memoria, por lo que esto no es un requisito.
- Para operar trozos más grandes de datos usando menos ciclos y ancho de banda -> Eso está cubierto por las nuevas instrucciones SIMD de Gekko, la FPU y el bus de datos de 64 bits; y el write-gather pipe.
- Para promocionar más funcionalidades -> Ehh... No creo que eso persuade a la gente hoy en día.
Como pueden ver, la GameCube ya disfruta de las ventajas de los sistemas de 64 bits sin que fuera una 'consola de 64 bits'. Y por ende, no se puede resumir estas dos máquinas complejas por su 'número de bits'.
Sistema de memoria inteligente
Durante el diseño de la arquitectura de próxima generación, los arquitectos de Nintendo realizaron un análisis postmortem de su diseño anterior y descubrieron que el uso de una arquitectura de memoria unificada junto con algunos componentes de alta latencia (RDRAM) resultó en una de las mayores causas de cuellos de botella (casi el 50% de los ciclos de la CPU se desperdiciaron durante el tiempo de inactividad) . Además, la inclusión de múltiples unidades independientes contribuyó a una competencia preocupante por el bus de memoria.
Por esa razón, los arquitectos de GameCube idearon un nuevo sistema de memoria estrictamente basado en proporcionar espacio de memoria dedicado y usar chips de baja latencia. Con el nuevo diseño, la GPU y la CPU ya no competirán por la misma RAM (causando problemas de fill-rate) ya que la GPU ahora tendrá su propia memoria interna y increíblemente rápida. Por otro lado, la GPU aún estará a cargo de arbitrar el acceso a E/S también.

Organización de la memoria en este sistema.
El resultado fue un sistema organizado con dos buses principales:
- El Northbridge: Tiene un ancho de 64 bits y conecta la CPU con la GPU. Funciona 3 veces más lento que el reloj de la CPU, por lo que las tareas deberán estar optimizadas para no depender tanto de la GPU. Otros componentes como el DMA y la caché pueden ser útiles.
- El Southbridge: También tiene 64 bits de ancho y conecta la GPU con 24 MB de 1T-SRAM llamada 'Splash'. Este tipo de RAM está hecho de DRAM (que es el tipo más popular pero también más barato y lento) sin embargo es mejorado con circuitos adicionales para comportarse como SRAM (más rápido y caro, utilizado para el caché). El bus es dos veces más rápido que la GPU, posiblemente para permitir que la GPU proporcione un ancho de banda constante entre la CPU y la memoria principal.
Además, este diseño contiene un bus adicional (aunque inusual) donde se puede encontrar más memoria:
- El Eastbridge: Conecta la GPU con otro chip de memoria llamado RAM de audio o 'ARAM' . Proporciona 16 MB de SRAM para uso general, lo cual es bastante considerando que se trata de memoria adicional. Sin embargo, el bus no es accesible mediante medios normales (direcciones de memoria). En su lugar, está conectado a un punto final serie de 8 bits (sincronizado a una velocidad dos veces más lenta que la GPU y cuatro veces más lenta que la CPU), que solo es accesible a través de DMA.
En general, esto significa que, aunque ARAM proporciona una cantidad considerable de RAM, estará limitado a tareas menos críticas, como actuar como un búfer de audio o ser utilizado por ciertos accesorios (explicado en la sección de E/S).
Organizando la memoria y gestionando ARAM
Hasta ahora, hemos visto que, en teoría, las capacidades de memoria son indudablemente superiores a su predecesor, pero aún hay margen de mejora. Por ejemplo, Nintendo pudo haber incorporado más hardware para integrar ARAM en el mapa de memoria de la CPU.
En relación con esto, vamos a revisar el MMU utilizado en Gekko. La CPU, con su bus de direcciones de 32 bits, puede acceder hasta 4 GB de memoria, pero el sistema no alberga esa cantidad. Por lo tanto, para evitar exponer direcciones de memoria no pobladas (e impredecibles), la dirección de 'memoria virtual' se activa por defecto para enmascarar las direcciones físicas con un mapa de direcciones 'virtual' más seguro, fácilmente cacheable y continuo .
Para que esto funcione, Gekko (y otras arquitecturas PowerPC) traduce direcciones virtuales a físicas con el siguiente proceso:
- Realiza Traducción de direcciones de bloque (BAT): Hay ocho pares de registros programables (cuatro para datos y cuatro para instrucciones) donde cada par mapea un rango de direcciones virtuales a un rango continuo de direcciones físicas. La MMU intenta encontrar la dirección física si se encuentra dentro de esos rangos.
- Si BAT no funcionó, lee la Tabla de páginas: La MMU también almacena una tabla que cataloga la ubicación física de las páginas (bloque de direcciones virtuales).
- La MMU puede tardar en leer una tabla de páginas, por lo que se incluye un búfer de traducción adelantada (TLB) para almacenar en caché lecturas recientes.
- Otras arquitecturas como x86 o MIPS también proporcionan paginación, aunque no todas ofrecerán un TLB.
- Finalmente, si la dirección virtual solicitada aún no se puede traducir, la MMU desencadena una excepción de 'falla de página' en la CPU y deja que el sistema operativo decida qué hacer a continuación.
Entonces, ¿qué utilidad tiene esto para los desarrolladores? Bueno, resulta que Nintendo lanzó algunas bibliotecas que extienden la RAM principal usando ARAM con la ayuda de la paginación. Para resumir, ARAM no es direccionable, pero la CPU puede llamar a DMA para obtener y almacenar datos allí. Por lo tanto, la CPU puede mover páginas de la RAM principal para hacer espacio para otros recursos y almacenarlos temporalmente en ARAM. Después de eso, cada vez que se produce un fallo de página, el sistema operativo contiene rutinas para buscar las páginas faltantes en ARAM y restaurarlas a su ubicación original en la RAM principal.
En conclusión, con algunos trucos ingeniosos, estas capacidades de propósito general permitieron a los juegos de GameCube disfrutar de más memoria de la permitida técnicamente, alcanzando así niveles de calidad superiores. Aunque es importante tener en cuenta que tales trucos pueden venir con algunas sanciones de rendimiento (especialmente si se dan por sentadas).
