Anda di halaman 1dari 0

Hasta ahora hemos visto que los procesadores en pipeline ejecutan varias instrucciones

simultneamente, pero manteniendo el mismo orden del programa, es decir, dadas dos
instrucciones i y j, de un programa, cuyo orden lgico es primero i y despus j; al ejecutarlo en el
pipeline, primero se arranca i, y despus se arranca j.
Tambin hemos visto que algunas unidades funcionales pueden requerir mltiples ciclos para su
etapa de ejecucin (operaciones multiciclo), dando lugar a que las instrucciones puedan terminar
fuera de orden. No obstante, la emisin de las instrucciones siempre se ha hecho en orden.
Para aliviar el problema de las paradas que pueden producirse por ciertos riesgos de datos, en
este captulo vamos a abordar la ejecucin de instrucciones fuera de orden, conocida como
planificacin dinmica de instrucciones, segn la cual, las instrucciones pueden arrancarse
fuera del orden del programa.
Veremos cmo se lleva a cabo la planificacin dinmica mediante dos tcnicas: el Algoritmo del
Marcador (scoreboard) y su evolucin, el Algoritmo de Tomasulo.
Planificacin Dinmica - 1 Arquitectura de Computadores
Como hemos visto hasta hora, para que un procesador pueda ejecutar varias instrucciones
simultneamente, tiene que tener una arquitectura segmentada (en pipeline), disponer de
mltiples unidades funcionales, o ambas cosas. Nosotros trataremos con procesadores
segmentados y con varias unidades funcionales.
Veamos el fragmento de cdigo de arriba. La instruccin SUB no puede arrancar su ejecucin
puesto que la dependencia que tiene la instruccin ADD respecto a DIV causa la parada del
cauce, aunque SUB no tiene ninguna dependencia de datos de ninguna instruccin en el cauce.
Cuando no hay mltiples unidades funcionales, la instruccin SUB no tiene ms remedio que
esperar. Por otra parte, si tenemos mltiples unidades funcionales (para sumas, divisiones, etc.),
la parada del cauce puede hacer que algunas de las unidades funcionales queden ociosas,
cuando hay instrucciones que s podran ejecutarse en ellas, pero que el orden de ejecucin lo
impide.
Esta limitacin a una ejecucin eficiente puede eliminarse si no se requiere la ejecucin en orden.
Obviamente, no se puede alterar alegremente el orden de ejecucin de cualquier grupo de
instrucciones del programa, pero anteriormente ya hemos visto situaciones (saltos retardados) en
las que s se puede modificar el orden de ejecucin de algunas instrucciones sin modificar la
semntica del programa.
Planificacin Dinmica - 2 Arquitectura de Computadores
Para permitir la ejecucin fuera de orden vamos a tener que modificar nuestro cauce clsico.
Para empezar, la etapa F (Fetch) se encargar, como ya sabemos, de ir extrayendo
instrucciones, pero en lugar de entregrselas directamente a la siguiente etapa, las dejar en un
buffer o cola de instrucciones.
La etapa D se ocupaba de la decodificacin de la instruccin, comprobacin de riesgos
estructurales y de datos, y alimentacin de operandos. Ahora la vamos a descomponer en dos
etapas consecutivas:
Emisin: Toma una instruccin del buffer de instrucciones, la decodifica y se comprueban los
riesgos estructurales.
Lectura de operandos: Se espera hasta que no haya riesgos de datos y, a continuacin, se
leen los operandos. La instruccin queda lista para pasar a la unidad funcional que le
corresponda.
En este nuevo pipeline, todas las instrucciones entran en orden en la etapa de Emisin, pero una
instruccin puede detenerse en esta etapa si hay riesgos estructurales, o puede adelantar a otra
instruccin parada en Emisin, y pasar a la etapa de Lectura de Operandos, por lo que entrara
en la etapa de Ejecucin fuera de orden!.
Planificacin Dinmica - 3 Arquitectura de Computadores
Los procesadores con planificacin dinmica presentan estas ventajas:
Permite la gestin de ciertos casos en los que no es fcil conocer las dependencias en tiempo
de compilacin, como, por ejemplo, cuando se hace referencia a datos que no estn en
registros, sino en direcciones de memoria, lo cual, adems, simplifica el diseo del compilador.
Aprovechan los retardos imprevistos, como los debidos a los fallos de cach (el dato no est
en la cach y hay que ir a buscarlo a memoria principal), ejecutando otras instrucciones
mientras espera el dato de la memoria.
Dado que distintos procesadores de la misma familia pueden compartir la arquitectura, pero
tambin pueden ofrecer distintas configuraciones de su cauce, es decir, ms o menos
unidades funcionales o estaciones de reserva. Con la planificacin dinmica se permite
aprovechar eficientemente las caractersticas del pipeline concreto sobre el que se ejecuta el
programa compilado para una arquitectura genrica (sin especificar las peculiaridades de cada
procesador de la familia).

Por el contrario, tambin tienen ciertos inconvenientes:
Para ofrecer todas las ventajas anteriores, hay que complicar notablemente el hadrware,
hacindolo ms caro.
La planificacin dinmica trae consigo la ejecucin fuera de orden, lo que tambin implica
terminacin fuera de orden, y esto significa la aparicin de riesgos de datos de tipo WAR y
WAW.
Complica mucho el tratamiento de los riesgos de control, en especial, el tratamiento de las
interrupciones.

Planificacin Dinmica - 4 Arquitectura de Computadores
Vamos a ver aqu dos tcnicas para la implementacin de la planificacin dinmica.
Comenzaremos con el llamado Mtodo del Marcador y, posteriormente, un refinamiento de
ste, denominado Algoritmo de Tomasulo.

Planificacin Dinmica - 5 Arquitectura de Computadores
El mtodo del marcador fue implementado antiguamente por el supercomputador CDC 6600 con
el nombre de Scoreboard, cuyo objetivo era obtener el rendimiento ptimo de una instruccin por
ciclo, por lo que simplemente intenta ejecutar una instruccin lo antes posible (siempre que no
hubiera riesgos estructurales). As, cuando la siguiente instruccin para ejecutar est detenida,
otras instrucciones pueden ser emitidas y ejecutadas si no dependen de ninguna instruccin
activa o detenida.
El mdulo denominado Marcador se encarga de controlar la emisin, la ejecucin de las
instrucciones y la deteccin de riesgos.
Para conseguir la ejecucin fuera de orden se requiere que mltiples instrucciones estn en su
etapa de Ejecucin simultneamente, para lo cual se necesitan mltiples unidades funcionales,
unidades funcionales segmentadas, o ambas cosas. Nosotros supondremos que disponemos de
dos multiplicadores, dos sumadores, una unidad de divisin y una unidad de aritmtica entera
(para referencias a memoria, bifurcaciones y operaciones con enteros).
Todas las instrucciones pasan por el Marcador, donde se construye un registro con las
dependencias de datos y se comprueba si se pueden leer los operandos y arrancar la ejecucin.
Si no se puede arrancar la ejecucin, el Marcador se queda comprobando cada cambio en el
cauce hasta que se pueda arrancar la ejecucin. Para evitar riesgos de tipo WAR y WAW, el
Marcador tambin controla cundo una instruccin puede escribir su resultado.
Planificacin Dinmica - 6 Arquitectura de Computadores
El mtodo del Marcador se sirve de un pipeline de 4 etapas ms unas estructuras de datos en las
que se registran las dependencias de datos que hay entre las instrucciones que han entrado en el
cauce.
Cada instruccin debe pasar por cuatro etapas (aqu no vamos a considerar la etapa de acceso a
memoria).
Las cuatro etapas que veremos a continuacin en detalle son:
Emisin
Lectura de Operandos
Ejecucin
Escritura del resultado

Planificacin Dinmica - 7 Arquitectura de Computadores
En la etapa de Emisin se comprueba que la unidad funcional que necesita la instruccin est
libre y que ninguna otra instruccin activa tiene el mismo registro de destino. Si es as, el
Marcador emite la instruccin y actualiza su estructura interna de datos.
Al comprobar que ninguna otra instruccin activa tiene el mismo registro de destino, se garantiza
que no hay riesgos WAW.
Si hay un riesgo estructural (no est disponible la unidad funcional necesaria) o riesgo de datos
WAW, se detiene la emisin de la instruccin y no se emiten ms instrucciones hasta que
desaparezcan tales riesgos! Esto quiere decir que la emisin de instrucciones se realiza en
orden.
Cuando una instruccin se detiene en esta etapa, puede dar lugar a que el buffer de
instrucciones se llene, dependiendo de si el buffer es de una nica entrada (en cuyo caso la
alimentacin de instrucciones se detiene inmediatamente), o se trata de una cola con capacidad
para mltiples instrucciones.

Planificacin Dinmica - 8 Arquitectura de Computadores
En la Lectura de Operandos el Marcador comprueba la disponibilidad de los operandos de
entrada. Un operando est disponible si no hay ninguna instruccin activa ya emitida que vaya a
escribir en l. Si alguna instruccin activa tiene que escribir en alguno de los operandos fuente de
nuestra instruccin, se espera a que esto ocurra.
Cuando los operandos estn disponibles, el Marcador le indica a la unidad funcional que lea los
operandos de los registros correspondientes y que comience la ejecucin.
En esta etapa, el Marcador resuelve los riesgos RAW dinmicamente, y las instrucciones pueden
enviarse a ejecucin fuera de orden.
Atencin! Las etapas de escritura y lectura no se solapan (dos subciclos distintos en el mismo
ciclo), por lo que se requiere un ciclo adicional para resolver los riesgos RAW.




Planificacin Dinmica - 9 Arquitectura de Computadores
La unidad funcional recibe los operandos, arranca la ejecucin.
Cuando la ejecucin ha finalizado, se le notifica al Marcador que el resultado est disponible.
Tngase en cuenta que esta etapa puede requerir mltiples ciclos de reloj para las operaciones
en coma flotante.
Planificacin Dinmica - 10 Arquitectura de Computadores
Cuando el Marcador sabe que la unidad funcional asignada a la instruccin ha finalizado la
operacin, comprueba que no haya riesgos WAR y, en caso necesario, detiene la escritura del
resultado hasta que desaparezca el riesgo.
En general, la escritura del resultado de una instruccin j no se permite cuando hay una
instruccin i que la precede que no ha ledo sus operandos y que uno de ellos est en el mismo
registro en el que se escribe el resultado de la instruccin j. Por ejemplo:
dadd R1,R2,R3
dmul R2,R7,R8
Cuando ya no hay riesgo WAR, el Marcador le indica a la etapa de Escritura que escriba el
resultado en el registro de destino.
Planificacin Dinmica - 11 Arquitectura de Computadores
El Marcador utiliza tres estructuras de datos en las que se mantienen el estado de los objetos que
controla. Las tres estructuras son:
Estado de las instrucciones
Estado de las unidades funcionales
Estado de los registros
Veamos en detalle cada una de estas estructuras.
Planificacin Dinmica - 12 Arquitectura de Computadores
La tabla de Estado de las Instrucciones indica la etapa en la que se encuentra cada una de las
instrucciones activas, es decir, que han entrado en el cauce.
Planificacin Dinmica - 13 Arquitectura de Computadores
La tabla de las Unidades Funcionales indica el estado en que se encuentran stas, utilizando
para ello nueve campos:
Busy Indica si la unidad funcional est ocupada o no.
Op Es la operacin a ejecutar en esa unidad funcional (suma, resta...).
Fi Es el registro de destino de la operacin (en el que se escribir el resultado).
Fj , Fk Son los registros que contienen los operandos (registros de entrada).
Qj , Qk Son las unidades funcionales que producirn los resultados de los registros Fj y Fk.
Rj , Rk Flags indicando si los registros de entrada Fj y Fk estn o no estn preparados. Se
ponen a NO despus de leer los operandos.
Planificacin Dinmica - 14 Arquitectura de Computadores
Esta tabla del Estado de los Registros de Resultado indica la unidad funcional que escribir en
cada registro que sea destino de alguna instruccin activa.
Si una entrada no indica ninguna unidad funcional, es que su valor est actualizado.
Planificacin Dinmica - 15 Arquitectura de Computadores
En las siguientes pginas vamos a ver cmo se iran procesando las instrucciones del fragmento
de cdigo que se muestra arriba, al ejecutar el programa sobre un procesador segmentado con
planificacin dinmica que utiliza el Mtodo del Marcador.
Planificacin Dinmica - 16 Arquitectura de Computadores
Para cada instruccin indicaremos los ciclos en que se ejecutar cada una de las etapas por las
que atraviesa el pipeline, y considerando que todas las instrucciones se van extrayendo de una
cola de instrucciones.
As, la primera instruccin, la divisin, se emite en el 1
er.
ciclo y se leen sus operandos en el 2.
Su ejecucin, que dura 20 ciclos, tiene lugar de los ciclos 3 a 22. La escritura se efecta en el
ciclo 23.
En la parte inferior del grfico se muestran las unidades funcionales y los periodos en los que
estn reservadas. En este caso, la divisin se ejecuta en su unidad funcional durante los ciclos 3
a 22, pero los riesgos estructurales se comprueban en la etapa de emisin (ciclo1), y si la unidad
funcional requerida est libre, queda reservada, liberndose cuando finaliza la operacin en ella,
que, en este caso, es al trmino del ciclo 22.
Planificacin Dinmica - 17 Arquitectura de Computadores
La segunda instruccin, la suma, se emite en el 2 ciclo.
Esta instruccin tiene una dependencia de datos de la instruccin anterior (F1), lo que supone un
riesgo de datos de tipo RAW.
As, no puede leerlo hasta que finaliza la escritura de la instruccin anterior (la divisin), por lo
que queda detenida en la etapa de Lectura de Operandos hasta que la instruccin anterior
escriba su resultado en F1, lo que tiene lugar en el ciclo 22, por lo que el registro de entrada F1
se lee en el ciclo 23.
A continuacin, se ejecuta en la unidad funcional de la suma, que lo hace en dos ciclos (24 y 25).
Por ltimo, escribe el resultado en F4, en el ciclo 26.
Planificacin Dinmica - 18 Arquitectura de Computadores
La tercera instruccin (divisin) se puede emitir en el ciclo 3, y leer sus operandos en el ciclo 4,
pues no tiene dependencias de datos.
A continuacin se ejecuta en la otra unidad funcional de divisin durante 20 ciclos (5-24).
Por ltimo, se escribe el resultado en F5 en la etapa de Escritura (ciclo 25).
Como se puede ver, esta instruccin no tiene ningn riesgo estructural ni de datos, por lo que se
puede ejecutar sin producir ninguna detencin.
Planificacin Dinmica - 19 Arquitectura de Computadores
En el ciclo siguiente (el 4) se puede emitir la siguiente instruccin (la suma de la instruccin 4),
pues al estar disponible la segunda unidad funcional de sumas, no hay riesgo estructural.
Sus operandos de entrada son F8 y F9, que no se utilizan en ninguna otra instruccin activa,
luego tampoco hay riesgos de datos RAW, por lo que se leen en el ciclo 5.
La instruccin ya puede pasar a ejecutarse en la unidad funcional de sumas durante dos ciclos (6
y 7).
En el ciclo 8, se podra proceder a escribir el resultado en el registro F3, pero la instruccin 2 est
detenida en su etapa de Lectura de Operandos, esperando para poder leer F1 (resultado de la
instruccin 1), por lo que tenemos un riesgo WAR, pues si en el ciclo 8, la instruccin 4 escribe en
F3, la instruccin 2 no leera el valor adecuado de F3 en el ciclo 23, que es cuando queda libre
del riesgo RAW por F1, y puede leer los operandos.
As, la escritura del resultado de la instruccin 4 en F3, debe detenerse hasta el ciclo 24, despus
de que la instruccin 2, haya ledo F3 en el ciclo 23.
Planificacin Dinmica - 20 Arquitectura de Computadores
Ciclo 5. Preparados para emitir la instruccin 5, una divisin, pero las dos unidades funcionales
de divisin estn todava ocupadas. Una realiza la divisin en los ciclos 3-22; la otra, en los ciclos
5-24.
La primera unidad funcional de divisin finaliza la instruccin 1 en el ciclo 22, luego la divisin de
la instruccin 5 debe esperar su emisin hasta el ciclo 23 para que desaparezca el riesgo
estructural.
En el ciclo siguiente (24), esta instruccin 5 debe leer sus operandos (F3 y F10). Observemos
que el registro F3 lo escribe como resultado la instruccin anterior, tambin el ciclo 24, sin
embargo no hay ningn riesgo RAW, ya que la escritura se produce en el 1
er.
subciclo y la lectura
tiene lugar en el 2 subciclo.
As, en el ciclo 25 puede iniciarse la ejecucin en su unidad funcional, hasta el ciclo 44.
En el ciclo 45 se escribe el resultado en F7.

Planificacin Dinmica - 21 Arquitectura de Computadores
Si en el ciclo 23 se emiti la instruccin 5, en el 24 se querra emitir la instruccin 6, pero hay un
riesgo WAW, por lo que la instruccin se detiene. Obsrvese que tanto esta instruccin como la
anterior escriben el resultado en el mismo registro, F7.
La instruccin 6 (la suma) queda detenida hasta que la instruccin 5 escribe su resultado en el
ciclo 45, por lo que la instruccin 6 se emite en el ciclo 46.
En el siguiente ciclo (47) se pueden leer sus operandos (F11 y F12), ya que no dependen de
ninguna otra instruccin.
En los ciclos 48 y 49 se ejecuta en una unidad funcional de suma, pues las dos estn libres. Y en
el ciclo 50 se escribe el resultado en F7.
Como ya habamos comentado, los riesgos WAW suelen ser fruto de una programacin extraa,
pues como puede verse, la divisin de la instruccin 5 no tiene sentido, pues su resultado no es
transmitido a ninguna otra instruccin, por lo que podra haberse eliminado esta divisin sin
modificar la semntica del programa.

En la pgina A-70 del H&P (4th. ed.) puede verse otro ejemplo del Mtodo del
Marcador en el que se muestra la evolucin del contenido de las 3 tablas de estado.
Planificacin Dinmica - 22 Arquitectura de Computadores
Robert Tomasulo invent este esquema para el IBM 360/91, en el que se permita una ejecucin
fuera de orden con el fin de conseguir un rendimiento cercano al de una instruccin por ciclo.
Este mismo enfoque tambin se ha utilizado, posteriormente, con diversos procesadores.


Planificacin Dinmica - 23 Arquitectura de Computadores
Al contrario del Mtodo del Marcador, en el que el control de la ejecucin y eliminacin de riesgos
est centralizada en el mdulo Marcador, aqu estas tareas estn distribuidas entre sus distintos
componentes.
Las instrucciones se emiten en orden desde la unidad de alimentacin/decodificacin a unas
Estaciones de Reserva (una o varias por cada unidad funcional). Aqu, y para evitar los riesgos
RAW, las instrucciones solo se envan a ejecucin cuando estn disponibles sus operandos. Los
riesgos WAR y WAW, que surgen de las dependencias de nombres, se eliminan mediante el
renombrado de registros.
Cuando las instrucciones finalizan la ejecucin en su unidad funcional, pasan a la etapa de
escritura de resultados en los registros. La escritura se realiza en orden, es decir, en el orden de
la secuencia original de instrucciones, utilizando para ello un buffer de reordenamiento.
Para explicar el algoritmo, trasladaremos los conceptos al entorno de MIPS, centrndonos en las
unidades de coma flotante y de carga/almacenamiento en memoria.
En las pginas siguientes veremos la estructura bsica y, seguidamente, las tablas de control
equivalentes a las descritas en el Mtodo del Marcador.


Planificacin Dinmica - 24 Arquitectura de Computadores
Aqu se muestra la estructura bsica de las unidades de coma flotante y de acceso a memoria de
un procesador de tipo MIPS que utiliza el Algoritmo de Tomasulo. En la artimtica de coma
flotante, se dispone de una unidad funcional para sumas/restas, y otra para multiplicaciones y
divisiones.
Las instrucciones se envan desde la unidad de Alimentacin de Instrucciones a una cola de
instrucciones desde la que se van emitiendo en orden FIFO.
Las instrucciones pueden ser de dos tipos: de aritmtica de coma flotante o de carga/
almacenamiento. As, la cola de instrucciones alimenta tanto la Unidad de Direcciones como las
unidades funcionales de coma flotante.
Se dispone de 4 registros de coma flotante a disposicin del programador. Las instrucciones de
coma flotante requieren hasta dos operandos de entrada, por lo que el banco de registros
alimenta dos operandos a los sumadores y tambin dos operandos a los multiplicadores.

Planificacin Dinmica - 25 Arquitectura de Computadores
Con el Algoritmo de Tomasulo, las instrucciones no se dirigen directamente de la cola a la unidad funcional
correspondiente, sino que se llevan a las estaciones de reserva que, a su vez, alimentan a las unidades
funcionales.
Las estaciones de reserva disponen de un buffer para varias instrucciones, donde cada entrada del buffer
tiene 3 campos: uno para el cdigo de operacin y dos ms para los dos operandos de entrada.
La idea bsica es que una estacin de reserva guarda un operando para una instruccin tan pronto como
est disponible, por lo que en su unidad funcional correspondiente no es necesario alimentar los
operandos desde los registros. Adems, cada instruccin pendiente en la estacin de reserva indica, a su
vez, la estacin de reserva que proporcionar sus datos de entrada.
Cuando sucesivas escrituras a un registro se solapan en la ejecucin, solamente la ltima escritura se
realiza realmente, evitando as los riesgos WAW.
A medida que se van emitiendo instrucciones a las estaciones de reserva, los especificadores de registro
para los operandos pendientes se renombran por los nombres de las estaciones de reserva que
proporcionan tales operandos (renombrado de registros), evitando as los riesgos WAR.
Para poder hacer este renombrado de registros, debe haber ms estaciones de reserva que registros
disponibles al programador.
Como se puede observar, la deteccin de riesgos y el control de la ejecucin estn distribuidos, pues la
informacin mantenida en las estaciones de reserva de cada unidad funcional determina cundo una
instruccin puede comenzar su ejecucin. Tambin se debe tener en cuenta que los resultados de las
operaciones se pasan directamente, por el CDB, a las unidades funcionales (a travs de su estacin de
reserva), en lugar de hacerlo a travs de los registros (equivalente al data forwarding).
Por ltimo, obsrvese que desde la cola de instrucciones, stas se emiten en orden a las estaciones de
reserva, pero una vez aqu, las instrucciones pueden pasar a ejecutarse en la unidad funcional
correspondiente fuera de orden.
Planificacin Dinmica - 26 Arquitectura de Computadores
El equivalente de las estaciones de reserva para las instrucciones de acceso a memoria (carga/
almacenamiento) son los Buffers de Carga y los Buffers de Almacenamiento.
Estos buffers mantienen las direcciones de los datos que vienen o van a la memoria y se
comportan casi exactamente igual que las estaciones de reserva.
Las entradas de los buffers de almacenamiento tienen dos campos: la direccin de memoria y el
dato a almacenar.
Los buffers de carga solamente tienen un campo: la direccin de memoria de donde se debe
traer un dato. Cuando la memoria entrega el dato, ste viaja por el CDB bien hasta un registro
principal o bien hasta una estacin de reserva que est esperando por l.
Los buffers de carga tienen tres funciones:
1. Retener los componentes de la direccin efectiva de memoria hasta que se ha calculado.
2. Llevar la cuenta de las cargas que estn esperando un dato de la memoria.
3. Mantener el resultado de la carga (el dato de memoria) hasta que el CDB est disponible.

De igual manera, los buffers de almacenamiento tambin tienen 3 funciones:
1. Retener los componentes de la direccin efectiva de memoria hasta que sta se calcula.
2. Mantener las direcciones de destino de las instrucciones de almacenamiento que estn
esperando a que el valor se almacene en memoria.
3. Retener la direccin y el valor a almacenar hasta que la unidad de memoria est disponible.
Planificacin Dinmica - 27 Arquitectura de Computadores
Todos los resultados de las unidades funcionales y de las instrucciones de carga van a parar al
Common Data Bus (CDB), que lleva los valores a varios destinos:
Por una parte, lleva el resultado de las unidades funcionales al banco de registros.
Tambin lo lleva a la entrada de las unidades funcionales que estn esperando a que se
produzca un operando de entrada.
Por ltimo, el resultado de una operacin tambin puede ir a parar a los buffers de
almacenamiento, si es que alguna instruccin de almacenamiento est esperando para
almacenar un valor tan pronto como se produzca.
Obsrvese que esta forma de llevar los resultados directamente a las unidades funcionales (a sus
estaciones de reserva) es un sistema equivalente al data forwarding visto anteriormente para
abreviar la entrega de los datos a las etapas o unidades funcionales que esperan por ellos.
Planificacin Dinmica - 28 Arquitectura de Computadores
En esta arquitectura solamente hay tres etapas, aunque cada una de ellas puede requerir un
nmero arbitrario de ciclos de reloj.
Vemoslas en detalle.
Planificacin Dinmica - 29 Arquitectura de Computadores
En esta etapa se comienza por extraer una instruccin de la cola de instrucciones, lo cual se
hace en orden FIFO, para asegurar el flujo de datos correcto.
Si hay una estacin de reserva libre (de las que le corresponden al tipo de operacin) o buffer de
carga/almacenamiento, se enva la instruccin, junto con los valores de los operandos si se
encuentran disponibles en sus registros.
Si no hay una estacin de reserva libre, se produce un riesgo estructural, y se detiene la
instruccin hasta que queda libre una estacin o buffer de carga/almacenamiento.
Si los operandos actualizados no se encuentran en los registros, se apunta cules son las
unidades funcionales que producirn los operandos.
En esta etapa, si es preciso, se realiza el renombrado de registros, eliminando as los riesgos
WAR y WAW.
Planificacin Dinmica - 30 Arquitectura de Computadores
SI algn operando no est disponible, se monitoriza el CDB mientras se espera a que se calcule.
Cuando un operando est disponible se dirige a la estacin de reserva que espera por l. Cuando
todos los operandos de la instruccin estn disponibles, la operacin se ejecuta en la unidad
funcional correspondiente.
Retrasando la ejecucin hasta que los operandos estn disponibles, se evitan los riesgos RAW.
Ntese que varias instrucciones podran quedar preparadas (todos sus operandos disponibles)
para la misma unidad funcional en el mismo ciclo de reloj. Si las instrucciones son de coma
flotante y hay varias unidades funcionales independientes libres, no hay ningn problema; pero si
solamente hay una unidad funcional disponible, sta tendra que elegir una instruccin de manera
arbitraria.
Sin embargo, si la operacin es de carga/almacenamiento, se debe ejecutar en dos pasos:
1. La direccin efectiva se calcula en cuanto el registro base est disponible. Una vez calculada,
se pone en el buffer de carga/almacenamiento.
2. Las cargas se ejecutan tan pronto como la unidad de memoria est disponible. Los
almacenamientos deben esperar hasta que el valor a ser almacenado en memoria tambin
est disponible.
Las cargas y los almacenamientos se mantienen en el orden del programa hasta el clculo de la
direccin efectiva, lo que ayuda a evitar riesgos con la memoria.
Planificacin Dinmica - 31 Arquitectura de Computadores
Cuando el resultado de una instruccin ya est disponible, se escribe en el CDB, y de ah, a los
registros generales y a las estaciones de reserva o buffers de almacenamiento que estn
esperando por dicho resultado.
Recordemos que en el caso de las instrucciones de almacenamiento, stas quedan retenidas en
los buffers de almacenamiento hasta que tanto el valor a almacenar como la direccin efectiva
estn disponibles. Cuando es as, el resultado (valor a almacenar) se escribe en cuanto la unidad
de memoria est libre.
Planificacin Dinmica - 32 Arquitectura de Computadores
Las estructuras de datos que detectan y eliminan los riesgos estn asociadas a las estaciones de
reserva, al banco de registros y a los buffers de carga y almacenamiento.
La informacin que se mantiene en estas estructuras de datos son esencialmente etiquetas o
nombres de un conjunto virtual de registros utilizado en el renombrado. En realidad, estas
etiquetas describen la estacin de reserva en la que est la instruccin que producir un
resultado necesitado como un operando de entrada en otra instruccin.
Una vez que una instruccin ha sido emitida y est esperando en una estacin de reserva por un
operando fuente, en dicha estacin, a estos operandos fuente se les referencia por el nmero de
la estacin de reserva en la que est la instruccin que producir dichos operandos. Si el nmero
de la estacin de reserva es cero, indica que el operando ya est disponible en su registro
general.
Ya que hay ms estaciones de reserva que registros reales, los riesgos WAW y WAR se eliminan
renombrando los registros de resultado con nmeros de estaciones de reserva.
Planificacin Dinmica - 33 Arquitectura de Computadores
(Supondremos que en cada estacin de reserva solamente puede haber una instruccin, es decir,
que no es un buffer de instrucciones).
Cada estacin de reserva tiene una entrada en esta tabla, en la que hay los siguientes campos
por cada entrada:
Busy Indica que esta estacin de reserva y su correspondiente unidad funcional estn
ocupadas.
Op Es la operacin a ejecutar sobre los operandos S1 y S2.
Q
j
, Q
k
Son las estaciones de reserva que producirn los respectivos operandos de entrada. El
valor cero indica que el operando est disponible en V
j
o V
k
, o no se utiliza.
V
j
, V
k
Son los valores de los dos operandos. En las operaciones de carga y almacenamiento,
V
j
contiene el registro base, y V
k
, el desplazamiento.
A Se utiliza en las instrucciones de carga y almacenamiento. Contiene el resultado del
clculo de la direccin efectiva.
Dir. efectiva = [Reg base] + desplazamiento
Planificacin Dinmica - 34 Arquitectura de Computadores
La tabla del banco de registros tiene un nico campo por cada registro:
Q
i
Es el nmero de la estacin de reserva que contiene el valor que deber almacenarse
en ese registro. Si el valor de este campo es cero, indica que no hay ninguna instruccin
activa que est calculando un resultado para guardarse en ese registro, lo que significa
que el valor del operando, si lo necesita alguna instruccin, ya est en el propio registro.
Planificacin Dinmica - 35 Arquitectura de Computadores
Esta tabla contiene una entrada por cada buffer de carga, y cada entrada tiene dos campos:
Busy Indica si el buffer est libre u ocupado.
A Contiene el resultado del clculo de la direccin efectiva.

Planificacin Dinmica - 36 Arquitectura de Computadores
Esta tabla contiene una entrada por cada buffer de almacenamiento, y cada entrada tiene los
siguientes campos:
Busy Indica si el buffer est libre u ocupado.
A Contiene el resultado del clculo de la direccin efectiva.
V
i
Es el valor a almacenar
Q
i
Es la estacin de reserva que generar el operando V
i
. Si es cero, indica que el valor ya
est en V
i
.

Planificacin Dinmica - 37 Arquitectura de Computadores
Ahora vamos a ver un ejemplo de cmo se ejecutara el fragmento de un programa en un
procesador segmentado con planificacin dinmica utilizando el Algoritmo de Tomasulo.
Al igual que hicimos con el Mtodo del Marcador (Scorebord), iremos viendo durante qu ciclos
tiene lugar cada una de las etapas por los que debe atravesar cada una de las instrucciones del
fragmento de programa arriba mostrado.
Planificacin Dinmica - 38 Arquitectura de Computadores
La primera instruccin del programa se emite en el ciclo 1 a la Estacin de Reserva 1.
Ya que no hay ningn tipo de riesgos, se enva a la unidad funcional de sumas/restas, donde se
ejecuta durante los ciclos 2 y 3.
Realizada la operacin, se escribe el resultado en el registro F1 durante el ciclo 4.
Planificacin Dinmica - 39 Arquitectura de Computadores
La instruccin 2 se emite en el segundo ciclo a la Estacin de Reserva 2 de la unidad funcional
de sumas/restas.
Ahora se producen 2 tipos de riesgo: riesgo estructural (la unidad funcional no est disponible) y
riesgo de datos de tipo RAW, pues hay una dependencia de datos entre el registro de resultado
de la instruccin 1 (F1) y un operando de entrada de la instruccin 2. Por esto, la instruccin 2
permanece en la estacin de reserva (ciclos 3 y 4) hasta que desaparecen los riesgos
mencionados.
Al final del ciclo 3, termina la ejecucin de la instruccin 1 en la unidad funcional, y en el siguiente
ciclo se escribe el resultado en F1, desapareciendo el riesgo de datos, por lo que en el ciclo 5, la
instruccin 2 puede pasar a ejecucin, durante los ciclos 5 y 6.
En el siguiente ciclo, el 7, se escribe el resultado de la suma en el registro F4.
Planificacin Dinmica - 40 Arquitectura de Computadores
La tercera instruccin, una divisin, se emite en el ciclo 3 a la Estacin de Reserva 3, de la
unidad funcional de multiplicacin y divisin.
Ya que no hay dependencias de datos y la unidad funcional est libre, pasa a ejecucin en el
ciclo 4, donde permanece hasta el ciclo 23, inclusive.
En el siguiente ciclo, el 24, se escribe el resultado de la divisin en el registro F5.
Planificacin Dinmica - 41 Arquitectura de Computadores
La instruccin 4, una suma, se emite en el ciclo 4 hacia la Estacin de Reserva 1, que es la que
est libre en la unidad funcional que le corresponde.
Ahora nos encontramos con un riesgo estructural. En el ciclo 5 podra enviarse a ejecucin, pero
la unidad funcional de sumas/restas est ocupada con la instruccin 2, que precisamente va a
ocuparla durante los ciclos 5 y 6, por lo que se debe demorar la ejecucin de la instruccin 4
hasta el ciclo 7.
Esta suma de la instruccin 4 se realiza, por tanto, durante los ciclos 7 y 8.
En el siguiente ciclo, el 9, se escribe el resultado de la suma en F3.
Planificacin Dinmica - 42 Arquitectura de Computadores
En el ciclo 5 se emite la instruccin 5 (una divisin) hacia la Estacin de Reserva 4, perteneciente
a la unidad funcional de la multiplicacin/divisin.
Ahora nos encontramos con un doble riesgo: estructural y de datos RAW. ste ltimo se debe a
la dependencia del operando de entrada (F3) de la instruccin 5, pues en dicho registro es donde
se escribe el resultado de la instruccin de suma inmediatamente anterior.
En el ciclo 9, la instruccin 4 escribe su resultado en F3, con lo que desaparece el riesgo de
datos, no obstante, tambin hay un riesgo estructural pues la unidad funcional est ocupada por
la instruccin 3 (durante los ciclos 4 a 23). As, nuestra instruccin 5 debe esperar en la estacin
de reserva a que la instruccin 3 abandone la unidad funcional al trmino el ciclo 23.
Ahora la instruccin 5 ya puede pasar a ejecucin en la unidad funcional de mult/divisin en el
ciclo 24, en la que permanece durante los 20 ciclos de reloj que requiere la operacin (hasta el
ciclo 43).
Por ltimo, en el ciclo 44 se escribe le resultado de la divisin de la instruccin 5 en el registro F7.
Planificacin Dinmica - 43 Arquitectura de Computadores
En el ciclo 6 se emite la instruccin 6 hacia la Estacin de Reserva 2, pues la Estacin 1 est
ocupada con la suma de la instruccin 4, que est detenida en la Estacin 1 por un riesgo
estructural.
Esta instruccin 6 tambin tiene un riesgo estructural, pues la unidad funcional de sumas/restas
est ocupada con la suma de la instruccin 4. Por esto, la instruccin 6 debe permanecer en la
estacin de reserva hasta que finaliza la ejecucin de la instruccin 4, lo que tiene lugar al
trmino del ciclo 8.
En el ciclo 9, la instruccin 6 puede pasar a ejecutarse durante los ciclos 9 y 10.
En el ciclo 11 escribe el resultado de la suma en F7.
Planificacin Dinmica - 44 Arquitectura de Computadores
Pero la instruccin 5 tambin debe escribir su resultado en F7, y puesto que su ejecucin
terminar en el ciclo 43, lo escribir en el ciclo 44, despus de la escritura que hace la instruccin
6 en el mismo registro!
Luego parece que estamos en presencia de un riesgo WAW, pues el valor final de F7 no ser el
escrito por la instruccin 6!
En realidad no hay riesgo WAW, puesto que segn el Algoritmo de Tomasulo, cuando sucesivas
escrituras a un registro se solapan en la ejecucin, solamente la ltima escritura se realiza
realmente, evitando as los riesgos WAW.

