Hace unos días aparecieron rumores sobre el sucesor de «Ampere» en Nvidia, el cual saldrá en el 2022 como ya os comente hace unos días. El nombre de la arquitectura es Nvidia Hopper.

Se esta hablando de chiplets continuamente en los medios. Pero… ¿Que es un chiplet? ¿Existe una definición estándar de chiplet? Si nos atenemos a como los utiliza AMD un Chiplet son una serie de procesadores integrados, cada uno con su propio encapsulado y en chips distintos conectados entre si utilizando una red de comunicación común para comunicarse entre si y comunicarse con la memoria, por lo que los chiplets por separado tienen las funciones de comunicación capadas y no sirven por si mismos para funcionar como procesadores de manera independiente.

Por ejemplo los chiplets de Rome pese a ser la CPU carecen de los mecanismos de acceso a la memoria y de gestión de E/S, son núcleos incompletos. Lo bueno que tienen es que puedes reemplazar un chiplet de un tipo por otro tipo y conectarlo a lo que es la estructura principal que los comunica entre si y a estos con la memoria. Esta organización a nivel monolítico es la clásica de los SoC, por lo que un MCM basado en chiplets no deja de ser un SoC con los componentes separados en diferentes chips.

¿Cual es el problema? La prensa lo esta utilizando erroneamente de manera generalizada, así, sin ton ni son… Y creo que es importante aclarar que tanto Nvidia con Hopper como Intel con sus GPU Xe podrían no utilizar el mismo planteamiento que AMD.

De Turing a Hopper pasando por el Intel Xe

Lo primero que tenemos que entender es que una GPU es también un SoC, Tenemos varias unidades organizadas a través de una interfaz central de intercomunicación, pero en las GPUs esta es un poco especial ya que estás incluyen:

  • Los Procesadores de Comandos, tanto gráficos como de computación, desde allí se controla el flujo de trabajo de la GPU.
  • La Cache se último nivel para la GPU (Cache L2)
Navi 10 vs TU102

El motivo por el cual la cache L2 esta en el centro exacto de la GPU es porque es mucho más fácil intercomunicar con esta los diferentes clusters donde están los shaders por un lado y por otro comunicar esta con los controladores de memoria. Si transformaramos una GPU monolítica en una GPU basada en MCMs sin cambiar la arquitectura general entonces los GPC en el caso de Nvidia sería lo que iría en los chiplets.

Pero una cosa que hemos visto en los SoC tanto de Nvidia (Tegra) como de AMD es que podemos integrar una GPU completa con su cache L2 en un SoC, es decir, sin la interfaz con la memoria externa que hay en la perifería. Ahora bien… ¿Como lo hacemos para comunicar varias GPUs cuasi completas entre si y que tenga una comunicación lo suficientemente rápida?

La respuesta es bien sencilla, con una interfaz común y una cache de un nivel más alto… ¿Es lo mismo que hay dentro de cada GPU con su uncore/northbridge/red de intercomunicación interna y la Cache L2? Pues…

La estructura central donde irían todas las GPU Chiplet debería contener una cache L3 con la siguientes especificaciones:

  • Ancho de Banda: Memoria Externa<Cache L3 en el uncore general <Cache L2 en cada GPU Chiplet.
  • Densidad: Memoria Externa>Cache L3 en el uncore general >Cache L2 en cada GPU Chiplet.

El problema es que tener una intercomunicación externa lo sucientemente ancha suponía hace unos años un consumo enorme, solo era posible comunicar las GPUs ante el estándar PCIe, el cual tiene un consumo energético por linea de varios Pj/bit o mW/Gb por lo que cuando aumentamos enormemente la cantidad de interfaces el consumo energético se va por las nubes y hace que dentro de los límites del consumo doméstico sea imposible construir un sistema a partir de cierta complejidad.

Hace unas horas, Intel ha presentado una placa llamada Aurora con 2 Intel Xeon y 6 GPUs Intel Xe a futuro.

¡Pero no! Si nos fijamos entre las GPUs hay un pequeño chip de intercomunicación, ese bloque negro, pequeño. Al que han llamado XeLink.

El concepto del XeLink no es nuevo, ya lo vimos hace unos años con el NVSwitch de Nvidia, la diferencia es que este utiliza el estandar CXL aka Compute Express Link, el cual es el sustituto real del PCI Express. A este se le unió AMD el pasado verano… ¿Para reemplazar el Infinity Fabric? No, son conceptos distintos pero tenemos el antecesor del mismo en el NVSwitch de NVidia.

El NVSwitch al igual que el XeLink es un concentrador/crossbar que permite la comunicación entre diferentes GPUs de Nvidia haciendo uso de la interfaz NVLink

Se penso para intercomunicar varias Nvidia Volta, este tiene unas 36 interfaces NVLink (18 de Envio y 18 de Recepción) para comunicar en cualquier configuración a varios sistemas con interfaz NVLink. Una GPU Nvidia Volta (GV100) tiene unas 6 interfaces NVLink 2.0, cada una con un ancho de banda de 25GB/s por dirección. La idea de Nvidia fue la de comunicar el primer canal NVLink de unas 8 gPU a un NVSwitch común, el segundo canal NVLink de cada GPU a otro NVSwitch…

Fijaos en los 6 NVSwitch (dos de ellos tapados por la mano de Jen Hsun) existentes para la placa de 8 GPUs Nvidia Volta.

La idea del Intel XeLink es similar… ¿Pero que es el CXL? Es una versión mejorada del PCIe que añade coherencia de memoria y de cache entre los diferentes chips intercomunicados al mismo, su ancho de banda es el del cercano PCI Express 5.0.

Es decir, 128GB/s en ambas direcciones. No sabemos cuantas interfaces CXL y de que tipo tenemos por cada GPU Chiplet pero viendo el diagrama… podemos intuir en teoria que hay dos interfaces de intercomunicación distintas.

En realidad no es así, la interfaz es CXL compuesta por varias lineas, podemos comunicarlas como queramos, en este caso en el caso de los Intel Xe 1,4,3 y 6 del diagrama el 50% de los nodos se utiliza para comunicar con el el que tienen al lado (el 1 con el 4 entre si y el 3 con el 6 entre si) mientras que el otro 50% de los nodos se utiliza para comunicar con el XeLink, esto nos lleva a la conclusión de que hay dos interfaces CXL por Intel Xe.

En el caso de los Intel Xe 2 y 5 tenemos que ambas interfaces CXL están conectadas al XeLink por lo que un solo Xe Link sirve para unas 8 interfaces CXL, lo cual si lo pensamos bien es una enorme burrada, ya que estamos hablando de un ancho de banda con 16 lineas por CXL de 1 TB/s (128^8) por dirección y por tanto de 2TB/s si tenemos en cuenta ambas direcciones, un poco más del doble de NVSwitch de Nvidia para Volta que tiene un ancho de banda de

Obviamente podemos concluir que Nvidia va a mejorar el NVSwitch de cara a Hopper y que tanto el XeLink como el NVSwitch son dos implementaciones de un mismo concepto. Además, podemos integrar varios Intel Xe entre si permitiendo la comunicación entre estos, la placa Aurora de Intel con los 2 Xeon y los 6 Intel Xe no es la misma placa que muestran en otro momento de la presentación donde en vez de tener 1 Xe Link por placa tenemos unos 4 XeLinks.

En el dibujo no se ve bien por el color negro quel lo opaca pero tenemos unos 4 XeLinks incluyendo cada uno de manera interna lo que ellos llamán Rambo Cache que es la Cache de último nivel que os he comentado antes de manera introductoria, la cual se incluiría en la estructura de intercomuninicación entre varias GPUs.

La Rambo Cache dentro de cada XeLink y la sucesión de XeLinks en la parte central son por tanto el puente existente entre las diferentes GPU Intel Xe y la memoria externa. ¿Entendéis ahora mejor la parte introductoria de esta entrada?

La Rambo Cache se encuentra dentro de cada XEMF donde también se incluyen las interfaces XeLink, la cosa quedaría por cada nodo XEMF de la siguiente manera:

Podemos unir varios modulos XEMF a través de las interfaces CXL, si queremos tener dos de ellos unificados entonces si lo hacemos de manera lineal…

