El desarrollo de los SoC para consolas, procesadores que incluyen dentro lo que es el procesador central (CPU), el procesador gráfico (GPU), el controlador de memoria y el llamado uncore para unirlo todo); se ha de ver como una unión de piezas de lego con diferentes conectores que se comunican entre si. Desgraciadamente los diferentes componentes no se comunican entre si de manera directa, esto lo comente en una entrada reciente pero me gustaría rescatarlo para esta entrada porque es la base en la que voy a sustentar mi explicación.

Imaginaos por un momento que un SoC es una ciudad con distintos barrios donde cada barrio es un componente y que dentro de dicha ciudad hay una autopista circular. que lo que hace es atravesar toda la ciudad por donde pasan la mayoría de los coches/datos para ir de un barrio a otro e incluso para entrar y salir de la ciudad.

urbana_norte_2

El uncore no es dicha autopista, en realida es el sistema de tráfico que se encarga de gestionar los viajes de los datos y en general suele ser un Crossbar Switch controlado que abre y cierra los canales de datos hacía una direccion o hacía otra. Cuando los datos salen de la CPU, la GPU o  incluso vienen de la memoria es el Crossbar Switch el que se encarga de envialos a su destinto.

En el caso concreto de los SoC de AMD el tema del uncore es algo peliagudo ya que hay dos canales de acceso a la memoria:

  • Uno coherente por el que a través de él acceden todos los componentes pero que no toma todo el ancho de banda de la memoria.
  • Uno no-coherente en el que accede solo la GPU y que puede tomar todo el ancho de banda de la memoria.

Independienemente de si estamos hablando de PS4, Xbox One o PS4 Pro y la futura Xbox Scorpio el funcionamiento es siempre el siguiente.

amdgeneraluncore

Los diferentes buses que hay hasta y desde el uncore no se comunican siempre a la misma velocidad en lo que a ancho de banda se refiere.Con tal de simplificar el diseño en el caso de PS4 Pro Sony ha mantenido el mismo uncore que la PS4 Slim que a su vez es el mismo uncore que la PS4 estándar pero fabricado bajo el proceso de 16nm FinFet. Entre la Xbox One y la Xbox One S ocurre lo mismo y diria que tanto Sony como Microsoft utilizan el mismo uncore dado que en ambos casos la CPU son 8 núcleos Jaguar siendo el nexo de unión entre el crossbar coherente y la CPU la cache L2 de la CPU.

l2cachel2cache2

jaguar2

Tanto cada uno de los cuatro núcleos que comparten la Cache L2 como el Crossbar coherente acceden a través de la interfaz de cache L2, no podemos olvidar que el ancho de banda al que se accede es de un 50% de la velocidad de la CPU y mirando las diaposivas de arriba se llega a la conclusión de los 16 bytes por modulo por lo que a partir de aquí podemos deducir el ancho de banda de acceso de los diferentes sabores en las diferenes consolas.

PS4: [(1.6*10^9)/2]*(2*16) = 25.6 GB/Seg

Xbox One: [(1.7*10^9)/2]*(2*16) = 27.2 GB/seg

PS4 Pro: [(2.1*10^9)/2]*(2*16) = 33.6 GB/seg

Recordad que esto es el ancho de banda con el que el uncore se comunica con la CPU, no el uncore con el resto de componentes y la memoria. Hay que tener en cuenta que AMD para no realizar duplicaciones superfluas al tener varios tipos de uncore lo que hace es utilizar el mismo uncore base con mayor o menor tamaño para construir sus SoC alrededor de estos. AMD antes de empezar sus transición el Zen ha jugado con dos tipos de núcleos que son los derivados del Bulldozer y los derivados del Jaguar y hay que tener en cuenta que los derivados del Bulldozer no tienen el último nivel de la cache a la mitad de velocidad de la CPU.

En el caso de PS4 su UNB derivada del del AMD Kaveri y se puede ver marcado en la siguiente litografía:

kaveri

Se puede ver que es muy pero que muy pequeño en cuanto a tamaño respecto al tamaño total del chip, hay que tener en cuenta que el UNB no solo es el Crossbar Coherente sino que también incluye el acceso no-coherente. ¿Complicado? Los siguientes diagramas lo explican muy bien:

unb2

Visio-Kaveri_Architecture_š.vsd 04

El UNB tiene dos caminos para la GPU, uno a través del IOMMU que esta conectado directamente no solo al bus coherente de la GPU sino también al puerto PCI Express x4 que hay en el chip y externamente conecta con el Southbridge de la misma manera que ocurre con Xbox One. El ancho de banda del IOMMU en el caso de PS4 lo conocemos, es de unos 20 GB/seg y si le quitamos los 4GB/seg del bus PCI Express externo entonces nos queda una comunicación de 16 GB/seg entre CPU y GPU a través del bus coherente como máximo, lo cual coincide con la segunda columna donde habla del AMD Kaveri.

onion3

Pero lo que realmente sobrecomplica las cosas en el UNB de PS4 es el hecho que el bus externo sea GDDR5 de 256 bits por lo que el cableado interno del chip con el controlador de memoria aumenta enormemente de tamaño. Habéis visto lo pequeño que es en el AMD Kaveri en el chip es pequeño, pues bien el tamaño del UNB va creciendo a medida que la memoria aumenta en anchura o disminuye. Por ejemplo el AMD Mullins que usa DDR3L de 64 bits tiene un UNB aún más pequeño.

mullins-cpu-die-shot-block-amd

Esto es debido a que el UNB aumenta su cableado y por tanto su complejidad o la disminuye según el ancho de banda de la memoria, es una pena que en la litografía de PS4 no tengamos marcado donde se encuentra el UNB exactamente pero por lógica se ha de encontrar en el espacio de la CPU, la GPU y el controlador de memoria.

ps4-reverse-engineered-apu

El espacio del UNB es enorme en este caso, aunque no nos esta marcado donde se encuentran componenentes como el hub/crossbar local de la GPU se deduce su situacíón por la localización del chip y serie a la derecha del mismo, justo al lado de las interfaces externas que no son de memoria y seguramente sirvan , tampoco están marcados claramente los 8 RBE, pero deberían situarse unos 4 a la izquierda de la GPU, 2 arriba de la CPU y 2 abajo de la GPU. En cuanto a la interfaz PCI Expressx4 que comunica con el chip secundario se encuentra a la izquierda, entre los dos controladores GDDR5. El resto del espacio es el UNB que ocupa un espacio considerable en el chip porque su cableado de comunicación se encuentra por todo el SoC dada la disposición de los controladores de memoria.

En Xbox One la cosa sigue los mismos principios pero es algo distinta:

XboxSoC

El UNB aqui es mucho más pequeño en lo que a espacio se refiere, por el hecho que los controladores de memoria al que acceden (no accede a la ESRAM) se encuentran más localizados en el chip. No por ello su cableado es simple desde que es DDR3 de 256 bits sino al contrario, el UNB ocupa un espacio también considerable pero al contrario que con PS4 en Xbox One si que sabemos el ancho de banda entre los modulos Jaguar y el UNB y pese a que el tamaño es menor del UNB no lo es por una menor comunicación entre CPU y el UNB sino por lo que he comentado antes por lo que a partir de Xbox One podemos deducir el ancho de banda entre el UNB y los modulos de la CPU en PS4 y es aquí donde nos encontramos con algo que paradojicamene hace superior a Xbox One respecto a PS4.

xbox-one-real-bandwidth-examples-sdk-leak

El UNB en su pare coherente tiene un limite de 30GB/seg, en el caso de PS4 el limite es de unos 20GB/Seg por lo que en ese aspecto Xbox One es superior. Hay un elemento en el que también es mejor (luego dicen que soy pro-Sony y Anti-Microsoft) y es en el hecho de la contención de la memoria, al hacer ciertas operaciones en la ESRAM no hay un conflicto de acceso tan bestia y es que en PS4 debido a los problemas de contención de memoria el ancho de banda combinado de CPU+GPU con la memoria no resulta nunca en un juego de suma cero.

2935986-5333225429-ps4-g

En PS4 cada uno de los módulos Jaguar se comunica con el UNB a la friolera de 8GB/seg, la comunicación es UNB-Cache L2 y esta funciona a unos 800Mhz, esto son unos 10 bytes por ciclo reloj y por modulo de la CPU, unos 20 bytes para toda la CPU entera con el UNB. Si lo extrapolamos a PS4 Pro que utiliza la misma CPU pero a unos 2.1 Ghz y por tanto 1.05 Ghz de ancho de banda de la cache L2 entonces…

(1.05*10^9)*20= 21 GB/seg.

21 GB/seg+PCI Expressx4= 25 GB/seg.

