Así es como una CPU con núcleos heterogéneos da mejor rendimiento

CPU Laboratorio

Hasta el momento la norma tanto en CPUs para PC como en APUs ha sido un diseño homogéneo en CPUs, lo cual significa el uso de un solo tipo de núcleo repetido una determinada cantidad de veces. Pero el uso de configuraciones heterogéneas con núcleos de diferente complejidad ha empezado a aparecer en PC. Os explicamos que diferencian los núcleos Big y Little en tales APUs y CPUs para PC

La llegada de CPUs y APUs en PC que hacen uso de una configuración núcleos heterogéneos y por tanto núcleos de distinta complejidad y tamaño es un hecho. ¿Pero cómo se diferencian estos núcleos heterogéneos en naturaleza y rendimiento? Esa es la pregunta que se hacen muchos cuando leen sobre las diferentes arquitecturas que están apareciendo en el mercado. ¿Por qué después de más de una década haciendo uso de un solo tipo de núcleo se ha dado el salto al uso de núcleos big y little en CPUs.

¿Por qué el uso de diferentes tipos de núcleos?

ConceptArt MultiCPU

Hay varios motivos para ello, el más conocido es el que se ha utilizado en el ya clásico big.LITTLE de las CPU para smartphones, donde dos colecciones de núcleos de diferente potencia y consumo se conmutan en su uso según el tipo de aplicaciones según la carga de trabajo en el smartphone en cada momento. Esto se hizo para aumentar la vida útil de la batería de dichos dispositivos.

A día de hoy este concepto ha evolucionado y ya es posible utilizar ambos tipos de núcleos de manera simultánea y no de forma conmutada. Por lo que el diseño combinado ya no se basa en el ahorro de energía, sino en el de conseguir el máximo rendimiento posible. Es aquí donde entramos en dos formas distintas de entender el rendimiento según cómo se utilicen los núcleos heterogéneos.

La más utilizada de ellas, por ser la más fácil de implementar, consiste en asignar los hilos de ejecución más ligeros en cuanto a carga de trabajo a los núcleos de menos potencia, una tarea que ha de llevar a cabo el sistema operativo. El cual es la pieza de software encargada de gestionar el uso de los recursos del hardware incluida la GPU. Esta forma de funcionar es la misma que tiene el Intel Lakefield y sus futuras arquitecturas como Alder Lake, así como los núcleos ARM con DynamiQ.

Sea cual sea, la organización se basa en el uso de dos núcleos con el mismo set registros e instrucciones pero con diferentes especificaciones. ¿Cuáles son las diferencias entre los diferentes núcleos heterogéneos? Veamos.

Núcleos big frente núcleos small en la actualidad

Lakefield-cores núcleos híbridos

Primero de todo entremos en la obviedad, la primera diferencia entre los dos tipos de núcleos está en el tamaño. Dado que los big cores son más complejos que los little cores estos tienen una estructura más compleja y por tanto compuesta por una mayor cantidad de transistores. Ergo son más grandes que los little cores que tienen una estructura mucho más simple. Esto se traduce en que dentro del espacio del chip podemos incluir más núcleos Little en el espacio del chip que núcleos Big.

A todo esto, lo primero que os preguntaréis es: ¿cual es la ventaja de rendimiento a la hora de aplicar los dos tipos de núcleos? Hemos de tener en cuenta que en el PC a día de hoy en nuestros PCs se ejecutan varias aplicaciones al mismo tiempo donde cada una ejecuta varios hilos de ejecución. Lo que el hecho de añadir una mayor cantidad de núcleos, aunque sea a base de hacerlo con núcleos más ligeros en potencia acaba sumando al total del rendimiento.

En realidad los núcleos más pequeños no son más que una forma más de aligerar el trabajo a los núcleos más grandes y complejos, quitándoles trabajo a realizar. No solo eso, sino que se pueden utilizar incluso núcleos adicionales para que gestionen las interrupciones más comunes de los diferentes periféricos, haciendo que el resto de núcleos no tengan que parar su funcionamiento en ningún momento con tal de atenderlas de manera continua y en cada momento.

Las arquitecturas del futuro pasan por configuraciones heterogéneas

Núcleos Big Little

El otro método es más complejo de implementar núcleos big y little difiere de la anterior, ya que consiste en dividir el set de registros e instrucciones de la ISA y repetirlo en dos clases de núcleos. El motivo es que no todas las instrucciones tienen el mismo consumo energético, pero las más simples van a consumir más siempre en los núcleos más complejos. Por lo que la idea no es repartir los hilos de ejecución a su núcleo correspondiente, sino que la ejecución de un solo hilo de ejecución es compartida entre dos o varios núcleos de manera intercalada.

Por lo que su implementación es mucho más compleja que el modelo actual, ya que los diferentes núcleos encargados de un mismo hilo de ejecución han de tener el hardware necesario para coordinarse a la hora de ejecutar el código de los programas. La ventaja de este paradigma es que en principio no requiere el trabajo del sistema operativo para gestionar los diferentes hilos de ejecución que ha de ejecutar la CPU. Pero, en este caso como ya hemos comentado la división de los tipos de núcleo heterogéneos depende de cómo se distribuya el set de instrucciones entre ambos núcleos.

Ley Amdahl

El funcionamiento de este método tiene que ver con la llamada Ley de Amdahl y la forma en la que escalan los programas en cuanto a rendimiento. Por un lado tenemos partes secuenciales que no se pueden repartir entre varios núcleos al no poderse ejecutar en paralelo y por otro partes que sí que pueden hacerlo. En el primer caso la potencia no dependerá del número de núcleos sino de la potencia de cada núcleo, mientras que en el segundo dependerá de cada núcleo.

Tradicionalmente las instrucciones más complejas en una CPU se implementan a partir de una sucesión de instrucciones más sencillas con tal de aprovechar el hardware mucho mejor. Pero los nuevos nodos de fabricación permitirán que instrucciones más complejas puedan ser cableadas en los núcleos más complejos de manera directa, en vez de ser un compuesto de varios núcleos. Lo que también servirá para aumentar el rendimiento general de los programas, ya que a la hora de ejecutar dichas instrucciones tardarán mucho menos ciclos de reloj al ejecutarse.

Fuente: HardZone