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

  1. Convertir ambos operandos a números **positivos**.
  2. **Multiplicarlos**.
  3. 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**.

Entradas relacionadas: