Si habéis seguido el mundo de los microprocesadores desde hace ya bastante tiempo lo más seguro es que os suenen las siglas RISC y CISC, las cuales no son otra cosa que una definición de la estructura del conjunto de instrucciones que maneja un procesador. Pues bien, en los últimos años ha aparecido un nuevo paradigma al que se ha bautizado como VISC. ¿En qué consiste?
La mayoría de procesadores que hay en el mercado se han vuelto aburridos, ya que aportan poco encima de la mesa. Se basan en mejorar el rendimiento ajustando pequeñas partes para que el conjunto funcione mejor que antes, pero en los últimos años no ha habido una revolución como la que hubo con la ejecución fuera de orden a mediados de los 90, no obstante esto podría cambiar gracias a las arquitecturas VISC, las cuales suponen un nuevo paradigma.
¿Es VISC un conjunto de instrucciones?
Lo primero que nos puede venir a la mente al leer estas siglas y por su parecido son las palabras RISC y CISC, los cuales hacen referencia a la naturaleza del conjunto de registros e instrucciones del procesador, lo cual no es el tema de este artículo, ya que bajo el concepto VISC no nos referimos a nueva forma de categorizar las instrucciones, sino de algo totalmente diferente.
Para entender cómo funciona el paradigma VISC hemos de tener en cuenta dos conceptos distintos de cara al rendimiento en las CPU. El primero de ellos es el hecho que las CPU de PC a día de hoy tienen un set de instrucciones interno aún más reducido que los RISC, ya que lo que hacen es trasladar cada una de las instrucciones en microinstrucciones más pequeñas a nivel interno durante la fase de descodificación. Si somos puristas la conclusión a día de hoy todos los procesadores no es que sean RISC, sino que tienen un conjunto de instrucciones muy reducido que funciona de manera interna y que sirve para construir el resto de instrucciones. Es decir, tan pronto como llega una instrucción a la unidad de control del CPU esta se desglosa en una lista de instrucciones.
Por lo que la guerra entre RISC y CISC la gano el primero, pero con la trampa de que x86, la arquitectura CISC más utilizada, hizo la trampa de comportarse internamente como un RISC. A día de hoy excepto ARM el resto de las ISA RISC están desaparecidas o al borde de la desaparición. Es más, incluso ARM ha adoptado al concepto de dividir las instrucciones en otras más sencillas, por lo que ambos paradigmas fuera de definir la ISA común de una familia ya están extintos.
La Ley de Amdahl
Para entender un programa hemos de entender que un programa tiene dos partes diferenciadas:
- Aquella que solo se puede ejecutar en serie y, por tanto, solo puede ser solucionada por un solo núcleo ejecutando un núcleo de ejecución en solitario.
- Aquella parte del código que se puede ejecutar en paralelo, lo que significa que puede ser solventada por varios núcleos al mismo tiempo y cuantos más de ellos existan en el procesador más rápida se solucionará esta parte.
Si tenemos en cuenta lo explicado en la sección anterior entonces concluiréis que algunas de las instrucciones del procesador que se convierten en microcódigo lo que hacen es convertirse en una sucesión de instrucciones que bien pueden funcionar en serie o en paralelo entre varios núcleos, aunque lo habitual es que la mayoría de instrucciones se ejecuten en un únicamente núcleo y que sea por elementos compartidos que el código se ejecuta en paralelo.
Por lo que el hecho que de una parte del código sea ejecutada por varios núcleos depende en exclusiva del desarrollador del programa, quien lo ha de programar explícitamente para que ciertas partes funcionen en paralelo.
VISC y núcleos virtuales
Una vez que ya hemos explicado todo lo anterior entonces podemos explicar lo que significan las siglas VISC, cuya definición es la respuesta directa a la siguiente pregunta: ¿A la hora de generar las microinstrucciones en la etapa de descodificación no se puede hacer que estas funcionen en paralelo con varios núcleos en vez de hacerlo en un único ídem?
Pues bien, la respuesta a la pregunta la arquitectura VISC, la cual fue planteada por primera vez por una empresa llamada Soft Machines en 2015 como concepto para mejorar el rendimiento de las CPU. Esta pequeña empresa emergente fue comprada por Intel en 2016 y desde entonces han estado trabajando en el desarrollo de una arquitectura VISC. ¿Cómo funciona? Pues se puede definir muy fácilmente: se envía un solo hilo de ejecución al Front End Global del procesador, el cual es convertido en varios que realizan la misma función y que trabajan en paralelo y se ejecutan en núcleos virtuales. El proceso de conversión se ejecuta a nivel de software a través de una capa de traducción, pero hemos de tener en cuenta que esto puede ser algo tan simple como un microcontrolador efectuando el traslado de las instrucciones.
Al contrario de lo que ocurre en la distribución de tareas en un procesador multinúcleo convencional, en una arquitectura VISC no se busca que un núcleo este libre para poder ejecutar una instrucción, sino que los elementos para ejecutarla estén disponibles dentro del procesador para ejecutarla. Por ejemplo puede ocurrir que en un núcleo convencional la unidad vectorial no se esté utilizando, pero bajo este paradigma se pueda utilizar para formar una de las instrucciones.
VISC y rendimiento
A la hora de adoptar un nuevo paradigma en cuanto a arquitectura lo primero es tener en cuenta cómo afecta al rendimiento, ya que no merece la pena cambiar el paradigma actual si no da como resultado un aumento del rendimiento en conjunto del procesador. La forma más clásica de incrementar el rendimiento de un procesador es aumentar la cantidad de instrucciones que se solucionan por ciclo de reloj, esto supone ir haciendo cada vez un hardware cada vez más complejo, por el hecho que al añadido de los núcleos hemos de contar toda la infraestructura que los rodea que se hace igual o más compleja.
Lo que diferencia a VISC del resto, no es otro que la distribución de recursos del procesador para la ejecución de las diferentes instrucciones se realiza en pocos ciclos de reloj, entre 1 y 4 núcleos. De esta manera si en un núcleo hay dos instrucciones compitiendo por otros recursos entonces se pueden reasignar muy rápidamente a otra parte del procesador donde esos mismos recursos sí que están disponibles.
El actual paradigma que es la ejecución fuera de orden lo que hace es reordenar la ejecución de las instrucciones según los recursos libres en cada momento para luego reordenar la salida de datos ya procesados. ¿La limitación? La asignación de recursos se ejecuta al nivel de un solo núcleo y no de varios y ahí radica la clave del mayor rendimiento de las arquitecturas VISC.
¿Existen estos procesadores en la actualidad?
Aunque el concepto es muy bueno encima del papel, nadie ha presentado todavía un procesador que funcione bajo dicho paradigma, pero dado que nos acercamos poco a poco a los límites del paradigma actual es importante tener en cuenta que existen soluciones que pueden servir para mejorar el rendimiento de la CPU de nuestros PC de cara al futuro.
Tener un procesador más potente no es únicamente tener uno más rápido o con más núcleos, sino que se basa en saber aprovechar los recursos disponibles. La ejecución fuera de orden fue el primer paso en ese sentido, no obstante desde entonces fuera de pasar al multinúcleo los cambios han sido en general menores. VISC sigue siendo un concepto, no obstante no es uno imposible y es una forma de aprovechar de manera mucho más eficiente los recursos disponibles en el procesador.
Hasta el momento sabemos que el concepto es posible en una CPU desde que Soft Machines diseño y construyo una con este paradigma, por lo que aunque fue a nivel experimental sabemos que es posible llevar a cabo un diseño así. Otra cosa distinta es la dificultad de llevar todo el set de instrucciones y registros x86 a dicho paradigma, el cual es extremadamente complejo por su naturaleza.