De todos es sabido que Intel va a dar el salto a hacer tarjetas gráficas dedicadas que se traduce en que van a hacer sus propias GPUs para competir contra Nvidia y AMD en ese espacio. Es algo especialmente interesante porque la competencia que peor quedaría en estas circunstancias es AMD donde ahora mismo su punto fuerte se encuentra en sus Soc/APU para la gama de consumo ya que las GPUs de AMD suelen estar mucho mejor diseñadas que las de Intel aunque por el momento ni Intel ni AMD compiten en condiciones en la gama alta y la propia AMD va contrarreloj con tal de acabar sus Navi y que sean perfectamente competitivas.

Dado que una GPU es algo sumamente complejo que toma años en realizarse hemos de tener en cuenta que la llamadas Intel Xe van a derivar de lo vamos a ver en la gráficas integradas llamadas Gen11.

Arquitectura General de la Gen11

La organización de la la GPU integrada de Intel para la siguiente generación sigue como todas las GPUs una serie de pautas comunes y una serie de elementos exclusivos que podemos deducir a partir del siguiente diagrama:

El diagrama es el equivalente a lo que en Nvidia llamado GPC y en AMD un Shader Engine, esto nos lo aclara Intel con el siguiente diagrama:

Es decir, Intel llama Slice a lo que Nvidia llama GPC y AMD un Shader Engine, la parte que pone Slice Common hace referencia a las unidades ROP que son esenciales y clásicas en toda GPU.

El primer elemento de cada Slice es la parte marcada como Geometry que no es otra cosa que la unidad de rasterizado, al igual que la Maxwell de Nvidia en adelante y las AMD Vega en adelante estamos ante una unidad de rasterizado por tiles y por tanto estamos ante una GPU del tipo Middle Sort que ordena la geometría según su posición que es el tipo de arquitectura que se esta estandarizando.

El segundo elemento son los sub-slice, son el equivalente a las Compute Units de AMD o las SM de Nvidia. La EU (Execution Units) son las ALUs con sus registros ejecutando sus shaders, en todo el Slice tenemos unos 64 EU en total y 8 Sub-Slice y si hacemos caso a las especificaciones tenemos un total de 1024 ALUs en FP32, esto significa que tenemos unas 2 ALUs por EU con sus correspondientes registros.

Por lo que cada EU puede ejecutar 16 operaciones FP32 por ciclo de reloj [2 ALUs x SIMD-4 x 2 Ops (Add + Mul)] y 32 operaciones en coma flotante por ciclo de reloj [2 ALUs x SIMD-8 x 2 Ops (Add + Mul)]. Lo que llama poderosamente la atención es la asignación de cada los registros no a nivel de una ALU sino de 2 ALUs, aunque el equivalente en la EU si lo comparamos con la arquitectura GCN de AMD no es hacía lo que es una Compute Unit sino a una unidad SIMD, aunque realmente no estamos ante una configuración 16×1 sino (8×1+8×1) lo cual es distinto pero por lo visto esto es una parte que en comparación con la antigua unidad de Intel no ha cambiado si la comparamos porque fuera de la capacidad ya disponible en otras GPUs de poder desdoblar las ALUs en FP32 y sus registros para operar en FP16 no hay ninguna otra novedad, ocurre lo mismo que con la unidad de rasterizado que ha sido actualizada para ser competitiva y ponerse al día.

El siguiente elemento del Sub-Slice es la SLM que significa Shared Local Memory y es otro de los elementos que también tenemos en las GPUs de AMD y Nvidia, era algo que las GPUs de Intel carecían donde el punto al que tenían que ir es a una cache externa que es fatídico para el rendimiento en comparación, Intel en la Gen11 ha solventado este problema colocando a dicha memoria donde le corresponde:

Intel ha omitido varios elementos en el whitepaper de su arquitectura como son las cache L1 y L2, tradicionalmente la GPUs tienen una serie de unidad del tipo Load/Store (LS) que se encargan del acceso a la Cache L1 de la GPU desde:

  • Las propias ALUs (unidades SIMD)
  • La unidad de texturas.

La unidad Load/Store se encarga de leer y escribir los datos en la cache en forma de unidad separada para que la ALUs ejecutando los shaders no tengan que realizar dicha tarea que bloquearia por completo la ejecución de los shaders mismos. Las unidades LS pese a que no salen en el diagrama si un dato no se encuentra en los registro las ALUs envían una petición a la unidad LS para que esta vaya buscando los datos a las diferentes caches o mejor dicho haga peticiones a los elementos que controlan las diferentes caches por jeraquía, obviamente cuanto más lejos este el dato pues más latencia habrá en ejecutarlo. Las ALUs de los shaders tienen mecanismos para evitar latencias y simplemente colocan a la cola los hilos/instrucción dependientes del dato que se esta buscando y se ejecutan otros mientras tanto.

