La Opción Global Foundries en NX (II): ¿PPC 750 again?

En la entrada que ayer realice me precipite en las conclusiones de la misma, es por ello que en esta os pido primero perdón. ¿El motivo? Hay una serie de elementos que hacen imposible la repetición de un hardware con el núcleo PowerPC que Nintendo lleva utilizando desde GameCube, pero lo mejor es ir enumerando todos ellos uno por uno.

#1 El bus 60Xe

El Bus 60X es un bus de 64 bits utilizado en el PowerPC 750 como bus externo con la memoria, en el caso de GameCube, Wii y Wii U dicho bus comunica la CPU directamente con el LSI aunque si hemos de ser más exactos comunica con el Northbridge que se encuentra en el LSI. En Wii U dicho bus recibe el nombre de 60Xe porque esta extendido para poder soportar tres núcleos, siendo la versión estandar de 64 bits y la de Wii U de 192 bits y el tamaño máximo que soporta de 256 bits por lo que la configuración máxima sería de 4 núcleos solamente.

El otro punto sería que el tamaño de la GPU se tendría que ampliar para la comunicación con el cuarto núcleo… ¿El motivo?

latte_annotated-e1412283402547

Las interconexiones externas con el bus 60Xe al aumentar el número de núcleos se tendrían que aumentar de tamaño haciendo que el LSI resultante tuviese un tamaño mucho más grande y por tanto subirían los costes. Incluso si el bus 60Xe soportase unos 512 bits para los 8 núcleos imaginaos el tamaño del chip acompañante para una configuración de ese tipo.

#2 Velocidad de reloj

El mayor problema que tiene la CPU de Wii U es su baja velocidad de reloj… ¿Cual es el motivo de ello? Un procesador divide en etapas que duran cada un ciclo de reloj el procesamiento de una instrucción pero un truco que se empezó a utilizar para aumentar la velocidad de reloj de las CPUs fue el hecho de hacer más simples dichas etapas, la explicación es muy simple:

  1. Cuanto más simples las etapas más cantidad de las mismas.
  2. Cuanto más cantidad de etapas mayor velocidad de reloj.

El siguiente gráfico es para un pipeline de 5 etapas:

300px-5_Stage_Pipeline.svg

El número de etapas en el PowerPC 750 es de cuatro etapas, ¿como lo hicieron en el caso del PowerPC de Xbox 360 y PS3 para alcanzar los 3.2 Ghz? Sencillo, aumentaron el número de etapas.

Fuente:

figure2

Tened en cuenta que el núcleo PowerPC de Xbox 360 y el de PS3 es casi el mismo con algunas variaciones. Como veis se dividió en pequeñas etapas. Ahora bien… ¿Como es que Nintendo no decidió mejorar el núcleo para que pudiese alcanzar mayores velocidades de reloj? Bueno, esto es algo que siempre me he explicado, lo único especial a nivel de núcleo son los Paired-Singles, es decir… el suprimir el uso de coma flotante de 64 bits para cambiarlo por una serie de instrucciones SIMD de 64 bits (2 operandos) en GameCube, esto significa que la FPU esta ligeramente cambiada.

PowerPC750

Captura de pantalla 2016-03-14 a las 9.09.33

Siempre me he preguntado porque Nintendo e IBM no cambiaron el PPC 750 por un PPC 970 en Wii U donde la FPU de este último fuese sustituido por la FPU+PSU para mantener la compatibilidad del código hacía atrás.

Captura de pantalla 2016-03-14 a las 9.12.37

No solo hubiese permitido una mayor velocidad de reloj y un mayor rendimiento por ciclo de reloj sino que además habría suprimido por completo el problema del bus 60Xe que he mencionado en el primer apartado. ¿Entonces como es que Nintendo no lo escogio? Bueno, esto no tiene nada que ver con Nintendo pero hace unos años Apple se saco como excusa del salto a Intel que los PowerPC 970/G5 producían demasiada calor y por tanto su rendimiento/consumo era bajo.

perfperwatt

¿Que tiene que ver esto con Wii U? Bueno, hemos de tener en cuenta cual es el diseño industrial de la consola donde la placa lógica donde están los componentes es muy pequeña:

Teniendo en cuenta la experiencia previa de Apple y el poco espacio del diseño industrial de Wii U es posible que Nintendo descartará por completo el uso del PPC 970 como núcleo principal, lo que le habría dado una mayor velocidad de reloj al sistema y una compatibilidad total.

La falta de potencia por ciclo de reloj de un núcleo se puede solventar con velocidad de reloj si este se encuentra pensado para mayores velocidades de reloj, que no es el caso. También tenemos que tener en cuenta que el consumo del procesador aumenta de forma cuadrática con la velocidad de reloj por lo que esto también iría contra el diseño clásico que Nintendo implemento en Wii y continuo en Wii U basado en el bajo consumo.

#3 No-Coherencia 

Fuente:

