Conceptos Fundamentales de Arquitectura de Computadoras: Multiplicación, División y Pipelining
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 3,47 KB
Multiplicación de Booth
Este **algoritmo** es **secuencial**. El producto se obtiene de la **suma sucesiva** de los **productos parciales**. Si el multiplicando tiene n bits y el multiplicador tiene m bits, el producto puede tener hasta n+m bits. Para operandos de 32 bits, necesitaremos hasta 64 bits para mostrar el resultado. Existe la posibilidad de **desbordamiento (overflow)**.
Multiplicación con Signo
- Convertir ambos operandos a números **positivos**.
- **Multiplicarlos**.
- Si los signos son **diferentes**, complementar a 2 el resultado (hacerlo **negativo**).
Esta **implementación** utiliza pocos recursos de **hardware**, pero es **lenta**.
División
La operación de **dividir** suele implementarse por **software**.
En promedio, es la operación **menos utilizada** en los programas de computación.
Es la operación de base **más difícil** y **penalizadora** de implementar.
Implementación de un Solo Ciclo
Es **ineficiente**. El **ciclo de reloj** debe durar lo mismo que la instrucción que tarde más, generalmente la instrucción **load
**.
El **CPI** = 1, pero la duración del ciclo es muy **grande**.
Pipelining (Segmentación de Tuberías)
Múltiples **instrucciones** solapan su **ejecución**, como en una **línea de ensamblaje**.
Analogía: Lavado de Ropa
- Colocar la ropa sucia en la **lavadora**.
- Cuando termine, colocar la ropa mojada en la **secadora**.
- Cuando termine, colocar la ropa en una mesa y **doblarla**.
- Ubicar la ropa en el **clóset**.
Implicaciones del Pipelining
Idealmente, el **tiempo entre instrucciones** con pipeline es igual al tiempo entre instrucciones sin pipeline dividido por el número de **etapas**.
¿Mejoramos el **tiempo de ejecución** o la **productividad**? La **productividad**, ya que el tiempo de ejecución probablemente **empeore**.
La duración del **ciclo de reloj** será igual a lo que tarde la **etapa más lenta**.
Registros de Pipeline
Necesitan ser lo suficientemente **anchos** (grandes) como para albergar todos los **bits** necesarios de una etapa a otra (ej. 64, 128, 97 y 64 bits).
Durante un **ciclo de reloj**, las **instrucciones** avanzan desde un registro de pipeline al siguiente.
Paso de Información en Pipeline
Toda la **información necesaria** para los siguientes pasos debe ser **pasada**.
¿Qué faltó en la ejecución de la instrucción lw
?
En la última etapa (**WB**), debemos saber el número del **registro** donde se escribirá el **dato**. Pero esto no lo hemos pasado. Por lo tanto, debemos corregir el **encauce** (forwarding/bypassing).
Hazards de Datos (Riesgos de Datos)
1ª opción: **Detener la ejecución** con la introducción de **instrucciones que no hacen nada** (**Nops**).
Ejemplo:
add $zero,$zero,$zero
¿Cuándo se tiene disponible el resultado de sub $2,$1,$3
? Al final del **ciclo 3**.
2ª opción: **Adelantar el dato** (Data Forwarding).
¿Qué ocurre cuando un registro es leído y escrito durante el mismo ciclo de reloj?
Los **archivos de registros** realizan la **escritura** en la primera mitad del ciclo y la **lectura** en la segunda mitad. Por ende, entre las instrucciones sub
y add
**no hay dependencia de datos**.