El aumento del IPC o Instrucciones por Ciclo, es uno de los desafios para cualquier fabricante de CPUs a la hora de diseñar arquitecturas cada vez más potentes. En este artículo os vamos a comentar cual es la última técnica que están utilizando los ingenieros que trabajan desarrollando las CPUs más punteras para aumentar el IPC y con ello el rendimiento de los procesadores.
En la historia de las arquitecturas de procesadores, hemos podido ver como se han ido implementando diferentes conceptos para aumentar el rendimiento de las mismas. Planteamientos como la segmentación, los procesadores super-escalares, la ejecución fuera de orden, etc. Todos ellos han servido para tener procesadores cada vez más rápidos y con un mayor rendimiento por ciclo de reloj.
El concepto de los núcleos híbridos es un paso más en conseguir un mayor rendimiento, se basa en la combinación en un solo núcleo de dos tipos de núcleos, uno optimizado para instrucciones complejas y otro para instrucciones más simples, pero de tal manera que comparten hardware en común y funcionan de manera conjunta como si se tratase de un solo núcleo de la CPU.
El concepto de los núcleos híbridos para el aumento del IPC
En una CPU no todas las instrucciones son igual de complejas, algunas de ellas requieren una mayor cantidad de ciclos de reloj para ser completadas, otras en cambio requieren muy pocos ciclos de reloj para completarse por ser mucho más simples. En el diseño de nuevos procesadores la tendencia hasta el momento era optimizar las instrucciones más complejas en lo que al número de ciclos se refiere.
Pero independientemente de cual sea el tipo de instrucción que ejecutan los núcleos de nuestra CPU, todas ellas hacen uso de los mismos componentes durante el ciclo de instrucción, lo que lleva a que a nivel de consumo energético no se puedan optimizar las instrucciones más simples, las cuales no tendrían un rendimiento más bajo en una CPU binariamente compatible, pero de menor consumo.
La idea se reduce en que una CPU tenga dos tipos de unidades de ejecución, unas optimizados para ejecutar las instrucciones más complejas y otro para las más simples, esto permite optimizar el consumo de las diferentes instrucciones.
Una idea venida del mundo de las GPUs
En las GPUs tenemos dos tipos de ALUs distintas, por un lado tenemos las unidades SIMD, como los núcleos CUDA, que los fabricantes suelen promocionar para hablar de la tasa de TFLOPS, dichas unidades se encargan de la etapa de ejecución de instrucciones sumamente simples, pero, por el otro lado tenemos a las SFU que son ALUs de menor cadencia de cálculo, ya que están optimizadas para instrucciones más complejas
Pues bien, las SFU consumirían mucha más energía a la hora de ejecutar una instrucción simple que las unidades SIMD, de ahí la separación que se hizo hace años en las GPUs tanto de NVIDIA como de AMD. Cuando la unidad de control o planificador de la C0mpute Unit detecta una instrucción que pueden ejecutar las SFU simplemente copia esa línea de instrucción y la envía directamente a una de las SFU que este libre para su ejecución
Implementación núcleos híbridos para aumentar el IPC
El concepto en una CPU no es distinto, la fase de captación de las instrucciones sería casi la misma en ambos procesadores, por lo que ambos compartirían el Contador de Programa que apunta a la siguiente instrucción, sería al final de la fase de captación donde la lectura del registro de instrucción donde la instrucción sería enviada a un tipo de núcleo u otro para su ejecución.
Esto significa que realmente ambos núcleos serían como hermanos siameses que comparen parte del hardware al compartir una de las etapas del ciclo de instrucción, pero dado que se descodificarían y ejecutarían las instrucciones en la parte separada de ambos núcleos no solamente se aumenta el IPC en el sentido de cantidad de instrucciones simultáneas por ciclo de reloj, sino también se evita que ciertas instrucciones entren en conflicto en el uso de recursos.
Otra de la cosas que permite hacer este cambio tiene que ver con la gestión de instrucciones que le llegan al procesador, las cuales son peticiones realizadas por los periféricos que paran en seco la ejecución del código. Se puede hacer que el núcleo optimizado para instrucciones simples se encargue de manejarlas, sin que el otro se tenga que parar.
Sus efectos sobre el pipeline de la CPU
Hemos de entender que hoy en día todos los procesadores están segmentados en varias etapas, de tal manera que si tenemos la instrucción «n» en una etapa concreta, entonces la instrucción n+1 estará en la etapa anterior y la n-1 en la siguiente.
La inversa del tiempo es siempre la frecuencia (1/tiempo=frecuencia), por lo que el truco para aumentar la velocidad de reloj es hacer que cada una de las etapas dure menos, así que habitualmente lo que se hace es aumentar la cantidad de etapas, con el objetivo de que cada nueva etapa dure menos y la frecuencia o ciclos de reloj sea más alta.
Obviamente subdividir una instrucción compleja en un mayor número de ciclos de instrucción es algo que es ideal para alcanzar altas velocidades de reloj. ¿Pero que ocurre con las mismas simples? Para los arquitectos es un dolor de cabeza dividir aún más las instrucciones más simples de lo que ya están actualmente.
Las diferencias de los núcleos híbridos con big.LITTLE
En un procesador big.LITTLE los núcleos «big» están separados de los núcleos «LITTLE» en el sentido que funcionan de forma conmutada los unos respecto a los otros, por lo que es la aplicación la que le hace una petición al sistema operativo para que se encienda un grupo de núcleos u otro.
El funcionamiento para ese tipo de núcleos es que cuando reciben una interrupción en concreto entonces terminan la actual y ceden el testigo al otro tipo. Esto ocurre cuando la carga de trabajo sobre el sistema es muy alta o se cumplen ciertas condiciones. En todo caso hay que tener en cuenta que el planteamiento big.LITTLE cada conjunto de núcleos están completos y son totalmente independientes.
En el concepto de las ALUs híbridas, no tenemos núcleos totalmente separados sino que estos comparten la fase de captación así como el acceso tanto a la jerarquía de caches como a la memoria. Además uno no se desactiva cuando el otro esta funcionando precisamente porque comparten el hardware para el acceso a la memoria y no podemos olvidar tampoco que big.LITTLE no aumenta el IPC de los núcleos.
¿Por qué los núcleos híbridos aumentan el IPC de las CPUs?
El motivo es simple, el hecho de tener una mayor cantidad de unidades de ejecución, así como que el hardware de la etapa de descodificación no este compartido es lo que hace que no haya lo que se llama contención, esto ocurre cuando dos o más instrucciones se pelean por recurso único, de tal manera que una tiene que esperar a que termine la otra.
¿Por qué no se diseñan procesadores sin ese problema? Diseñar se pueden diseñar, pero el presupuesto en transistores es limitado y por eso los arquitectos hacen trampas poniendo puntos comunes en el camino. Muchas de las actualizaciones menores de una arquitectura se suelen basar en evitar ese tipo de contenciones añadiendo más caminos internos para que no haya dicha contención.
El IPC como término de marketing ya no es la cantidad de instrucciones simultaneas que el núcleo de una CPU puede solventar simultáneamente en la mejor de las condiciones, el término ahora se basa en coger un benchmark y mirar la media de las instrucciones por ciclo que saca el procesador. De ahí que evitar las contenciones entre instrucciones sea tan importante y es por ello que los núcleos híbridos con las etapas de descodificación y ejecución separadas por tipo de núcleo son ideales para el aumento del IPC.
¿Qué CPU actual utiliza núcleos híbridos para aumentar el IPC?
La respuesta directa es un rotundo NO, ninguno de los procesadores que actualmente hay en el mercado o que van a salir a corto plazo van a utilizar núcleos híbridos, sino que se van a basar más en el concepto big.LITTLE en el que los núcleos utilizados serán unos u otros según la situación, lo cual se va a dar especialmente en la Gen 12 de Intel que saldrá en unos meses.
La que si que sabemos, a través de pistas en diferentes patentes publicadas en el último año, que va a optar por un planteamiento de núcleo híbrido es AMD, no sabemos si de cara a Zen 4 o a Zen 5. Lo cual no significa que Intel e incluso otros diseñadores de CPUs como Apple no estén implementando ya estas soluciones.
¿La causa de ello? El aumento del IPC no se puede hacer eternamente y cada vez es más complejo de realizar, de ahí a que sea necesario el uso de técnicas como los núcleos híbridos para aumentarlo.