Esto es uno de esos borradores que suelo descartar porque nacen de un momento de aburrimiento o producto del escapismo momentaneo y realmente no deja de ser una entrada para explicar porque ciertos argumentos técnicos que utiliza la gente respecto a la siguiente generación de consolas a nivel de hardware son erroneos.

Empecemos con el teaser de Scarlett del pasado E3.

Tecnicamente el único momento en que vemos Scarlett es cuando se hace un zoom muy pero que muy cercano al procesador y se intuye por encima la configuración de la RAM.

La configuración parece ser una 3+3+4 en cuanto a la organización de la RAM, en un principio puede parecer la de Xbox One X porque luego se ven placas madre de Xbox One X en el video…

Donde si que se ve memoria colocada en 45º en la placa como la de Xbox One X…

Una configuración de memoria de 320 bits es extraña por el hecho que las GPUs suelen estar organizadas para múltiples de potencias de dos y 320 no es una cifra que cumpla con dichos requisitos. Es por ello que muchos medios empezaron a especular con una configuración de 384 bits por ello, simplemente una configuración de 320 bits suena extraño.

¿El motivo? Echemos un vistazo al diagrama de Navi 10/RX 5700 por el momento y dado que la jerarquía de memoria es algo que no cambiará la podemos utilizar fácilmente como referencia base. Tenemos unos 4 controladores GDDR6 de 64 bits unas 4 particiones de Cache L2 asociadas a cada uno de ellos.

Tened en cuenta que la memoria GDDR6 funciona utilizando no un canal de 32 bits sino 2 canales de 16 bits por chip, por lo que tendría sentido que cada partición se asociara a un canal de 16 bits de la GDDR6.

Por cada Shader Engine (2 en total) tenemos unas 8 particiones de Cache L2 conectadas a dos controladores GDDR6 de 64 bits… ¿Es posible aumentar la cantidad de controladores de memoria GDDR6 colocando más particiones de Cache L2? Por supuesto pero hemos de respetar la simetría y no podemos bajar de los 32 bits por el hecho que los chips de memoria GDDR6 son de 32 bits.

Supongamos que colocamos aparte del controlador GDDR6 de 64 bits uno de 32 bits para tener un bus de 96 bits, con 2 particiones adicionales en vez de 4… ¡Nos hemos ido sin querer a los 384 bits! El motivo de ello es que los cuatro controladores de memoria han de ser simétricos. Tenemos un problema con la configuración de 320 bits y nosotros estamos en este momento en modo…

¿Como lo solventamos? La respuesta más sencilla a toda la pregunta es que la GPU tenga asociado unos 256 bits del bus GDDR6 para si misma. ¿Pero donde dejamos el resto del ancho de banda que son los 64 bits restantes? La respuesta es bien sencilla, se la dejamos al resto del sistema como la CPU.

Los sistemas de memoria unificada donde hay varios procesadores accediendo a la memoria comparten los accesos a la misma y desde tiempos inmemoriables… Se ha solucionado la contención de dos maneras distintas, pero ambas se basan en el mismo concepto: Hacer que la memoria vaya más rápido que las necesidades de los procesadores de tal manera que tenga tiempo para alimentar y ser alimentada por las unidades de procesamiento asociadas a dicha memoria, a ello llegamos de dos maneras:

  1. Aumentando la velocidad de reloj de la memoria.
  2. Aumentando la cantidad de lineas de la memoria.

La idea es evitar la contención existente cuando acceden varios procesadores a memoria que es lo que ocurre en un SoC. Por lo que tiene sentido que se dejen los 64 bits restantes del bus a la CPU y el resto de componentes que no son la GPU.

Pe… pero Urian… ¿Acaso no es mejor colocar memoria DDR4 para la CPU aparte?

¡Me parece una pregunta absurda y desinformada!

Creo que he explicado en este blog durante mucho tiempo como AMD ha ido evolucionando la arquitectura de sus SoC de cara al acceso a la memoria de la GPU en los mismos. No tengo problemas en repetirlo y cargarme por completo el sinsentido de lo de la DDR4.

Cuando hace unos años AMD lanzo sus primeros SoC, llamados APU por aquel entonces el acceso a la RAM desde la GPU se hacía por dos caminos distintos.

La GPU tenía dos accesos a la memoria, uno de ellos era el llamado Radeon Memory Bus (Garlic) donde el acceso era directo por parte de la GPU y actuaba de manera no-coherente. el otro es a través del bus Onion u Onion+ (La diferencia con el primero es que Onion+ no busca los datos en la cache de la propia GPU sino que va directamente al espacio coherente de la memoria).

Todos los componentes de un espacio coherente comparten la información de la memoria, cuando un cambio es realizado por uno de los procesadores en la memoria el mecanismo de coherencia avisa al resto de ese cambio para que no hagan una operación errónea con la memoria. Esto significa que pese a que la memoria esta técnicamente unificada, a efectos prácticos actúa como si fuesen dos pozos de memoria distintos de cara a la memoria.

Bajo este antiguo paradigma si que tiene sentido el hecho de que CPU y GPU pese a estar en un SoC tengan memorias diferenciadas, en realidad es un sistema de memoria no unificada y al igual que ocurre en PC donde hay que utilizar unidades DMA como accesos alternativos a la memoria para comunicar entre si los pozos de memoria diferenciados.

Cuando la GPU accedia desde la FCL le creaba una contención al acceso al RMB, por eso el ancho de banda de FCL+RMB nunca era el ancho de banda total de la memoria. El bus era que el FCL creaba una contención adicional de dos veces el ancho de banda que consumía. Este problema es común tanto en PS4 como en Xbox One debido a que comparten la misma estructura que los SoC de AMD.

