Está en la página 1de 3

¿Cómo funciona un procesador VLIW?

En un procesador superescalar o ILP convencional las instrucciones son captadas y


tratadas individualmente durante el ciclo de instrucción de cada una. Ya sea si
estamos hablando de una ejecución in-order o de una out-of-order. En el caso de un
procesador VLIW lo que se hace es agrupar varias instrucciones en una sola y
enviarlas en conjunto a las diferentes unidades que hay disponibles en el
procesador.

Para conseguir esto los procesadores VLIW dependen enormemente del compilador


a la hora de generar el código binario, el cual agrupará las diferentes instrucciones
en una sola instrucción, siempre teniendo en cuenta el nivel de ocupación de cada
una de las unidades de ejecución en cada momento de la ejecución, lo cual
dependerá de la cantidad de ciclos de reloj que requiere cada una de las
instrucciones.

Dado que las instrucciones pueden tener diferentes grados de duración en cuanto a
ciclos de reloj esto supone un problema de rendimiento, ya que durante varios ciclos
de reloj tendremos unidades de ejecución que no harán nada y que estarán
ejecutando una instrucción NOP, lo cual significa que durante ese ciclo de reloj dicha
unidad no realiza ninguna operación. Esto hace que los procesadores VLIW
dependan enormemente del compilador para su máxima eficiencia.
Características :

 Los procesadores de esta arquitectura tienen varias unidades


funcionales, extraídas de la caché de instrucciones que tienen
la palabra de instrucción muy larga.
 Varias operaciones independientes se agrupan en una sola
instrucción VLIW. Se inicializan en el mismo ciclo de reloj.
 A cada operación se le asigna una unidad funcional
independiente.
 Todas las unidades funcionales comparten un archivo de
registro común.
 Las palabras de instrucción suelen tener una longitud de 64-
1024 bits, según el número de unidades de ejecución y la
longitud de código necesaria para controlar cada unidad.
 El compilador realiza estáticamente la programación de
instrucciones y el envío paralelo de la palabra.
 El compilador comprueba las dependencias antes de
programar la ejecución paralela de las instrucciones.
Planificación
Por ejemplo, supongamos el siguiente programa para una máquina superescalar
"normal":

1 Multiplicar R1 por R2 y guardarlo en R3


2 Sumar R3 con R4 y guardarlo en R5
3 Restar R1 de R4 y guardarlo en R6

En este programa, el planificador de código vería que la segunda instrucción


depende de la primera (hasta que no esté calculado R3 no se puede ejecutar la
suma), y que en cambio la tercera instrucción es independiente de las otras dos.
Por tanto, probablemente iniciaría simultáneamente la multiplicación y la resta en
unidades diferentes y, una vez acabada la multiplicación, ejecutaría la suma. Todo
este trabajo de planificación lo llevaría a cabo la circuitería interna del
microprocesador.
En una máquina VLIW, toda la planificación anterior la haría el compilador (o el
propio programador si programa en ensamblador), y el código resultante sería algo
así:

1 MULT(R1,R2,R3) - REST(R1,R4,R6)
2 - SUM(R3,R4,R5) -

Se puede ver como en cada instrucción se especifica el estado de cada unidad


funcional, de modo que en la primera instrucción se activan el multiplicador y el
restador, dejando el sumador ocioso al no poder calcular aún la suma, y en la
siguiente instrucción se hace la suma que faltaba.

También podría gustarte