En el caso de las GPUs de AMD he explicado que estas tienen un mecanismo llamado Export Bus que permiten acceder a la Cache L2, en el caso de Intel es lo mismo, las unidades LS que se encuentran entre el EU y la cache L1 tienen acceso también al Dataport que es su equivalente en el caso de Intel y le dan acceso a la… ¿Cache L3?

Lo que tenemos es que el Sampler que es la unidad de texturas no esta conectada a la cache de datos, esto tiene una explicación y es que el ratio clásico ALU:Unidad de Texturas es siempre de 16:1 pero necesitamos 4 unidades de texturas para realizar como mínimo el filtro bilineal. En las EU de Intel esto no es posible y se necesita que las unidades de texturas de 4 Sub-Slice compartan una memoria en común en forma de Cache L2 con tal de realizar las operaciones de filtraje de texturas clásicas. Si os fijais en el diagrama veréis que la cache L2 es de solo lectura y no de lectura y escritura.

Para que no estéis en modo…

… simplemente os dire que lo que Intel llama Cache L3 en su GPU es el equivalente a la Cache L2 de AMD y Nvidia. En realidad en cargas computacionales funciona como una Cache L2 ya que la Cache L3 es la memoria de solo lectura asignada a las unidades de texturas para el filtraje de estas.

El último elemento que nos queda es el Slice Common que son las unidades ROP, como se puede ver en el diagrama y al igual que ocurre con las GPUs de Nvidia a partir de Maxwell y de AMD a partir de Vega pueden escribir sus dato directamente al controlador de memoria y por tanto a la memoria externa del chip o en su defecto al último nivel de cache de la GPU. Esto es otro de los elementos que Intel ha puesto para ponerse al día respecto a AMD y Nvidia.

Coarse Pixel Shading

No es otra cosa que el Variable Rate Shading que ya se encuentra en las GPUs de Nvidia (Turing en adelante) y que supuestamente veremos en Navi en el caso de AMD. Sobre que se trata ya hice una entrada reciente. Esto es uno de los elementos al igual que el rasterizado por tiles que se esta estandarizando de cara a todas las GPUs.

Es decir, no tiene nada de nuevo y especial, pero dado que Intel lo hace llamar con otro nombre que puede dar a confusión he creído que es importante aclararlo.

¿Que le depara el futuro a la GPU de Intel?

Entre las novedades que vamos a ver seguramente al 100% en el Intel Xe respecto al Gen11 son:

  1. Un procesador de comandos gráficos con la capacidad de virtualización, es decir, que internamente la GPU pueda funcionar como dos o varias GPUs distintas, lo cual es esencial para lo Data Centers del juego en la nube.
  2. Obviamente varios procesadores de comandos de computación asincrónonos.
  3. Toda la parte de los procesadores de comandos se tendrá que ampliar para que soporten varios hilos/instrucción.
  4. Un Crossbar para la comunicación entre lo diferentes Slice con la Cache L3 de la GPU y entre ellos. El Crossbar va a llevar consigo un mecanismo de coherencia para la Cache L3, esto significa además que las caches L1 y L2 de cada Sub-Slice van a sufrir también cambios.
  5. Una SGM (Shared Global Memory) realizando la misma tarea que la GDS de las GPUs de AMD.
  6. Una Traversal Unit en cada sub-slice para el Raytracing.
  7. Muy posiblemente cambios en la parte de la geometria del pipeline con tal de dar apoyo a los llamados Mesh/Primitive Shaders que no es otra cosa que la unificación de todos los tipos de shaders relacionados con la geometria de la escena (Vertez, Hull, Domain y Geometry) en un shader general combinable con shaders de computación.

El punto 4 significa que el Data Port no se comunicaría de manera directa con la cache L3 sino con un Crossbar, un Crossbar no es ningún tipo de memoria ni unidad de ejecución sino que no es más que una infraestructura de comunicación. Es posible que en vez de un Crossbar tengamos un NoC para la comunicación, en todo caso dicha unidad se dedica a la logística y no es necesaria su naturaleza para el programador por lo que no sabremos su unidad.

En cuanto al punto 6, la idea de traer el Raytracing a las GPUs de Intel viene de mucho antes de que Raja Koduri entrase en la división de gráficos de Intel como supervisor máximo. En realidad todo lo que estáis viendo en Turing y veréis lo más probablemente en Navi es producto de años de investigación académica acerca de la implementación del pipeline híbrido para utilizar el Raytracing para solventar una serie de problemas visuales que la rasterización no puede solventar.La conclusión ha sido un pipeline de renderizado hibrido que veremos en DXR y una versión de Vulkan y que sera exactamente el mismo en ambos casos por un lado y por otro lado la creación de una unidad capaz de recorrer la estructura de datos espacial en arbol que es el BVH. Pues bien, Intel tiene una patente de 2017 que no explica la implementación de la llamadas Traversal Units en su arquitectura gráfica,

No tengo dudas que el Raytracing va a ser estándar e Intel no se puede quedar atrás si quiere ser competitiva contra AMD y Nvidia.