Diagrama Xbox One
Diagrama Xbox One X
Diagrama PlayStation 4

¿La solución de AMD para evitar el problema? Hacer que la GPU tenga un solo canal de acceso a la memoria, para ello necesitan que el acceso a la RAM por parte de la GPU sea también coherente, dicha coherencia se consiguió mejorando la unidad DMA y el sistema de memoria de la GPU de tal manera que esta misma pudiese acceder de manera coherente a la memoria desde cualquiera de los dos buses. Esto se implemento en los SoC AMD Carrizo en PC.

Ahora la GPU ya puede realizar operaciones de memoria en el mismo espacio que la CPU sin tener que pasar por FCL(Onion) y haciendolo directamente via el bus RMB, el acceso a la memoria de todo el sistema ahora es perfectamente coherente.

Por lo que es un redundancia tener dos accesos a la memoria desde la GPU, ahora el RMB es completamente coherente. Pues bien, paradojicamente AMD llamo a este acceso bajo el nombre de Onion3 porque al igual que Onion y Onion+ es lo que da el acceso coherente a la memoria. claro esta que ahora todos los accesos son coherentes.

Este cambio en GPUs dedicadas se dio a partir de Polaris, es lo que permite el que dos GPUs en modo Crossfire o Sli compartan el mismo espacio de memoria también.

Aunque AMD ha abandonado el Crossfire es una de las aplicaciones, Nvidia hizo el cambio con el salto de Maxwell a Pascal.

Este es el motivo por el cual en el Tegra Parker «X2» la gente de Nvidia puede conectarle a la GPU, una GPU dedicada dado que ambas comparten el espacio de memoria y esto lo pueden hacer porque Parker utiliza una GPU de la familia Pascal que tiene dicha funcionalidad.

En cambio el Tegra X1 es de la familia Maxwell y no tiene esa funcionalidad, por eso el Drive PX de Nvidia con los Tegra X1 es sin GPU dedicada al lado.

Perdón por el inciso, pero con ello acabo de demostrar el porque no habéis visto ni vais a ver un Dock para Nintendo Switch que complemente la potencia de la actual consola. Otro de los bulos que han ido circulando por la boca de expertillos.

En fin, volvamos al tema de AMD. Durante un tiempo dado que la DDR4 no da el suficiente ancho de banda se comento la solución de darle un acceso paralelo por si la GPU no tenía suficiente ancho de banda. ¿Como? A través de un canal de memoria HBMn.

Pero la realidad es que aún seguimos esperando que se aplique dicha solución…

Es decir, AMD ha implementado una solución pensada para una configuración de acceso a la memoria unificado y por tanto con un solo pozo en sus SoC. Esto implica que si tienes un pozo de memoria lo suficientemente rápida como memoria GDDR5 o memoria GDDR6 ya no te hace falta tener dos pozos de memoria diferenciados con ello.

Y aún asi, ante esta situación tenemos a los genios de los fakes, los hoaxes y los que se quieren pasar de listos haciendo especulaciones con pozos de memoria de naturaleza diferenciada… Realmente son unos putos «genios» con cara de cemento armado y tenemos a los otros genios, a los de los prensa, repitiendo como papagayos lo que dicen esos payasos en las comunidades de reddit, retrasera y demás lugares similares como si fuese la verdad revelada cuando mirando unos minutos lo que ha ido haciendo AMD fuese suficiente, convirtiendo toda la especulación informada acerca de la parte técnica de la siguiente generación en lo que es, un montón de mierda.

Microsoft paso de dos pozos de memoria (DDR3+ESRAM) en Xbox One a un pozo (GDDR5) en Xbox One X, AMD nunca ha implementado el doble pozo de memoria en sus sistemas en PC, incluso el Fenghuang o 15FF que empezo siendo una configuración HBM2+DDR4 termino siendo una configuración GDDR5. Pero estos precedentes no son suficientes para los genios forísticos de los Tontoflops y Giliflops

Aparte que el camino inverso nunca se ha hecho. ¿Tan difícil es entender que si la dupla CPU+GPU necesita más ancho de banda van a aumentar el ancho de banda de la memoria ya existente en vez de colocar un pozo de memoria DDR4 para ello? Este es el motivo por el cual Microsoft podría haber integrado un bus más ancho con la GDDR6 en vez de colocar DDR4 para la parte de la CPU pero es el motivo por el cual todas las especificaciones con doble pozo de memoria diferenciado son… ¡Completamente falsas!

Pe… pero Urian, eso lo suelen decir respecto a PS5 ya que PS4 si que tiene un pozo de memoria DDRn.

¡Eso es falso! En el caso de PS4 el SoC Liverpool no tiene acceso a la DDR3 del Southbridge, en el caso de PS4 Pro lo que se hace es volcar en la DDR3 los 0.5GB menos utilizados en cada momento haciendo un cambio, pero en ese caso el SoC tampoco tiene acceso directo a la DDR3 del Southbridge para ejecutar instrucciones con esta. Basicamente en PS4 Pro el Sistema no se queda con 3GB activos sino son solo 2.5GB y deja 0.5GB en un pozo de memoria aparte para hacer el intercambio cuando es necesario, pero la DDR3 del Southbridge no esta cableado al SoC de PS4 Pro y no puede acceder a ella de manera directa.

Esto es todo, como siempre tenéis el Discord y los comentarios de la misma entrada para comentar el contenido de la misma.