ARM big.LITTLE es una arquitectura de computación heterogénea desarrollada por Arm Holdings , que combina núcleos de procesador relativamente más lentos y que ahorran batería ( LITTLE ) con otros relativamente más potentes y que consumen mucha energía ( big ). La intención es crear un procesador multinúcleo que pueda ajustarse mejor a las necesidades de computación dinámica y utilizar menos energía que el escalado de reloj solo. El material de marketing de ARM promete hasta un 75% de ahorro en el uso de energía para algunas actividades. [1] Más comúnmente, las arquitecturas ARM big.LITTLE se utilizan para crear un sistema en chip multiprocesador (MPSoC).
En octubre de 2011, se anunció big.LITTLE junto con el Cortex-A7 , que fue diseñado para ser arquitectónicamente compatible con el Cortex-A15 . [2] En octubre de 2012, ARM anunció los núcleos Cortex-A53 y Cortex-A57 ( ARMv8-A ), que también son intercompatibles para permitir su uso en un chip big.LITTLE. [3] ARM anunció más tarde el Cortex-A12 en Computex 2013 seguido por el Cortex-A17 en febrero de 2014. Tanto el Cortex-A12 como el Cortex-A17 también se pueden emparejar en una configuración big.LITTLE con el Cortex-A7. [4] [5]
Para una biblioteca dada de lógica CMOS , la potencia activa aumenta a medida que la lógica cambia más por segundo, mientras que la fuga aumenta con la cantidad de transistores. Por lo tanto, las CPU diseñadas para funcionar rápido son diferentes de las CPU diseñadas para ahorrar energía. Cuando una CPU fuera de servicio muy rápida está inactiva a velocidades muy bajas, una CPU con mucha menos fuga (menos transistores) podría hacer el mismo trabajo. Por ejemplo, podría usar una memoria caché más pequeña (menos transistores) o una microarquitectura más simple como eliminar la ejecución fuera de servicio . big.LITTLE es una forma de optimizar para ambos casos: potencia y velocidad, en el mismo sistema.
En la práctica, un sistema big.LITTLE puede ser sorprendentemente inflexible. Uno de los problemas es la cantidad y los tipos de dominios de energía y reloj que proporciona el CI. Es posible que estos no coincidan con las funciones de administración de energía estándar que ofrece un sistema operativo. Otro es que las CPU ya no tienen capacidades equivalentes y resulta más difícil hacer coincidir la tarea de software adecuada con la CPU adecuada. La mayoría de estos problemas se están resolviendo haciendo que la electrónica y el software sean más flexibles.
Hay tres formas [6] de organizar los diferentes núcleos del procesador en un diseño big.LITTLE, dependiendo del programador implementado en el núcleo . [7]
El enfoque del modelo agrupado es la primera y más simple implementación, organizando el procesador en grupos de tamaño idéntico de núcleos "grandes" o "PEQUEÑOS". El programador del sistema operativo solo puede ver un grupo a la vez; cuando la carga en todo el procesador cambia entre baja y alta, el sistema pasa al otro grupo. Todos los datos relevantes pasan entonces a través de la caché L2 común , el grupo de núcleos activo se apaga y el otro se activa. Se utiliza una interconexión coherente de caché (CCI). Este modelo se ha implementado en el Samsung Exynos 5 Octa (5410). [8]
La migración de CPU a través del conmutador en el núcleo (IKS) implica emparejar un núcleo "grande" con un núcleo "pequeño", posiblemente con muchos pares idénticos en un chip. Cada par funciona como un núcleo virtual , y solo un núcleo real está (completamente) encendido y funcionando a la vez. El núcleo "grande" se utiliza cuando la demanda es alta y el núcleo "pequeño" se emplea cuando la demanda es baja. Cuando la demanda en el núcleo virtual cambia (entre alta y baja), el núcleo entrante se enciende, el estado de ejecución se transfiere , el saliente se apaga y el procesamiento continúa en el nuevo núcleo. La conmutación se realiza a través del marco cpufreq . Se agregó una implementación completa de IKS big.LITTLE en Linux 3.11. big.LITTLE IKS es una mejora de la migración de clústeres (§ Conmutación en clústeres), la principal diferencia es que cada par es visible para el programador.
Una disposición más compleja implica una agrupación no simétrica de núcleos "grandes" y "pequeños". Un solo chip podría tener uno o dos núcleos "grandes" y muchos más núcleos "pequeños", o viceversa. Nvidia creó algo similar a esto con el "núcleo complementario" de bajo consumo en su sistema en chip Tegra 3 .
El modelo de uso más potente de la arquitectura big.LITTLE es el multiprocesamiento heterogéneo (HMP), que permite el uso de todos los núcleos físicos al mismo tiempo. Los hilos con alta prioridad o intensidad computacional pueden en este caso asignarse a los núcleos "grandes", mientras que los hilos con menor prioridad o menor intensidad computacional, como las tareas en segundo plano, pueden ser ejecutados por los núcleos "pequeños". [9]
Este modelo se ha implementado en los procesadores Samsung Exynos a partir de la serie Exynos 5 Octa (5420, 5422, 5430), [10] [11] y la serie A de Apple a partir del Apple A11 . [12]
La disposición en pares permite que la conmutación se realice de forma transparente para el sistema operativo utilizando la función de escalado dinámico de voltaje y frecuencia (DVFS) existente. El soporte DVFS existente en el núcleo (por ejemplo , en Linux) simplemente verá una lista de frecuencias/voltajes y cambiará entre ellos como lo considere conveniente, tal como lo hace en el hardware existente. Sin embargo, las ranuras de gama baja activarán el núcleo "Pequeño" y las ranuras de gama alta activarán el núcleo "Grande". Esta es la solución inicial proporcionada por el programador de CPU de "fecha límite" de Linux (que no debe confundirse con el programador de E/S con el mismo nombre) desde 2012. [13]cpufreq
Como alternativa, todos los núcleos pueden exponerse al planificador del núcleo , que decidirá dónde se ejecuta cada proceso/hilo. Esto será necesario para la disposición no emparejada, pero posiblemente también se podría utilizar en los núcleos emparejados. Esto plantea problemas únicos para el planificador del núcleo, que, al menos con el hardware comercial moderno, ha podido asumir que todos los núcleos en un sistema SMP son iguales en lugar de heterogéneos. Una adición de 2019 a Linux 5.0 llamada Energy Aware Scheduling es un ejemplo de un planificador que considera los núcleos de manera diferente. [14] [15]
En mayo de 2017, ARM anunció DynamIQ como el sucesor de big.LITTLE. [16] Se espera que DynamIQ permita una mayor flexibilidad y escalabilidad al diseñar procesadores multinúcleo. A diferencia de big.LITTLE, aumenta la cantidad máxima de núcleos en un clúster a 8 para CPU Armv8.2, 12 para Armv9 y 14 para Armv9.2 [17] y permite variar los diseños de núcleos dentro de un solo clúster y hasta 32 clústeres en total. La tecnología también ofrece un control de voltaje por núcleo más detallado y velocidades de caché L2 más rápidas. Sin embargo, DynamIQ es incompatible con diseños ARM anteriores y, inicialmente, solo es compatible con los núcleos de CPU Cortex-A75 y Cortex-A55 y sus sucesores.