Planificacin Dinmica - 45 Arquitectura de Computadores
Vamos ahora con la instruccin 7, que se emite en el ciclo 7 hacia la Estacin de Reserva 1. (La
ER 2 est ocupada con la instruccin 6 durante los ciclos 6 a 8.
Nos encontramos de nuevo con un riesgo RAW, pues esta instruccin 7 tiene un operando de
entrada (F7) que es el resultado de la instruccin anterior.
La instruccin 6 escribe su resultado en F7 en el ciclo 11, por lo que la ejecucin de la instruccin
7 queda detenida en la estacin de reserva hasta el ciclo 12, ejecutndose durante los ciclos 12 y
13.
El resultado de la instruccin 7 se escribe en F13 en el ciclo 14.
Planificacin Dinmica - 46 Arquitectura de Computadores
Llegamos a la ltima instruccin de nuestro programa, la resta de la instruccin 8, que no se
puede emitir en el ciclo 8 por un riesgo estructural, ya que estn ocupadas las dos estaciones de
reserva de la unidad funcional de sumas/restas.
En el ciclo 8, que es cuando se querra emitir la instruccin 8, la ER 2 est ocupada con la suma
de la instruccin 6 (ciclos 6 a 8, inclusive). La ER 1 est ocupada por la resta de la instruccin 7,
que se encuentra detenida en la estacin de reserva hasta el ciclo 11, inclusive.
Al trmino del ciclo 8, la instruccin 6 pasa a ejecucin, por lo que en el ciclo 9, la instruccin 8 se
emite hacia la ER 2.
No obstante, la unidad funcional de sumas/restas no queda libre hasta que la instruccin 6
finaliza su ejecucin al trmino del ciclo 10.
As, la instruccin 8 puede pasar a ejecucin en el ciclo 11, se ejecuta durante los ciclos 11 y 12,
y escribe su resultado en el ciclo 13.
Pero algo raro pasa con la ejecucin de las instrucciones 7 y 8! Vemoslo a continuacin.

Planificacin Dinmica - 47 Arquitectura de Computadores
Acabamos de ver que la instruccin 8 se ha adelantado a la instruccin 7! pues la 8 pasa a
ejecutarse en el ciclo 11 y, segn estaba previsto, la instruccin 7 debera hacerlo en el ciclo 12.
En realidad, lo que suceder es que la instruccin 8 pasa a ocupar la unidad funcional de sumas/
restas en el ciclo 11. La instruccin 7, que estaba detenida esperando a que se resolviera un
riesgo RAW con la instruccin 6 (por F7), se libera del riesgo en el ciclo 11, por lo que podra
comenzar su ejecucin en el ciclo 12, pero se encuentra que la unidad funcional acaba de ser
ocupada por la instruccin 8 en el ciclo 11, donde se ejecuta hasta el ciclo 12.
Como vemos, la instruccin 7 ni pudo pasar a ejecucin en el ciclo 12, ni pudo escribir su
resultado en el ciclo 14.
Planificacin Dinmica - 48 Arquitectura de Computadores
Como la instruccin 8 se adelant a la 7, sta ltima pas realmente a ejecucin en el ciclo 13, se
ejecut durante los ciclos 13 y 14, y, por ltimo, escribi su resultado en el ciclo 15.
Por esto aparecen tachadas las ocupaciones de la ER 1 (7-11) y de la unidad funcional de
sumas/restas (12-13) que se haban previsto para la instruccin 7, y en su lugar, y al final, se han
incluido las ocupaciones reales que se hicieron con esta instruccin 7; esto es, la ER 1 la ocup
realmente la instruccin 7 durante los ciclos 7 a 12, y la unidad funcional de sumas/restas,
durante los ciclos 13 y 14.
Planificacin Dinmica - 49 Arquitectura de Computadores
En el apartado 2.5 de H&P (4th. ed.) puede verse otro ejemplo del Algoritmo de
Tomasulo en el que se muestra la evolucin del contenido de sus 4 tablas de estado.
En las siguientes direcciones se dispone de simuladores del Algoritmo de Tomasulo,
on line, que pueden ayudar a comprender su funcionamiento:
- http://www.ecs.umass.edu/ece/koren/architecture/Tomasulo/AppletTomasulo.html
- http://www.ecs.umass.edu/ece/koren/architecture/Tomasulo1/tomasulo.htm