…te puedes estar preguntando sobre el punto de la charla en el que digo que la Wii U no es un sistema coherente de cache. De hecho, el Espresso soporta coherencia de cache al completo y hay coherencia entre sus núcleos. Sin embargo, hasta donde puedo contar el Latte no lo implementa y la memoria no es coherente respecto al Starbucks (el chip de control de E/S) y otros periféricos cuando se utiliza el DMA (El acceso directo a memoria desde el Northbridge)…

¿Que es la coherencia? Se refiere a la Coherencia de Memoria:

La coherencia de memoria hace referencia a la necesidad de establecer la lógica necesaria para que los distintos datos replicados a lo largo de la jerarquía de memoria, contengan la misma información si se trata de la misma dirección física. Por ejemplo, un dato que se encuentra en el nivel más alto de la jerarquía, esto es, en la cache de L1, y que ha sido modificado, deberá activar los mecanismos necesarios para que esta modificación se lleve a cabo en el resto de niveles, donde este dato también existe.

Esto puede cobrar más relevancia en el caso de los procesadores multinúcleos, donde, en general, se comparte un nivel de cache, L2 o Ln(donde n podrá ser cualquier número natural), pero cada núcleo dispone de su propia L1 donde modifica los datos, pudiendo haber una incoherencia de los datos que lee un núcleo y que han sido modificados recientemente por otro, disponiendo el dato sin modificar en la cache compartida.

En el caso de los procesadores mononúcleo, la lógica de control de coherencia de cache del procesador, es decir, la circuitería interna que en este caso concreto se encarga de gestionar el trasvase de la información de un lugar a otro, se encargará de modificar en los niveles inferiores de la jerarquía, aquellos datos que hayan sido modificados en L1, con el objetivo de que cuando éste desaparezca de la cache, el dato se encuentre actualizado en los siguientes niveles de cache, memoria principal y disco.

Estos mecanismos de control, por tanto, sólo se activarán como parece lógico pensar, en los casos en los que se produzca una escritura. Faltaría añadir, que dentro de la cache y de sus distintas implementaciones, nos podemos encontrar con una lógica de control de mayor o menor complejidad, dependiendo de si es una cache exclusiva o inclusiva. Donde en la inclusiva nos encontramos una circuitería más simple, aumentando la complejidad en la exclusiva.

Para que la gente lo entienda cuando no hay coherencia es como si hubiesen dos empresas de correos distintas trabajando en un mismo barrio pero que utilizaran direcciones distintas para una misma dirección física. Esto provoca en el caso de Wii U que tanto CPU como GPU tengan espacios distintos en la memoria pese a que haya físicamente un pozo de memoria común. ¿Que supone esto? Sabemos que Nintendo de un tiempo a esta parte tiene interés en funciones GPGPU, hay varias pruebas de ello. La primera es la entrevista con la gente de NERD que hizo Iwata en su día:

Iwata: Obtenéis la información más confidencial de Nintendo a tiempo.

Alex: Exactamente. Los desarrolladores de la sede central de Nintendo tienen que invertir su tiempo desarrollando la propia plataforma, por lo que nos gustaría explorar aquellas áreas para las que no tienen tiempo. Por ejemplo las posibilidades que se abren debido a la combinación de tecnologías de nube29 y nuevos paradigmas como la programación de GPU para un uso general30.Creo que ahora mismo nos encontramos en el lugar idóneo para crear las mejores nuevas ideas, pero tenemos que ser muy audaces y ambiciosos para ello. Por eso me alegro tanto de estar en NERD y no en ningún otro lugar.

La segunda es la adopción de la API Vulkan por parte de Nintendo:

api-vulkan-nintendo-nintendon1

La tercera es la implementación de un sistema al estilo “Kinect” en lo que se supondría que es el nuevo mando de control. Dicha implementación se beneficiaría de la aplicación de que la GPU soportase múltiples contextos y no uno solo. ¿Y que tiene que ver con la coherencia de cache? En el modo GPGPU el procesador gráfico trabaja como co-procesador de la CPU y en el espacio de memoria de esta. Es por eso que en Xbox One y PS4 la GPU tiene dos caminos a la RAM distintos, uno coherente y el otro no-coherente.

En Wii U el problema es que el sistema es completamente no-coherente, esto significaría que para dar soporte tendríamos que realizar un sistema de coherencia… ¿El problema? La coherencia del PowerPC solo es manejada por el CoreConnect y es imposible colocar todos los elementos juntos por la disparidades en el proceso de fabricación… ¿Existe una solución a esto? Bueno, Wii U utiliza como Northbridge la tecnólogía AHB de ARM para comunicar los diferentes elementos en el LSI Latte.

Captura de pantalla 2016-03-13 a las 14.00.37

AHB son las siglas de AMBA High performance Bus, AMBA es definido en la siguiente página de ARM de la siguiente manera:

Los protocoloas ARM AMBA son un estándar abierto de protocolos para la intercomunicación en un chip para la comunicación y el control de bloques funcionales en un SoC.

Para ser gráficos el AMBA es el Northbridge/Crossbar y sería equivalente a esto:

base-enchufes-interruptor-3-tomas-con-toma-de-tierra-15-metros-cable-regleta-ladron

Mientras que el AHB sería equivalente a esto otro:

