Multinúcleo heterogéneo: lo que debes saber

Seguro que ya sabes acerca de la computación heterogénea, HSA, etc. Pero en esta nueva entrada del blog te vengo a comentar sobre un término muy concreto, y es el multinúcleo heterogéneo. Un paradigma que, dadas las patentes que las grandes compañías han registrado últimamente, va a estar «muy de moda» en los próximos meses (recuerda que estamos en la era Post Dennard).

Pero lo cierto es que no es una tecnología realmente nueva, de hecho, en el mundo de los dispositivos móviles ya se lleva usando desde hace tiempo. En este sector se conoce como big.LITTLE., y a partir de ahora también la verás más allá de los ARM, en la familia x86-64 como, por ejemplo, en los Intel Lakefield, etc.

¿Qué es el multinúcleo heterogéneo?

Helio die shot big.LITTLE
Die shot del Mediatek Helio X20 (MT6797) con un cluster de cuatro núcleos Cortex-53 ULP de muy bajo consumo (#1), otro cluster Cortex-A53 de cuatro núcleos eficiente (#2), y un tercer cluster de alto rendimiento de dos núcleos Cortex-A72 (#1) – Fuente: Wikichip

Ya he comentado en otras ocasiones sobre algunas arquitecturas heterogéneas, también sobre los procesadores multinúcleo donde se incluyen varios núcleos idénticos para el multiprocesamiento. E incluso también he comentado sobre los manycore, que son similares a los multicore, pero con un gran número de núcleos (64, 128, 256, 512,…).

Además, estos núcleos pueden estar implementados de varias formas. Por ejemplo, pueden compartir la memoria cache o tenerla dedicada para cada uno de ellos, tal vez solo compartir el LLC (Last Level Cache). También se pueden implementar juntos en una pastilla monolítica o chiplets, con distintos métodos de comunicación (anillo, bus, malla, crossbar) y paso de mensajes entre ellos, etc.

Pero se puede ir un poco más allá y, en vez de emplear núcleos homogéneos donde todos son iguales, usar una arquitectura multinúcleo heterogénea. Es decir, donde los núcleos no tiene que ser idénticos. Este tipo de implementación puede tener algunas ventajas bastante interesantes, especialmente para mejorar la eficiencia.

Incluso es frecuente que se incluyan multiplicadores diferentes para los diversos núcleos, y de esa forma, cada uno puede trabajar a una frecuencia de reloj diferente. Por supuesto, cada uno puede contar con una tecnología de escalada de dinámica de frecuencia.

Un ejemplo de esta tecnología es la llamada big.LITTLE de ARM. En ella se usan sistemas multinúcleo heterogéneos donde todos ellos comparten una misma ISA, es decir, todos los núcleos pueden ejecutar el mismo repertorio de instrucciones a pesar de ser núcleos diferentes. En la imagen anterior, se puede apreciar un SoC de Mediatek donde se usan tres clusters de núcleos diferentes:

  • Cortex-A53 ULP @ 1.4Ghz: los Ultra Low Power son los más sencillos de todos, ocupan menor superficie en el troquel y están dirigidos a cargas de trabajo menos pesadas, ahorrando batería dada su mayor eficiencia energética. Por supuesto, en este caso pueden desarrollar todo el repertorio de instrucciones ARM.
  • Cortex-A53 @ 2Ghz: son similares a los anteriores, pero con un rendimiento algo superior, para encargarse de ciertas cargas de trabajo medias.
  • Cortex-A72 @ 2.5Ghz: son núcleos de mayor tamaño, más complejos y con un mayor consumo. Pero su rendimiento también es superior a los anteriores. Por eso, cuando la carga de trabajo sea más pesada y lo requiera, se pondrán a funcionar estos núcleos. En caso contrario, podrán usarse los clusters anteriores para que la autonomía de la batería crezca.

Esta tecnología big.LITTLE es tan popular que muchos, erróneamente, usan el término para referirse a cualquier tecnología de núcleo heterogéneo.

En cambio, no tienen por qué ser núcleos que compartan una misma ISA, o toda la ISA completa. Con los nuevos núcleos RISC-V es probable que veamos sistemas donde haya núcleos simples que puedan solo ejecutar un set reducido de esta ISA y otros que puedan también trabajar con otras extensiones o módulos (V, M, J, F,…).

Intel y AMD también tienen patentes para sus propios lanzamientos en los que trabajarán con sistemas multinúcleo heterogéneo. Según las patentes que se han filtrado de AMD (presumiblemente para Zen 4), parece que usarán núcleos diferentes en los que ni siquiera se comparte el mismo repertorio de instrucciones.

Por ejemplo, en el caso del Intel Lakefield, será una configuración de cinco núcleos:

  • Núcleo de alto rendimiento Sunny Cove (Ice Lake).
  • Cuatro núcleos de bajo consumo Tremont (es decir, núcleos Atom).

Alder Lake de Intel, que también apuesta por esta filosofía, tendrá clusters o grupos de núcleos que se podrán habilitar o deshabilitar desde el BIOS/UEFI. Además, desde el terminal de Linux también podrás hacerlo…

ACTUALIZACIÓN: Intel ha cancelado Lakefield. Las últimas novedades en stock estarán a la venta el 29 de abril de 2022. Las explicaciones que han dado desde la compañía es que la demanda del mercado ha ido hacia otros procesadores de la compañía. Veremos qué ocurre con Alder Lake…

Sobre AMD, se ha rumoreado con la aparición de diseños multinúcleo heterogéneo. De hecho, existen algunas patentes muy interesantes, pero podrían no ser chips destinados al PC. Y es que la compañía de Santa Clara comunicó que no estaba planeando crear este tipo de diseños para núcleos Zen. Pero… ¿y para SoCs para dispositivos móviles?

Si se quiere seguir escalando la cantidad de núcleos en un mismo empaquetado, existen varias opciones, como los chiplets, empaquetados 3D, y los núcleos monolíticos más grandes. Éstos últimos no son demasiado prometedores para núcleos complejos como los x86 cuyo tamaño es bastante superior a los pequeños ARM o RISC-V. Si los núcleos ocupan bastante superficie, eso significa dados sobredimensionados, con lo que el yield del wafer será nefasto y los precios serán muy caros. En cambio, gracias a la inclusión de núcleos más simples, se puede aumentar la cantidad de ellos sin tanta penalización de superficie del chip.

Por el momento solo son especulaciones, pero también es cierto que se ha rumoreado con un posible diseño basado en ARM de esta compañía que habría desempolvado su microarquitectura K12 según algunas fuentes. Pero, para el alto rendimiento, parece que seguirán apostando por una arquitectura multinúcleo homogénea, chiplets y 3D packaging.

Caso de AMD Zen 5 (Ryzen 8000 Series)

AMD LGA

AMD también está diseñando su microarquitectura Zen 5 (codename ‘Strix Peak’) basada en esta tecnología. Se lanzará, bajo la nomenclatura Ryzen 8000 Series en 2024 y será fabricada usando un nodo de proceso de 3nm de TSMC. Además, también se ha adelantado que usaría 8 núcleos de alto rendimiento y 4 núcleos eficientes. Eso irá acompañado de soporte para DDR5 y PCIe 5.0, así como iGPU RDNA2 o RDNA3. Por otro lado, además de ser un empaquetado MCM (chiplets), incluirá 3D packaging, y empleará socket AM5 tipo LGA.

En cuanto a su interior, se ha desvelado que los núcleos de alto rendimiento que usará emplearán la microarquitectura Zen 5 y los otros núcleos más pequeños y de menor consumo serán Zen 4D.

Según se aprecia en algunas patentes registradas por la compañía, se ha implementado un sistema de interrupciones que despertará al núcleo más acorde a la tarea que solicita ser procesada, evitando despertar a los núcleos que más consumen si la tarea es de bajo IPC y puede ser procesada por los núcleos más eficientes.

Los núcleos pequeños también pueden tener acceso a la memoria LLC (Last Level Cache), que será compartida entre el núcleo grande y el pequeño. De ese modo, cuando la ejecución cambia a un núcleo grande se evitan fallos en la solicitud. Eso evitaría que se necesiten usar recursos adicionales del sistema operativo o para el mantenimiento de la tarea.

Por otro lado, parece que este mini procesador, o núcleo eficiente, solo podrá soportar una implementación restringida de la ISA x86/extensiones. Es decir, no podrá usar todas las instrucciones del repertorio. Al soportar menos instrucciones, permite reducir la complejidad de estos núcleos y mejorar su eficiencia.

El sistema que AMD ha diseñado también tiene un mecanismo capaz de detectar si el núcleo pequeño tiene capacidad insuficiente para ejecutar una tarea o dicha tarea hace uso de una instrucción no soportada por este tipo de núcleo. En ese caso, pasará la tarea a un núcleo grande.

Además, hay que tener en cuenta que en la transferencia de la ejecución de una etapa a la siguiente, las interrupciones pueden enrutarse a una etapa de destino, luego la ejecución se transfiere a medida que se activan las etapas sucesivas, lo que puede ocurrir en paralelo o bajo demanda, y que la ejecución de la tarea se pueda pasar de forma transparente entre diferentes núcleos.

big.LITTLE

big.LITTLE logo

Como he mencionado, muchos usan el término big.LITTLE para referirse a todas las tecnologías similares, pero esta implementación es solo cosa de Arm. Algo parecido pasa cuando usan el término HyperThreading (HT) de Intel para referirse a cualquier implementación SMT.

Pero no, ya sabes que lo correcto en este caso es usar el término multinúcleo heterogéneo como denominación genérica y big.LITTLE cuando te refieres a ARM. Además, en el caso de estos diseños, tienen sus particularidades. A groso modo, para no entrar en demasiados detalles, destaca:

  • A nivel del modelo de software, no se poedía elegir usar todos los clusters/cores de forma simultánea (véase Culstered switching). Actualmente, sí que se permite que el Global Task Scheduler del kernel del sistema operativo pueda elegir usar todos ellos para procesar la carga de procesos en marcha.
  • big.LITTLE puede extender las capacidades de SMP scheduling y DVFS (Dynamic Voltaje & Frecuency Scaling) para mejorar la eficiencia según la carga de trabajo eligiendo núcleos pequeños y eficientes o grandes.
  • En cuanto al soporte actual, lo cierto es que está soportado en el kernel Linux. Por eso puede usarse en sistemas para dispositivos móviles como Android.
  • Global Task Scheduling permite elegir los núcleos necesarios en cada momento, además de realizar throttling, escalados de voltaje, etc., que serían independientes del cluster elegido y que sería también independiente en cada uno de ellos.
  • Según algunos análisis de Arm, el ahorro energético y de batería puede llegar al 75%.
  • A nivel de código no privilegiado, es decir, a nivel de usuario, el código de los programas no debe ser alterado para soportar big.LITTLE, de eso se encargará el kernel del sistema operativo. Tampoco los usuarios tienen que realizar ninguna acción para elegir los núcleos, es algo que se hará en cada momento teniendo en cuenta la carga de trabajo.

En definitiva, una forma de no despertar a núcleos de alto rendimiento para atender tareas que no necesitan toda la potencia computacional de un núcleo para procesarlas. Con el paradigma heterogéneo solo se despertaría a los núcleos grandes cuando se demanda el mayor rendimiento. Para cargas de trabajo livianos se despertará a núcleos pequeños y eficientes que resultan suficientes para dicha tarea.

En mayo de 2017, Arm anunció DynamIQ, un sucesor para big.LITTLE que promete mejorar la flexibilidad y escalabilidad. Por ejemplo, tiene soporte hasta 8 núcleos por cada cluster, lo que es un gran paso adelante. Además, admite diferentes diseños de núcleos dentro de un mismo cluster y un total de hasta 32 clusters por chip, con unas velocidades de la memoria cache L2 más rápidas. Incluso se ha pulido el tema de throttling de frecuencias y el voltaje, es decir, el DVFS es ahora más preciso.

No obstante, no todo son ventajas, ya que DynamIQ es incompatible con núcleos Arm diseñados anteriormente. Solo será compatible con los nuevos Cortex-A75 y Cortex-A55 y posteriores.

Más información – Sobre DynamIQ

Soporte de software del multinúcleo heterogéneo

big.LITTLE Linux

Hace un tiempo también escribí un artículo para LinuxCenter (Slimbook) sobre cómo obtener información de la CPU en Linux, y quizás te puede interesar.

Uno de los mayores problemas de las arquitectuaras multinúcleo heterogéneo, si es que se puede llamar problema, es el soporte del software. Los sistemas operativos deben ser capaces de poder soportar este tipo de implementaciones.

En el caso del kernel Linux, seguro que ya conoces módulos como cpufreq que se dedica a gestionar las frecuencias de reloj del microprocesador mediante gobernadores. De esa forma, el cuando se ejecutan cargas de trabajo leves, se puede reducir la frecuencia de la CPU para reducir el consumo y temperatura, mientras que cuando se necesita aumentar al máximo el rendimiento, se puede escalar la freceuncia.

Otro módulo empleado por el kernel Linux es cpuidle, que se encarga de encender o apagar núcleos de la CPU cuando se trata de un sistema multicore. Cuando no se necesitan todos los núcleos, su apagado puede ahorrar una buena parte de energía. Para ello se emplean los C-States.

El problema de estos módulos es que funcionan de forma independiente, por lo que no son demasiado eficientes para dispositivos móviles. Aunque sí cumplen su acometido en PC y HPC.

Al funcionar independientemente, pueden generar conflictos entre ellos, lo que reduce la eficiencia. Por ejemplo, podría ocurrir que el sistema operativo asigna a un núcleo apagado un proceso que podría asumir otro núcleo que está ya activo. Por tanto, se podría hacer de forma más eficiente sin despertar otro núcleo.

Por eso, se han incluido otros subsistemas como EAS (Energy-Aware Scheduling), especialmente pensado para Arm y dispositivos móviles. Básicamente es un intento en unificar ambos módulos para que trabajen de forma más eficiente y consiguiendo una caída en el consumo.

No obstante, EAS no soporta plataformas con topologías simétricas de CPU, solo opera en topologías de multinúcleo heterogéneo como big.LITTLE o DynamIQ. Por tanto, puede ser un camino a seguir para futuros desarrollos de hardware que sigan esta misma premisa.

En el caso del Intel Lakefield, lo cierto es que no ha habido grandes retoques en el código fuente del kernel Linux. Sí se ha mejorado la gestión de energía, así como áreas del controlador de escalado de frecuencia (P-States), siendo ahora la utilidad gobernadora por defecto Schedutil. También se han retocado algunas partes del planificador, por lo que se puede intuir que muchos de lo subsistemas ya existentes se pueden reutilizar para estas nuevas arquitecturas híbridas florecientes. Aunque, es probable que cuando se acerquen sus comercializaciones se puedan intuir más cambios.

OpenAMP (Open Asymmetric Multi Processing Framework) es un proyecto de código abierto para el desarrollo estándar de estas tecnologías multinúcleo en Linux. Cuenta con el apoyo de Mentor Graphics y Xilinx (ahora propiedad de AMD).

Evidentemente, conforme se popularicen en el escritorio este tipo de arquitecturas, también tendrán un buen soporte en otros sistemas, como Windows…

Una tecnología que no está libre de problemas

Intel Lakefield
Die shot: Intel Lakefield

La tecnología de multinúcleo heterogéneo no está libre de inconvenientes. Pese a que puede funcionar bien en procesadores más «ligeros» como ARM o RISC-V, en los x86 puede ser más problemático debido a la mayor pesadez a la hora del cambio de contexto y de gestionar esto por parte del sistema operativo. Puede ser algo que no guste a Linus Torvalds y veremos si se pronuncia al respecto…

Más información – ACPI

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar