Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Registros F - Registros de coma flotante, son 32 registros (por ejemplo F 0, F1 ,F2 ) , pueden ser usados como registros
para almacenar números de coma flotante de precisión simple (Float) o ser usados en dúos para almacenar números
de coma flotante de doble precisión (Doble), (por ejemplo F0, F2 ,F4 ).
Registros R - Registros de enteros de propósito general, son 32 registros (por ejemplo, R0, R1, R2), el registro R0
tiene valor fijo y es igual a 0 (no puede ser modificado).
SF 0(R2), F2 - En esta instrucción se guarda en la posición de memoria a la que apunta el valor guardado en el
registro R2 el contenido del registro F2
LF F0,0(R1) - En esta instrucción se carga en el registro F0 el valor almacenado en la posición de memoria a la que
apunta el valor guardado en el registro R1
Nota: Si una instrucción no especifica el tipo de dato, por ejemplo, ADD, se considera que está usando números
enteros.
1. Procesador Segmentado: es aquel que tiene múltiples etapas (cada etapa tiene funciones diferentes), en las que
diferentes instrucciones pueden estar ejecutándose en diferentes etapas del pipeline al mismo tiempo.
Procesador no segmentado: Es aquel en que las instrucciones deben ejecutarse secuencialmente y en las que al
mismo tiempo solamente se va a procesar una instrucción en todo el pipeline.
Nota: Las funciones de cada etapa se relacionan para un procesador ideal, sin aplicación de técnicas de especulación
o modificación (ya sean de hardware o software).
En un procesador real, las instrucciones tienen demoras diferentes en las diferentes etapas (el tiempo que demora
una instrucción en pasar por una etapa se denomina LATENCIA).
El CPI se define como la cantidad de ciclos de reloj que demore el procesador en ejecutar la cantidad de
instrucciones que tenga el programa.
El CPI ideal es 1, cuanto más cercano este el CPI real del programa a 1 va a ser más eficiente, el valor del CPI no
puede ser menor a 1, ni ser negativo.
Generalmente lo que nos van a pedir es el CPI por Iteración, el cual se define como la cantidad de ciclos de reloj que
demora ejecutar entre el número de instrucciones de código de esa iteración.
1. Detener el procesador. Muy ineficiente, demora mucho volver a arrancar el procesador, además que hay
que guardar el valor de los registros y después volver a cargar los registros, actualmente no se utiliza.
2. Agregar Stall o sea instrucciones vacias cada vez que se produzcan dependencias de datos. 3 STALL por
dependencia.
3. Técnica del Hardware Forwording: Significa adelantar el resultado de la operación antes de que se termine
de procesar la instrucción en el pipeline. El resultado debe ser adelantado para que la instrucción siguiente
pueda ir a la etapa ID
Instrucciones L(Load) y S(Store) introducen 1 STALL, adelantan el resultado de la operación cuando
la anterior se encuentra en la etapa MEM
Instrucciones Aritméticas (ADDx, DIVx, MULTx…etc) no introducen STALL ya que adelantan el
resultado cuando la instrucción está en la etapa EX.
Instrucciones de control de salto (BNEZ…etc), no sufren cambios o sea se siguen manteniendo los 3
STALL ya que no adelantan el resultado de su operación.
4. Mejora de la etapa de decodificación para evaluar la condición de salto. Consiste en adelantar el resultado
de la operación de salto (BNEZ, por ejemplo), la dirección del salto se adelanta en la etapa ID de la instrucción de
salto. Queda un solo stall en los saltos
5. Paralelismo a nivel de bucle – Se produce cuando se pueden ejecutar bucles (o iteraciones) del mismo programa
con independencia (o sea que no dependen de los datos a utilizar).
Dicho de otra manera, existe paralelismo a nivel de bucle cuando estos se pueden ejecutar sin dependencias de los
valores de los datos modificados por el bucle anterior.
Existen varias técnicas para mejorar el rendimiento en el caso de las dependencias de control:
1. Asumir que la predicción del salto es TOMADO cuando el salto es hacia atrás y asumir que la predicción del
salto es NO TOMADO cuando el salto es hacia adelante. Esta predicción es exitosa en el 90% de los casos,
cuando no fuese exitoso hay que rectificar las instrucciones cuando se termine de procesar la instrucción de
salto. Se eliminan todos los STALL.
2. Planificación estática de instrucciones. Es una técnica de software, el objetivo es reducir los stall. Funciona
también para disminuir las dependencias de datos.
3. Planificación de bucle, desenrollado de bucle, Es una técnica de software, el objetivo es reducir los stall.
En el diagrama de este algoritmo la etapa IF no se representa, a pesar de que existe, la etapa MEM se combina con
WB pasando a llamarse WB y se agrega una etapa nueva llamada COMMIT, se mantiene el número de etapas (5).
Este algoritmo plantea un cambio en la arquitectura del procesador, teniendo en cuenta los recursos finitos que
tiene cada procesador, una característica fundamental es el renombre de registros, o sea las instrucciones son
renombradas con una etiqueta que será usada durante todo el procesado de la instrucción en el pipeline, hasta que
esta guarde los registros en la última etapa (se le denomina “Hacer COMMIT”)
Se usan etiquetas, para saber el orden de las instrucciones, los resultados y que no se confundan al guardar en los
registros.
Los procesadores que trabajan bajo los principios del algoritmo de Tomasulo deben tener varias unidades
funcionales (ALU) y las latencias son variable según el tipo de instrucción.
La ejecución de las instrucciones en las unidades funcionales (ALU) se realiza fuera de orden.
Si no dispongo de espacio en los RB (Reorder Buffer o Buffer de reordenamiento) o en los RS (Registros de las ALU)
debo dejar de emitir instrucciones hasta que se libere espacio.