Una de las cosas que más me sorprenden de PS4 Pro es que es posible colocar el AMD Jaguar o sus derivados a velocidades mucho más altas que los 2.1 Ghz que tiene la consola, creo que el limite esta en el canal de comunicación entre CPU y UNB, en el caso de Microsoft en cambio tenemos unos 30GB/seg pero hay que tener en cuenta que en ese caso el sistema de sonido de la consola no se encuentra en el hub de la GPU sino conectado al Northbridge Coherente y por tanto también toma memoria, la interfaz PCI Expressx4 con el Southbridge/Chip Secundario también se encuentra en Xbox One, pero ambos elementos en total consumen unos 6GB/seg de los 30GB/seg del Northbridge dejando unos 24 GB/seg para la CPU, por lo que Microsoft si quisiese podría colocar una CPU Jaguar con mayor velocidad de reloj sin cambiar nada y precisamente podría colocar un Jaguar a 2.4 Ghz en Xbox Scorpio sin cambiar en nada el uncore.

Pero hay un elemento que también chupa que es el Fusion Compute Link/Onion, este elemento es importante para funciones GPGPU donde la GPU actua como coprocesador de la CPU. Simple y llanamente cuando la GPU le hace una petición a la GPU que ha de ser devuelta a la CPU no lo escribe en la memoria principal sino en la cache L2 a través de FCL/Onion o e FCL/Onion+ por lo que el canal de memoria y esto se hace utilizando el canal de comunicacion entre el UNB y la CPU también por lo que en ese modo la CPU no tiene acceso a la RAM mientras la GPU le envia los datos. En PS4 el Onion tiene un bus de 16 GB/seg como mucho, (Onion+ unos 10GB/seg peor hace bypass a las caches de la GPU) y en Xbox One unos 20 GB/seg, pero los buses FCL no pueden ser mayores que al ancho de banda total del Northbridge Coherente.

Pero aquí entramos en un elemento cuanto menos curioso, en el caso concreto de PS4 y Xbox Onehay un cuello de botella entre la CPU y el UNB debido a que la cantidad de bytes/ciclo que la interfaz de la Cache L2 que la CPU puede enviar es de unos 16 cuando esta limitada a 10, es decir que el ancho de banda del Northbrigde en el total de ambos casos debería ser:

[(853*10^6)*16*2]= 27.3 GB/seg+6 GB/seg= 33.3 GB/seg

[(800*10^6)*16*2]=25.6 GB/seg+4 GB/seg= 29.6 GB/seg.

Pasar de unos 10 bytes por modulo a unos 16 bytes significa aumentar el cableado y este es el problema tanto de PS4 como de Xbox One y estoy en un 90% seguro que con PS4 Pro ocurre exactamene lo mismo. Ahora bien, supon que en una futura consola como Xbox Scorpio sin modificar el uncore, como mucho tendríamos un Jaguar de 2.4 Ghz, lo que sería un salto mayor que el de PS4 Pro pero… imaginad que como dice mucha gente que conectasemos dos modulos Zen (8 núcleos).

 

zencache

El problema es que necesitariamos unos 64 bytes/ciclo entre el UNB y la CPU en el caso de dos modulos Zen u 8 núcleos por lo que el cableado del UNB aumentaría en complejidad una barbaridad, aunque realmente dos módulos para 8 hilos no harían falta desde que el Zen es multihilo, en todo caso tampoco podemos olvidar que no existe reducción en la velocidad del último nivel de la cache por lo que el cambio del uncore sería realmente profundo en Xbox Scorpio, pero realmente no nos hace falta unos 16 hilos de ejecución sino que con 8 serían suficiente por lo que con un solo modulo sería suficiente pero esto entraría en conflicto con la siguiente afirmación:

scorpiodiapositiva

No es lo mismo 8 hilos que 8 núcleos y en el caso de los 8 núcleos el tamaño del uncore aumentaría de mala manera, pero voy a conceder el beneficio de la duda y voy a supone que Microsoft va a utilizar un modulo del Zen de cuatro núcleos pero conectado al mismo bus de 24 GB/seg del que hemos hablado antes, el problema es que tendríamos que aumentar el bus de los 20 bytes/ciclo a los 32 bytes ciclo por lo que en realidad sería imposible hacerlo sin cambiar el uncore.

En todo caso lo mejor será deja de divagar porque no llegaría a ningún lado concreto y me falta información.

Anuncios