El problema es que esto supone un cuello de botella, por eso es mejor hacer como hizo Intel comunicar cada una de las interfaces CXL de cada una de las GPUs con un XEMF… ¿Pero cual es la mejor opción? Pues utilizando un sustrato/interposer en un nivel inferior para la intercomumunicación, Intel afirma que para comunicarse con la «Rambo Cache» utiliza precisamente Foveros que es precisamente lo que os estoy explicando, el uso de un sustrato/interposer para la intercomunicación en vez de utilizar una interfaz lineal como he mostrado arriba.

Por lo que realmente el diagrama sería el siguiente en el segundo sistema:

Pe… Pero Urian, no entendemos nada, nos estás liando de mala manera… ¿Estás seguro que sabés de lo que hablás?

No, más bien es Intel, en la presentación hablan de dos sistemas, uno es el Intel Aurora y ese para comunicar las diferentes GPUs entre si no hace uso del XEMF sino de un XeLink simple sin cache comunicado con una interfaz lineal, la distribución de Aurora sería la siguiente:

El segundo sistema utiliza otro tipo de interconexión, no lineal sino en vertical con el sustrato/interposer, lo que hace que la intercomunicación sea un poco más compleja.

Los colores son importantes, pensad que en este caso la comunicación como la del NVSwitch pero utilizando un sustrato/inteproser para la misma, que estaría el nivel inferior mientras que los XEMF y las GPU estarían en el superior, por lo que hablamos de dos sistemas diferentes. En el primer sistema que es el llamado Aurora cada GPU solo tiene 2 interfaces CXL mientras que en el segundo caso tenemos unas 4 interfaces CXL. Donde ponemos una GPU en ambos casos podemos colocar una CPU y vicerversa… ¡O una unidad FPGA!

Ahora bien, volvamos a Nvidia… ¿Sabemos como va la evolución Nvidia el NVLink? El NVLink 2.0 es de 2017, ha llovido desde entonces y tiene un ancho de banda de 25GB/s por dirección, el NVLink 2.0 es utilizado en el IBM Power9 y su predecesor, el IBM Power8 utlizaba el NVLink 1.0 que iba a 20GB/s por dirección.

Nvidia debería presentar el NVLink 3 con la GA100 (Ampere), sustituta de la GV100 y que podría llevar consigo unos 6144 núcleos CUDA en total y a una mayor velocidad. En todo caso no sabemos cual es esa velocidad todavía. En todo caso hay que aclarar que con el concepto de Nvidia y de Intel cada GPU tiene su hub central y por tanto su procesador de comandos en vez de tener uno centralizado y organizado que sería otra opción, pero esa otra opción no es otra que la de convertir una GPU monolitica en una GPU en un MCM y no es lo mismo que ha planteado Intel, por ese motivo no he utilizado el concepto Chiplet con el planteamiento de la GPU de Intel y pese a que la prensa lo utiliza, Nvidia no lo utiliza en sus diagramas sino que utiliza el termino GPU Module o Modulo GPU.

Sabemos que Nvidia esta trabajando en un tipo de memoria llamada FGDRAM como memoria de reemplazo de la HBM2, la cual puede dar por cada pila una velocidad de 1TB/s.

Nuestro objetivo es diseñar una pila DRAM con 4 veces el ancho de banda de una pila HBM2 actual y, al mismo tiempo, reducir la energía por acceso en un factor de dos. Esta DRAM de 1 TB / s, 2 pJ / bit permitirá futuros sistemas de memoria GPU multi-TB / s

Pues bien, creo que esto se va a hacer realidad con Hooper, por lo que cada interfaz con la memoria será de 1 TB/s… Por lo que el en el diagrama de la GPU MCM en realidad tenemos en teoría unos 8 TB/s de ancho de banda para la GPU, algo completamente ingente… Pero obviamente este sistema no sería la GH100 (H de Hooper) sino que un solo GH100 tendría una configuración de memoria de 2 TB/s. En realidad no creo que nadie en el mercado doméstico se ponga a hacer GPUs basadas en varios módulos MCM, es demasiado complejo, caro e inviable… Esto es para la computación de muy alto rendimiento.

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