Está en la página 1de 4

12.3.

Operaciones multiciclo
Introducción

En los primeros procesadores, el controlador de los componentes o de la ruta de datos era de


tipomonociclo, es decir que todos los elementos del sistema estaban sincronizados al mismo flanco de reloj
y todas las instrucciones se ejecutaban en un ciclo de reloj. Esto obligaba a que el reloj tenga igual período
que la instrucción más lenta y por tanto se reducía el rendimiento del sistema. En la práctica existen
operaciones que toman mucho tiempo como aquellas realizadas en datos de punto flotante o
direccionamiento indirecto, entre otras.

Por ello los diseñadores cambiaron de paradigma haciendo que el sistema se sincronice en períodos más
pequeños y utilizaron los ciclos de reloj del sistema para sincronizar cada etapa de la ejecución de una
instrucción dando lugar a los procesadores multiciclo. En un comienzo cada etapa del ciclo de instrucción
era sincronizado con un ciclo de reloj, luego de acuerdo a las necesidades de cada instrucción hubo
variaciones en el sentido de que por ejemplo la etapa de ejecución de una instrucción dada requería de un
ciclo de reloj mientras que de otra requería más de un ciclo, dando lugar a la flexibilidad del sistema. Para
este tipo de procesadores se observó que un mismo elemento de hardware del sistema podía ser utilizado
en la ejecución de una instrucción por diferentes etapas del ciclo.

Esta funcionalidad de reutilización de hardware dio lugar a que los diseñadores propongan el procesador
segmentado, que como fue descrito permite ejecutar varias instrucciones de manera concurrente para
aumentar el rendimiento del sistema. Cabe señalar que en los procesadores segmentados una vez llenado
el sistema, por cada instrucción se utiliza en promedio un ciclo de reloj. Una ventaja es que las instrucciones
empiezan y terminan en orden.

Figura 13. Comparación en ejecución de instrucciones. Note que Reg representa Decode (Tirado & Hermida, 2012)

La figura 13 ilustra la ejecución de un programa sobre diferentes procesadores: monociclo, multiciclo y


segmentado. A manera de ejemplo se puede ilustrar esta evolución. Suponga un programa de 200
instrucciones, considere que el período del reloj del procesador monociclo es de 45ns y que el periodo de
reloj para los procesadores multiciclo y segmentado es de 10ns. Se desea calcular el tiempo de ejecución del
programa para los tres tipos de procesador si se asume que en promedio las instrucciones para el
procesador multiciclo requieren 4.6 ciclos por instrucción(CPI) y que para el procesador segmentado es de
un ciclo por instrucción. El resultado de los cálculos del tiempo de ejecución para cada caso sería de:

Monociclo: 45ns/ciclo x200 = 9000 ns


Multiciclo: 10ns/ciclo x 4.6 CPI x 200 =9200 ns

Segmentado: 10ns x (1CPIx200+4 llenado) =2040 ns

Caso típico

Las operaciones en punto flotante son un caso típico de operaciones multiciclo, especialmente para la etapa
de ejecución en donde se requiere añadir hardware adicional. En la figura 14 en donde se puede observar
que existe cuatro circuitos independientes para la etapa de ejecución: la unidad de ejecución de enteros, la
unidad de ejecución de multiplicación para enteros y punto flotante, la unidad de ejecución de suma de punto
flotante y la unidad de ejecución de división de enteros y punto flotante.

Figura 14. Ilustración de hardware adicional para operaciones multiciclo. (Tirado & Hermida, 2012)

Riesgos

Como se puede presumir en este caso habría solapamiento o ejecución concurrente de operaciones enteras
y de operaciones en punto flotante. En el caso de que operen con datos independientes no existiría ningún
riesgos, caso contrario se presentaría el riesgo de datos explicado en la sección anterior. Según el autor
Tirado (Tirado & Hermida, 2012), los riesgos de este tipo de operaciones multiciclo se resumen en los
siguientes:
Riesgos estructurales

Riesgos Lectura después de escritura (LDE)

Problemas con la finalización fuera de orden


Para solucionar los riesgos estructurales, se ha propuesto la replicación o segmentación de las unidades de
punto flotante. Para el caso de la unidad de división los diseñadores han preferido no segmentarla. En este
caso al detectar un riesgo han optado por implementar paradas del procesador. La figura 15 ilustra los ciclos
necesarios para la ejecución de diferentes instrucciones según la unidad utilizada. Así, la unidad de
ejecución de enteros requiere de un ciclo, la unidad de ejecución de multiplicación para enteros y punto
flotante requiere de 7 ciclos, la unidad de ejecución de suma de punto flotante requiere de 4 ciclos y la
unidad de ejecución de división de enteros y punto flotante requiere de hasta 24 ciclos.
Figura 15. Ciclos necesarios para la ejecución de diferentes operaciones. (Tirado & Hermida, 2012)

En operaciones multiciclo existe una mayor penalización de los riesgos LDE o RAW (Read After Write). Esto
se debe a que una mayor duración en la ejecución de las instrucciones implicará más ciclos de detención
del procesador. Por lo tanto es indispensable planificar de mejor manera las instrucciones. Si bien es cierto
este tipo de riesgos también puede ser resuelto mediante la técnica de cortocircuito, los diseñadores
prefieren no implementarlo por la gran cantidad de circuitos lógicos necesarios para realizar las distintas
comparaciones. Adicionalmente, el tiempo que se encontraría bloqueado (stall) el sistema es muy grande.

Figura 16. Riesgo LDE en procesadores con operaciones multiciclo (Tirado & Hermida, 2012)

El mayor problema que tienen las operaciones multiciclo es la finalización fuera de orden( desordenada),
puesto que las instrucciones inician en orden y terminan en orden distinto al lanzamiento. La Figura 17 ilustra
la finalización de instrucciones en orden distinto al lanzamiento. Esta situación puede dar lugar a conflictos
por escritura simultánea en registros (riesgo estructural), a riesgos de datos tipo EDE o WAW (Write After
Write), o a incluso originar inconvenientes con las excepciones.

Figura 17. Finalización de instrucciones en orden distinto al lanzamiento (Tirado & Hermida, 2012)
Para solucionar estos posibles riesgos se puede utilizar las detenciones del sistema en diferentes etapas.
Por ejemplo, en caso de escritura simultánea de registros, se puede proponer que la instrucción que se
encuentra en la etapa de decodificación se detenga para dar prioridad de escritura a una instrucción emitida
previamente. También se podría detener el sistema en la etapa de ejecución dando prioridad de uso a la
unidad con mayor latencia (tiempo que una unidad funcional requiere para entregar el resultado de una
operación).

Obra publicada con Licencia Creative Commons Reconocimiento No comercial Compartir igual 4.0

Unidad de Educación a Distancia

También podría gustarte