-Enchufe-del-cable-el-ctrico-del-diente-de-Cee7-17-

El AMBA utilizado en Wii U no soporta coherencia pero el AMBA 5 que es la versión más moderna si que los soporta haciendo uso de otro tipo de “enchufe” que es el CHI por lo que al cambiar de enchufe el Northbridge se ha de cambiar por otro más avanzado que soporte coherencia. ¿Pero como implementamos la coherencia de memoria en este caso? Pues implementando una cache L3, algo que las diferentes familias del CoreLink de ARM, que es el nombre del Northbridge+Controlador de Memoria Implementan.

amr4Ahora os preguntaréis… ¿Pero esa Cache L3 no sería lo mismo que la MEM1? No, su función sería distinta y se encargaría de dar coherencia al acceso a la memoria de los diferentes componentes pero supone al mismo tiempo tener que re-hacer todo el SoC entero. ¿La otra alternativa? Optar por la opción AMD al completo pero esto significaría enviar a la mierda el núcleo PowerPC… ¿Cual es la opción AMD? Pues la implementación de un SoC de AMD con su uncore, siendo el mecanismo más moderno el llamado Onion3, en semiaccurate hablando de Carrizo lo definen de la siguiente manera:

Puede que te acuerdes de los días en los que había dos buses, Onion y Garlic. Con la integración más avanzada las funciones en Carrizo no necesitan de dos buses nunca más, Onion3 combina las uniones de ambos en un diseño más simple.

Onion y Garlic son lo nombres “simpáticos” para el bus coherente y el bus no-coherente de las APU/SoC de AMD:

Captura de pantalla 2016-03-14 a las 8.42.32

Trinity_unb

Es el mismo tipo de intercomunicación entre núcleos que he puesto siempre para definir como funcionan los sistemas de AMD:

AMDUncore

La novedad es que con el Onion3 el acceso a la memoria pasa a estar completamente unificado y es completamente coherente por lo que pasaría a ser algo así:

export

La pregunta clave es… ¿Que tipo de uncore utilizará Nintendo? En el primer caso permite el uso del PowerPC, en el segundo caso no lo permite. Aunque ya hemos visto en el primer apartado que el PowerPC solo permitiría unos cuatro núcleos y en el segundo apartado de no mucha potencia.

#4 Comunicación CPU-GPU

Una de las modificaciones que tiene el núcleo PowerPC 750 adoptado y modificado por Nintendo es la comunicación directa con el Procesador de Comandos de la GPU sin tener que pasar por el Northbridge del sistema. En el caso de GCN, Wii y Wii U desde el momento en que sus GPUs no soportaban múltiples contextos simultáneos solo hacía falta un canal de comunicación entre CPU y GPU para ello. ¿La ventaja de no tener que pasar por el Northbridge? Son varias:

  • Latencia menor de comunicación entre CPU y GPU.
  • Los accesos al Northbridge no están siempre al 100% disponibles para todos los procesos.

¿Que es lo que sabemos de NX a nivel de API? Pues que van a dar soporte a Vulkan y este permite crear listas de comandos desde varios procesadores.

api-vulkan-nintendo-nintendon1

Vulkan2

Esto es sumamente importante porque la CPU no solo se comunica con el LSI/SoC que la acompaña a través del bus 60Xe sino que además hay otro canal de comunicación que es el existente entre CPU y GPU, añadir más canales de comunicación en ese sentido significa aumentar el número de interfaces externa y también el área no solo de la CPU sino también del chip acompañante.

#5 Efectos sobre el resto del sistema

Una vez explicado esto vamos a la parte principal que es la GPU, el hecho de adoptar el PowerPC incluso en la configuración posible de cuatro núcleos significa reducir enormemente el número de interfaces externas con la memoria y hay una cosa que es innegable que es que el número de unidades de texturas esta directamente relacionado con el ancho de banda que tiene con la memoria donde se almacenan las texturas y las texturas por su gran tamaño no se van a almacenar en la memoria embebida sino en la RAM externa y una interfaz corta con la memoria significa menos ancho de banda.

La adopción de nuevo del núcleo PowerPC significa que una buena parte de la interfaces externas sean para comunicar con la CPU, a la litografía del Latte me remito para ello donde se puede ver como la interfaz DDR3 ocupa muy poco espacio. Incluso si Nintendo tomase un tipo de memoria más rápida como por ejemplo la GDDR5 a lo máximo que podría aspirar es a una interfaz de 64 bits y por tanto a una GPU pensada para una interfaz de ese tipo y por tanto una GPU impotente.

Una vez explicados los motivos queda muy claro el motivo por el cual desde un razonamiento lógico y bien explicado Nintendo no debería continuar con una tradición en el diseño del hardware que le ha hecho mucho daño en las dos últimas generaciones y que ha sido el motivo único de la perdida del apoyo a terceros. Con Wii la cosa les salió bien parcialmente porque ganaron mucho dinero, con Wii U estaban crecidos, la situación de ahora es que están en lo más abajo por lo que dudo mucho que tomen este camino, tomarlo podrían pero entonces se demostraría que habrían perdido el norte.

Anuncios