Está en la página 1de 75

Circuitos sumadores

El algoritmo de suma platea, sea

X ( xn 1 ,..., x0 )

Y ( yn 1 ,..., y0 )
S ( sn , sn 1 ,..., s0 )
Partiendo de un carry inicial Co=0, se resuelve para cada posicin i (n iteraciones)

Si ( xi yi ci ) mod b
Ci 1 ( xi yi ci ) / b
Se puede ver que cualquiera sea la base el Ci+1 (carry de salida a la prxima posicin) ser 0 1. Esto a partir
de xi yi 2(b 1)
Half Adder (HA)
Este toma dos operandos de entrada, sin carry de entrada y produce dos salidas:
S = suma de los operandos = A B
Cout= carry de salida = A.B
Full Adder (FA)
Tomas tres entradas (los dos operandos y el carry de entrada) y produce dos salidas:
S = suma de los operandos con el carry de entrada = A B Cin
Cout = Ci+1 = A.B + (A + B). Cin

Este sumador se podr construir a partir de un FULL ADDER.


Para sumar n bits lo que se hace es: empezar por las posicin 0, pongo de entradas X0,Y0 y C0. Esto me da el
digito S0 de la suma y utilizo el Cout para el Cin de la posicin 1, y as hasta llegar hasta la posicin n-1.
(Orden (n)). No se puede mejorar la complejidad a este nivel, pero si a nivel de la implementacin.

Sumador Serie: sumador serie de n bits, haciendo uso de un nico FA.


Los sumadores seriales no son usados en el diseo de procesadores centrales o ALUs debido a que son muy
lentos y tambin muy restrictivos.

FA

Sumadores Paralelos
Ripple Adder
Se disponen los m FA en una configuracin donde el carry de salida de uno es carry de entrada del siguiente
en la cadena (posicin ms significativa)

Debido a que el carry debe ser propagado de C1 hasta la ltima suma y el carry de salida, en el peor de los
casos el tiempo es relativo a m niveles de FA (Orden(m)).Aqu el tiempo de ejecucin vara de acuerdo a la
que propaguen los operandos, pero se debe tomar el peor de los casos para poder hacer la suma de forma
sincrnica (fijar un tiempo para la suma) y que siga funcionando correctamente.
El peor caso es todos propagan, ninguno genera.
Ci 1 X iYi ( X i Yi )Ci
Tiempo de suma proporcional a m FA
Asumiendo FA=2T Ripple Adder = 2mT
Si lo trabajase de forma asincrnica deberamos disponer de un circuito lgico que indique cuando la suma
se ha hecho efectiva.
En general esto no interesa una operacin de este tipo:
1. Complica el control.
2. Un compilador optimizante no podr sacar provecho de ello.
En particular la suma/resta es una operacin bsica que las ms de las veces determina el perodo del reloj
de la CPU.
Carry Look-Ahead Adder
Superadora del Ripple Adder que busca independizar el retardo del circuito de n (num de bits de los
operandos). Se plantea en este tipo de sumadores paralelos generacin de carrys como una funcin
independiente a la suma:

Obs: XOR en el cuaderno aparece como +.


3

El carry genrico Ci es una suma de productos de P, G y C0. Se necesita un nivel de compuertas para
generar los P y G. Dos niveles ms de compuertas para computar Ci y dos niveles ms para computar la
suma. Por lo tanto se necesitan 5 niveles de compuertas. Pero en la prctica no es posible realizar un CLA de
un solo nivel debido a las limitaciones del fan-in y del fan-out. La idea para hacerlo prctico es construir
niveles superiores. Si observamos las ecuaciones de P, G y C podemos obtener las siguientes relaciones
recursivas:

Con esto se puede construir un CLA prctico. El sumador consiste de dos partes. La primera (A) computa
los valores de P y G. La segunda (B) usa estos valores de P y G para calcular los Carries. Los bits en un CLA
deben pasar a travs de log n niveles lgicos, comparados con los 2n del ripple-carry adder. Mientras que el
ripple tiene n celdas, el CLA tiene 2n celdas, que usan un tamao de
n.log(n). Esto es lo que se paga por un incremento en la velocidad, espacio.

Si bien un Ripple Adder de un numero importante de bits es desaconsejable, disponer de manera inteligente
pequeos bloques Ripple Adder (que por lo dems pueden dar tiempos mas que razonables para la suma),
posibilitaran construir sumadores relativamente rpidos y no tan complejos como los CLAA.

MSI (aplicacin con circuitos integrados de mediana escala)


Los sumadores paralelos LOOK AHEAD eran de unos pocos bits (tpicamente 4)

Extendindolo a ms bits (16).

Las funciones P y G las toma un circuito Carry Look Ahead Generator

Este circuito opera para cualquiera sea el numero de bits de los claa.
En lugar de hacer Ripple a nivel de secciones sumadoras se extiende el concepto a un tercer nivel:

Carry Skip Adder.


Este est situado en el medio de ripple y CLA, en trminos de velocidad y costo. La idea de este sumador
comienza con el hecho que computar el propagado (P) es mucho ms simple que computar el generado (G),
por lo tanto el carry skip adder solo computa el propagado. Lo que se hace es comenzar en todos los bloques
con el carry in igual a cero. Todos computan el propagado (que no depende del carry in, sino de lo operando)
y luego se van pasando el propagado de un bloque al otro. A medida que van llegando los carry-in a cada
bloque estos computan la suma y producen el carry para el bloque siguiente. Cuando el ltimo bloque recibe
el carry-in y calcula la suma, ya todos los bloques terminaron de computar su suma.
Para analizar la velocidad, asumimos que toma 1 unidad de tiempo pasar la seal a travs de dos niveles
lgicos. Entonces si tenemos, por ejemplo, que sumar 20 bits, en bloques de 4 bits cada uno tenemos:
- 4 unidades de tiempo para producir todos los propagados y el primer carry in (del primer bloque).
- (n/k - 2) unidades de tiempo para pasar el bloque, es decir, (20/4 2) = 3 unidades de tiempo
- 4 unidades de tiempo para que el ltimo bloque realice la suma.

Esto nos da 11 unidades de tiempo para realizar la suma. Una variante para mejorar el tiempo es tener
bloques de distinto tamao de bits. Por ejemplo si, en el caso anterior, tenemos el primer bloque de 2 bits, el
segundo de 5 y los restantes de 6, 5 y 2 bits, el tiempo total se reduce a 9 unidades de tiempo.

Cul ser la mejor particin m(n) para equiparticin?


2n
n
n

4k 4 T 2 2 4 2 2
2

k k
k

k
k

n
2

Con

n=32 k=4
n=128 k=8
Esto conduce a verificar que la complejidad en tiempo de ejecucin es O( n ).
Retardo n=32 28
n=128 60
Carry Select Adder
Este trabaja con el siguiente principio: se realizan dos sumas en paralelo, una asumiendo carry in 0 y la otra
asumiendo carry in 1. Cuando el carry es finalmente conocido, se selecciona la suma correcta. Con este
mtodo obtenemos el doble de velocidad (sumo en la mitad del tiempo) con un costo de 50% ms. Sin
embargo los carrys deben atravesar varios multiplexores, los cuales incorporan un retraso. Para aprovechar
esto, una variante es que cada bloque sea un bit ms grande que su antecesor. Esto produce que se necesiten
bloques de varios tamaos.

1
T ripple 4 retardo compuertas
4

Comparacin de los Tipos de Sumadores

Carry save adder (CSA)


No es un verdadero sumador paralelo. Se compone de n FA pero desconectado entre s. A un CSA le entran 3
operandos y produce 2 salidas: Peudo-suma, Pseudo-carry

Xn-1

SCn

YYn-1n-1

SSn-1

X0

Zn-1

SCn-1

Y0
Z0

SSn-2

SC1

SS0

No hay ni generacin ni propagacin de carry, el mismo es un tercer operando lo cual confiere extrema
velocidad (retardo de 1 FA).
La verdadera suma se obtiene sumando la pseudo-suma y el pseudo-carry
X
Y
Z

0111
0011
0100
000 SS
111 SC
1110

Si hay que sumar 3 o ms operandos convendr (por velocidad) emplear CSA.

Multiplicacin
X ( xn 1 ,..., x0 )

Y ( yn 1 ,..., y0 )
P X .Y ( P2 n 1 , P2 n 2 ,..., P0 )
Sea x, y y p el multiplicando, multiplicador y producto respectivamente. Usando un sumador ripple o carry
lookahead con un registro de desplazamiento se puede implementar el siguiente algoritmo

OBS: algoritmo de O(n2). En el cuaderno hay 2 algoritmos no se por que!


Esto dar la posibilidad de a nivel algoritmo intentar bajar la complejidad. Se ha investigado mucho al
respecto, no se sabe cun cerca de O(n) se podr estar.
Supongamos X e Y dos nmeros de 2 n-bits.
Sin prdida de generalidad asumamos base 2.

X x1 2n x0
Y y1 2n y0
Si hacemos el producto, y jugando algebraicamente

P (22 n 2n ) x1 y1 2n ( x1 x0 )( y1 y0 ) (2 n 1) x0 y0
Vale decir que el tiempo del producto de 2n bits estar acotado por 3 veces el tiempo para resolver productos
de n bits mas algn retardo por adicin y corrimiento.

T (2n) 3T (n) Cn
La solucin a esta ecuacin dar

T (n) 3Cn

A acumulador
MQ multiplicador /cociente
AMQ registro doble concatenado con
corrimiento a izquierda.
ALU unidad aritmtico-lgica de n-bits.

En una mquina de acumulador nico:


El A era implcito.
El MQ registro visible al soft.
Exista un registro C contador de la iteracin.
A0
MQY
BX
Producto= AMQ
Bit a bit se analizan el multiplicador y corriendo o sumando y corriendo segn yi sea 0 o 1 respectivamente.
Ejemplo en el cuaderno.

Acelerar el proceso de multiplicacin. Reducir el numero de iteraciones codificando de a mas de un bit de


multiplicacin. Si codificamos de a C bits, el numero de iteraciones se reduce en igual proporcin a de
nn/C que se necesita 2c 1 mltiplos del multiplicador.
Por ejemplo, con c = 2, tendramos x, 2x y 3x.
10

Con operacin asincrnica se podra:


1. correr (shift) sobre 0s
2. saltar (skip) sobre 0s
1. mantiene el numero de iteraciones pero el tiempo de ejecucin variara acorde a si el bit del
multiplicador es yi es 0 o 1.
2. conduce a una reduccin del nmero de iteraciones promedio.
Esto exige detectar cadenas de 0s y disponer de unidades de corrimiento variables.
Recodificando el multiplicador (smil Booth)
Cuando el bit actual del multiplicador es 0, no se realiza ninguna suma en la implementacin actual del
esquema de multiplicacin y el producto parcial solo se desplaza una posicin a la derecha. Esto es
manejado por el salto en el paso 3 del algoritmo. Puede ser generalizado a desplazamientos de longitudes
variables si se pueden detectar cadenas de 0s. Este proceso se refiere a veces como salteado sobre 0s. Si el
sumador es tambin un eficiente restador, como por ejemplo en la representacin 2 complemento, podemos
tambin saltar sobre 1s.
Para justificar esta operacin consideremos una subcadena de 1s en el multiplicador de la forma (X es 0 o
1):
XXXX011110XX
^ ^^
J
i(i-1)

(bits del multiplicador)


(posicin)

El proceso de multiplicacin entre los bits yj e yi en el algoritmo original calcula:


x* (2i + 2i+1+ ... + 2j-1) = x* (2j - 2i)
De esta manera las (j-i) sumas pueden ser reemplazadas por una suma y una resta. Se necesita un flag para
controlar si sumar, restar o saltear. Reestructurando el algoritmo:

Un comentario interesante para hacer aqu es que cuando el multiplicador es negativo y se usa la
representacin en 2 complemento, este esquema de recodificacin substraer automticamente 2 n .x como se
discuti. Esto resulta del hecho de que el bit signo es 1 y la extensin de signo virtual es como una cadena
de 1s.
El peor caso es no saltear sobre 0s cuando se implementa la versin original del algoritmo. Cuando el
multiplicador es la forma 0101...0101 y saltamos sobre 0s y 1s, an tenemos que realizar n operaciones.
Esto es porque a veces el decodificador realmente revisar si es un solo 1 rodeado de 0s para realizar solo
una suma en lugar de una suma y una resta. Si podemos saltar sobre 0s en cualquier longitud, se demuestra
11

que los desplazamientos promedio son de un largo de 2. Si pueden saltarse 0s y 1s, entonces el promedio
sube a 3. Pero la circuitera necesaria para implementar saltos variables de cualquier longitud puede ser muy
engorrosa.
Una alternativa a saltar sobre 0s y 1s es recodificar c bits del multiplicador a la vez y tener 2 c 1 mltiplos
del multiplicando antes de comenzar la multiplicacin. Por ejemplo, con c = 2, tendramos x, 2x y 3x. Si los
bits yi e yi+1 del multiplicador son 00, se realiza un desplazamiento doble a derecha. Si son 01, entonces se
suma x antes del desplazamiento. Si son 10, sumaremos 2x y si son 11 3x. En el paso 2 del algoritmo
original, i es incrementado en 2.

Este esquema de recodificacin puede implementarse con saltos sobre 0s y 1s. La Tabla 1 muestra cmo
esto puede realizarse simultneamente para 2 bits con la generacin de solo 2x y 4x, o sea, solo
desplazando el multiplicando a izquierda. Para entender la tabla debemos poner atencin al hecho de que los
bits yi e yi+1 son los recodificados, mientras que el bit yi+2 se usa para indicar la terminacin posible de una
cadena. Adems se asume que hay dos bits 00 extras implcitos en el final menos significativo y otro en el
extremo izquierdo. Por ejemplo, un multiplicador de 6 bits (011001) = 25 es recodificado como:
0 01 10 01 00
^
^
bit extra
bits extras
-4.22x.
20.2x.
-2.22x.
2.24x.
que es (32-8+2-1 ).x = 25x
Si en lugar de la recodificacin de la Tabla 1, deseamos usar la tcnica del flag descripta antes, entonces es
suficiente con x y 2x para recodificar 2 bits.
Usando CSA
Dados 3 operandos, el CSA genera 2 salidas segn el sistema. Si se tienen que sumar n operandos, como en
una multiplicacin, podemos tomar ventaja de la velocidad del CSA usando el siguiente algoritmo

12

Como los CSAs son mucho menos complejos que los sumadores paralelos, podemos usar ms de uno sin un
incremento indebido en el costo. En la figura se muestra cmo usar los CSAs.

Se tienen n ciclos con retardo = CSA + LATCH. (y el sumador paralelo ?)


Habida cuenta de que es un circuito relativamente simple de podria recurrir a mas CSA. De esta forma con
mas de 3 CSA se habilita el trabajo en paralelo aumentando an ms la performance.
En una fase de reloj las operaciones de cada CSA, menos la ltima suma ripple, toma n niveles de CSA. No
parece haber ventajas entre colocar 1 o 3 CSAs. Pero si permitimos superponer las operaciones, por ejemplo,
realizar la recodificacin del multiplicador en paralelo con la acumulacin de productos parciales, el
duplicar hardware implica una gran mejora. Adems, si incrementamos el nmero de CSAs, podemos
realizar concurrentemente partes del proceso de multiplicacin. En la figura, mostramos cmo la inclusin
de un CSA ms permite algunas sumas en paralelo (solo una descripcin esquemtica, sin el sumador
paralelo).

13

OBS: falta el match al final y los sumadores paralelos


El nmero de iteraciones se decrementa de n/3 a n/4 para un tiempo total de n niveles de CSAs. Ms
generalmente, si tenemos (n-2) CSAs podemos construir un rbol de profundidad de O(log n) (dado que
entran 3 y salen 2), o sea, genera la suma de las sumas ripple en O(log n) niveles de CSAs. Este orden de
magnitud se obtiene de la siguiente construccin. Agrupamos de a n operandos en tros como entradas a los
CSA superiores. Se obtienen (aproximadamente) 2/3.n salidas, las cuales alimentan de nuevo en tros al
segundo nivel. Continuando la construccin hasta tener solo 2 salidas. Evidentemente tenemos profundidad
logartmica, ya que decrementamos el nmero de entradas un tercio cada nivel. Se necesitan (n-2) CSAs, y
se prueba por induccin sobre el nmero de operandos. Esto se llama Wallace Tree o sumador Wallace.
En general, no deseamos invertir en (n-2) CSAs. Pero solo un nmero limitado de ellos pueden ser
conectados como en la figura y emplear un algoritmo iterativo. Recodificar el multiplicador puede usarse
concurrentemente, con dos desplazamientos (o ms) en lugar de uno.
La suma es computada por el rbol de CSAs, el cual produce una suma de 2n bits y un carry de 2n bits. La
absorcin final del carry es elaborada por un sumador paralelo con propagacin interna de carry.
El multiplicador estrictamente combinacional de la figura es prctico para valores moderador de n,
dependiendo del nivel de integracin que se use. Para valores de n grandes, el nmero de CSAs necesarios
se vuelve excesivo.
Las tcnicas de CSAs pueden seguir usndose s particionamos el multiplicador en k segmentos de m bits.
Se repite el proceso k veces y se va acumulando el resultado. El resultado se obtiene por lo tanto luego de k
iteraciones. La multiplicacin carry-save es apropiada para implementaciones pipeline.
Se puede demostrar por induccin que con n-2 (n es la cantidad de sumas a realizar) CSA se implementa el
producto de forma DIRECTA SIN ITERACION, lo cual maximiza el paralelismo a nivel de los CSA.
Este esquema utilizado en algunas supercomputadoras de veia aun mas potenciado con la estructuracion en
pipeline de la unidad.
A nivel VLSI esta estructura no resultarpa la ideal por cuestiones de implementacion. Al punto que a este
nivel se recurre a multiples CSA pero no con este esquema de WALLACE TREE.
A nivel VLSI necesitamos sumadores 2 input, 1 output para favorecer el proceso de integracin.
La solucion a esto es trabajando con digito signado disponer de sumadores sin carry. La suma tiene una
naturalidad LOCAL. As construir un arbol binario multiplicador:

14

Tendra profundidad log (n) dado que cada


nivel que atravieso reduzco lamitad de las
entradas
Trabajar dgito signado (internamente) lo
cual indica que los operandos internos
consumen registro doble.

Se debe al finalizar a la parte positiva restarle la parte negativa. Para ver cmo trabaja descomponemos el
proceso en 2 fases.
1. A partir de Xi Yi obtener un Si y un Ci+1 (transitorio)
2. Con el Si y Ci resultante obtener el Si definitivo que como se ver siguiendo una tabla en la fase 1,
resultar su suma sin carry.

Para realizar la suma sin carry dgito signado para una dada posicin se debe analizar la posicin en cuestion
y 2 hacia atrs.

15

Algoritmo de Booth
Otro esquema interesante y ampliamente usado para multiplicacin en 2 complemento fue diseado por
Andrew D. Booth. Emplea suma y resta, pero trata de la misma manera los nmeros positivos y los
negativos. Esto permite realizar la multiplicacin de n bits usando menos de n sumas o restas, por lo cual es
ms rpido.
En la aproximacin de Booth se examinan 2 bits consecutivos xi xi+1 en cada paso.

De esta manera el algoritmo de Booth efectivamente salta sobre los 0s y 1s que va encontrando en X. Es este
salteado el que reduce el promedio de pasos en sumas / restas y permite disear multiplicadores rpidos,
aunque a expensas de un temporizado y circuitera de control ms complejas.
La validez del algoritmo puede verse como sigue. Supongamos que X es una fraccin positiva y contiene
una subsecuencia X* consistente de una sucesin k de 1s rodeada por dos 0s
X*= xixi+1xi+2 ... xi+k-1xi+kxi+k+1
= 011...110
En un algoritmo normal de sumas y desplazamientos, Y es multiplicado por cada bit de X *en secuencia y
luego se suman los resultados, para que la contribucin de X* al producto P = X * Y sea
i+k

2 Y (1)
-j

j=i+1

Ahora cuando es aplicado el algoritmo de Booth a X*, este realiza una suma cuando encuentra xixi+1 = 01 la
cual contribuye 2-iY a P, y realiza una resta en xi+kxi+k+1 = 10 la cual contribuye 2-(i+k) Y a P. As la
contribucin neta de X* al producto P en este caso es:

Si el ndice m es reemplazado por j = m i k, entonces es obvio que las ecuaciones (1) y (2) son las
mismas; luego el algoritmo calcula correctamente la contribucin de X*, y del multiplicador completo X, al
producto P.Similares argumentos se encuentran para multiplicadores negativos.
La aproximacin de Booth lleva a una reduccin del nmero de sumas y restas necesarias para saltar k 1s o
0s, con tal que k > 1. Si k = 1, por ejemplo, X* correspondiente a un 1 aislado rodeado por 0s, no resulta tal
disminucin. De hecho, si X = 010101...01, donde hay n/2 1s aislados, son necesarias n/2 sumas y n/2 restas
si se usa el algoritmo de Booth bsico. Esto es peor que los primeros algoritmos de multiplicacin, los cuales
solo realizaban n/2 sumas correspondientes a los n/2 1s. Luego el algoritmo puede ser mejorado
identificando los 1s aislados en X y efectuando una nica suma, sin la resta, en el punto correspondiente del
proceso. Anlogamente, en un 0 aislado solo necesita una resta. El resultante Algoritmo de Booth
modificado siempre necesita menos pasos de suma / resta que otros mtodos de multiplicacin vistos.
El proceso de revisar los bits del multiplicador que necesita el algoritmo puede ser visto como una
codificacin del multiplicador usando tres dgitos 0, 1, 1 , donde 0 significa desplazar el multiplicando en
16

relacin con el acumulador, mientras que un 1(1 ) significa sumar(restar) el multiplicando antes de
desplazar. Luego el entero binario.
X = 0111 1011 0010 0011
El cual representa +31.523, puede ser reemplazado por:
X* = 1000 1 101 011 0 0101
Donde cada 1( 1 ) en X* indica que una suma(resta) ser realizada. X * es un ejemplo de un nmero dgito
signado.
Es una variante de la usual notacin posicional la que permite a cada bit tener un peso 2 i (indicado por 1 en
esa posicin) en lugar de los valores normales de 0 y 2i:
De aqu puede expresarse:
X* = 215 211 + 210 28 + 26 25 + 22 20 = 31.523
El proceso de convertir un multiplicador X a la forma dgito signado para simplificar el proceso de
multiplicacin es llamado recodificacin del multiplicador. La figura da las reglas

Esto es llamado recodificacin de dgito signado cannica. Primero x -1 = x0 es agregado a la izquierda del
nmero de entrada x0x1 ... xn-1 para formar X = x -1x0x1 ... xn-1. X es explorado de derecha a izquierda y el
par de bits xi-1xi es usado para determinar el bit xi* del nmero de salida X*
Un flag f, el que se inicializa con 0, es puesto a 1(0) mientras atravesamos un conjunto de 1s (0s). Note que
f no se modifica cuando se encuentra un 1(0) aislado en un conjunto de 0s(1s). Aplicando estas reglas al
nmero X anterior obtenemos la forma cannica:
X* = 1000 01 01 0010 0101
La que contiene ms 0s que la obtenida antes. En promedio, un nmero de n bits en 2 complemento contiene
n/2 0s. La representacin dgito signada cannica, sin embargo, contiene en promedio 2n/3, lo que muestra
que se necesitan un tercio menos de operaciones de suma / resta.
Multiplicadores con arreglos combinacionales (WTF)
Los avances en la tecnologa VLSI han hecho posible construir circuitos que realicen multiplicaciones de n x
n bits para valores relativamente grandes de n. Estos multiplicadores se parecen a los multiplicadores
secuenciales de n pasos discutidos antes, pero tienen n veces ms circuitera lgica para permitir que el
producto sea realizado en un solo paso, en vez de n. Estn compuestos, tpicamente, de grandes arreglos de
elementos combinacionales simples, cada uno de los cuales implementa una operacin de suma, resta o
desplazamiento para pequeas partes de los operandos de la multiplicacin, por ejemplo, 1 bit.
17

Supongamos que tenemos dos nmeros binarios X = x 0x1 ... xn-1 e Y = y0y1 ... yn-1 para ser multiplicados.
Para simplificar asumamos que X e Y son enteros no signados. El producto P = X * Y puede expresarse
como:
n-1

P x i 2n-1-iY
i=0

correspondiente a la multiplicacin usual bit a bit. Ahora reescribmosla como:


n-1

n-1

i=0

j=0

P 2n-1-i x i y j 2n-1-j
Cada uno de los n2 productos de 1 bit xiyj pueden calcularse por una compuerta AND de dos entradas (Note
que los productos aritmtico y lgico coinciden en el caso de 1 bit). Luego un arreglo de nxn compuertas
AND puede calcular los trminos xiyj (La suma de estos es realizada de acuerdo a la frmula por un arreglo
de (n - 1 ) sumadores completos. El arreglo de sumadores es esencialmente un sumador ripple de dos
dimensiones. Los desplazamientos que implican los factores 2 n-1-iy 2n-1-j son implementados por el
desplazamiento espacial de los sumadores completos.
El tiempo de multiplicacin de este multiplicador en arreglo es calculado claramente por la propagacin del
carry en el peor caso y puede expresarse como:
2(n - 1)d + d
donde d y d son los retardos de propagacin de los sumadores completos y la compuerta AND,
respectivamente.
Note que el costo de componentes de este multiplicador aumenta como n 2. Sin embargo, la organizacin en
arreglo es conveniente para la fabricacin de circuitos VLSI.
Las funciones de las compuertas AND y los sumadores pueden combinarse en una sola celda, como se
muestra. Esta puede verse como la evaluacin de la expresin aritmtica:
ac + b + d
n2 celdas de este tipo pueden usarse fcilmente para construir un multiplicador de estructura uniforme.
Otros esquemas de multiplicacin, tales como Booth, tambin pueden ser implementados con arreglos
combinacionales, pero las celdas que necesitan son algo ms complejas.

El proceso log-sum (WTF)


Si en lugar de tener un multiplicador de operandos de 2n bits, tuviramos dos multiplicadores, cada uno de
los cuales pueda manejar un multiplicando de n bits y un multiplicador de n/2 bits, podramos realizar las
multiplicaciones de la mitad superior y la mitad inferior del multiplicando en paralelo. Si el tiempo para la
multiplicacin completa es:
T1 = n(A + S),
18

Donde A es el tiempo para la suma y S es el tiempo para el corrimiento, entonces con dos multiplicadores:
T2 = n/2 (A + S) + A,
Donde la primer parte es el tiempo de multiplicacin en paralelo y la segunda es la suma para unir los dos
productos.
Podemos generalizar este proceso a m multiplicadores y lograr una velocidad del O(log n).
MULTIPLICACIN DE ENTEROS SIGNADOS

X ( xn 1 ,..., x0 )
Y ( yn 1 ,..., y0 )
xn 1 , yn1 dgito signado

1) SIGNO MAGNITUD

P X .Y ( P2 n 1 , P2 n 2 ,..., P0 )

P2 n 3 ,..., P0

Se obtiene haciendo el producto de ambas magnitudes.

P2 n 1 xn 1 yn 1

P2 n 2 0
2) NOTACION COMPLEMENTO A LA BASE

X ( xn 1 ,..., x0 )
Y ( yn 1 ,..., y0 )
Sin pasarlos a signo magnitud, operar y luego volver a notacion complemento podriamos operarlos
directamente.
Si por ejemplo X<0, Y>=0
X es un pseudos-positivo de magnitud
magnitudes:

2n X

luego cuando multiplico segn lo visto con

P (2n X ).Y 2n.Y X .Y


El resultado correcto es 2

2n

X .Y . Hay dos soluciones a este problema:

1. Restar al resultado as obtenido 2 n.Y , esto es sumar

22 n 2n.Y

con lo cual queda

P 2n.Y X .Y 2 2 n 2n.Y

19

2. Asumir a X de doble extensin

X 22 n X

Esto implica que tanto el acumulador (A) como la ALU son de 2n bits?
No, se trataria de una extensin virtual, se sigue trabajando con n bits, slo se controla lo que ingresa por
izquierda en los corrimientos derecha.
Ingresa 0 hasta la primer suma,
Si Y<0, X >=0

xn 1 a partir de esta.

P (2n Y ). X 2n. X Y . X

Asumir Y de doble extensin se traduce en el doble de iteraciones NO CONVIENE. La solucin es


corregir al final.
En qu podra beneficiarnos recodificar con BOOTH?
1. MULTIPLICADOR (Y) NEGATIVO EN NOTACION 2COMPLEMENTO
Cuando recodificamos segn Booth entregamos n bits dgitos signados sin incluir lo que serpa una
n
ltima suma (posicin n) con lo cual al resultado de hacer (2 X ). X se le estara restando 2 n. X
.

2. Si codificamos de a mas de un bit, no de forma convencional, sino empleando Booth veremos que se
simplifica la tarea de generar mltiplos del multiplicando de forma convencional con c bits por vez.
Se necesitan 2c 1 mltiplos

20

0 01 10 01 00
^
^
bit extra
bits extras
-4.22x. = -1
0
2 .2x = 2
-2.22x = -8
2.24x. = 32

Divisin
Divisin de enteros positivo
El proceso de multiplicacin tiene por entradas un multiplicando de n bits, un multiplicador de m bits y
produce como salida el producto de (n + m) bits. La divisin tiene por entradas un dividendo de (n + m) bits,
un divisor de n bits y produce dos salidas, el cociente Q de m + 1 bits y el resto R de n bits, tales que:
x = y Q + r, 0 r < y
El mtodo normal de papel y lpiz, asumiendo un sistema de nmeros posicional de base b, necesita de un
trabajo de suposicin. Al primer dgito de q, qm, se le da un valor; se calcula el producto y.q m y se lo resta a x.
Si esta operacin produce un valor negativo, qm era muy grande y se intenta con otro valor ( uno ms chico).
Si el resultado fuese positivo pero ms grande (o igual) que y, entonces q m era muy chico y se necesita un
valor ms grande. El dgito correcto qm es tal que:

0 X - Y.q m .b m < Y.b m


Una vez que qm fue generado, el proceso continua con qm-1 reemplazando x por

X - Y.q m .b m

(referido

como dividendo parcial) y as hasta obtener q0. El ltimo dividendo parcial es el resto r.
Esto de probar y si se falla volver atrs (al dividendo original) para seguir con otro valor del Q i se conoce
como DIVISION CON RESTORING. Cuando b = 2, o sea, cuando estamos en el sistema binario, solo
tenemos dos posibles suposiciones: 0 o 1. Esto significa que el algoritmo (todava con restoring) con x e y
de n bits, puede ser expresado como:

OBS: en el cuaderno esta 2n-1 y Qn-1

21

El else del paso 2 es engaosamente simple. Si la resta resulta negativa, tenemos que sumar para restaurar
x.
Registros: AMQ () registro doble de 2n bits concatenado con corrimiento a izquierda.
Inicialmente A=0, MQ= X y B=Y.
Se procede con las comparaciones y en esos corrimientos a izquierda (buscando posiciones inferiores del
dividendo) se aprovecha al MQ para ingresar los bits resultantes del cociente. Al final queda A = el resto,
MQ = el cociente.
EJEMPLO EN EL CUADERNO
DIVISIN SIN RESTORING
La situacin puede evitarse usando una tcnica sin restoring.
Como dijimos antes las nicas dos alternativas en el sistema binario son 0 y 1. Volviendo al paso 2, cuando z
es negativo (cuando suponemos mal), tenemos

OBS: cosas raras distinto al cuaderno


22

ALTERNATIVA PARA DIVISION RPIDA


Dado que tiempo atrs el hardware era muy costoso y que la divisin era una operacin frecuente frente al
producto, entonces ms que implementar divisores rpidos se recurra aun en supercomputadoras a mediante
el empleo de multiplicadores rpidos obtener en un proceso iterativo el cociente . Se basa en el clculo de la
reciproca.
Q= X/Y
Si logramos calcular una serie de ri de forma tal que

x.r0 r1r2...
Q

y.r0 r1r2...

converja rpidamente a 1, tendremos que

converja rpidamente a Q.

x.r0 r1r2...
y.r0 r1r2... 1

Sin prdida de generalidad asumimos X e Y mantisas fraccionarias normalizadas, con lo cual


Y=1-b 0 p b 1/ 2 sea de la forma 0.|xxxx
Si hacemos

r0 1 b

yr0 (1 b)(1 b) 1 b 2 ser de la forma 0.11xxx


Y as anlogamente

r1 1 b 2

y.r0 r1 (1 b 2 )(1 b 2 )

y.r0 r1r2 (1 b 4 )
Se ve que rpidamente

0.1111xxxx

0.11111111xxxx

y.r0 r1r2...

converge a 1, por lo tanto

x.r0 r1r2... lo hace al cociente Q.

Como se calcula los distintos coeficientes?


De forma genrica:

y.r0 r1...rk 1 1 Z k

con lo cual

rk 1 Z k 2 (1 Z k ) 2complemento (1 Z k )
Divisin Sin Restoring en 2 complemento
Aunque muchas unidades de divisin, o ALUs, convierten primero de 1 o 2 complemento a signo magnitud
antes de realizar la divisin, y entonces aplican el algoritmo anterior, algunas de ellas usan directamente el
sistema de representacin original. (Ntese que en el algoritmo de signo magnitud necesitamos sumar y
restar, que es convertir hacia atrs y adelante a la forma seudo-complemento)
Dados x e y, buscamos q y r tales que:
x = y.q + r, con r y x del mismo signo y 0 |r| < |y|
La primera modificacin al algoritmo para enteros positivos es una extensin de signo ligeramente diferente.
Si x e y son cantidades de (n+1) bits, con x n e yn codificando sus respectivos signos, el primer bit del
cociente de (n+1) bits, qn, ser:
qn = xn yn
23

La extensin de signo permitir tambin la generacin de n bits adicionales en el cociente, que es lo que
necesitamos para extender x en n bits. Ahora, si el dividendo (parcial) z (inicialmente, x extendido) e y son
del mismo signo, restamos y (sumndolo en 2 complemento). De lo contrario, si z e y son de signos
opuestos, sumamos y. En ambos casos esto tiende a disminuir el valor absoluto de z. Cuando lo aplicamos al
primer dgito del cociente, produce:
z = x (1 2qn)2n-1.y
donde el x en el lado derecho de la expresin contiene al x extendido. Si el dividendo parcial resultante z e y
son del mismo signo, entonces qn-1 ser puesto a 1. Por ejemplo, asumiendo x, y y z positivos, q n sera 0 y
podemos razonar como en el caso de la divisin de enteros positivos. Si las tres cantidades son negativas, q n
es nuevamente y probaremos de achicar x en valor absoluto. Si el resultado es nuevamente negativo no
intentaremos ms (nuestra suposicin fue correcta) y el primer bit del cociente positivo ser 1. Si ahora x es
positivo, y es negativo, o sea, q n es 1, y el z resultante es negativo (como y), nuestra suposicin est
mal, porque 2n-1.y es mayor en valor absoluto que x. Entraremos un 0 en el bit del cociente (mala suposicin)
pero, puesto que el ltimo est en 2 complemento, entraremos su complemento que es un 1. El mismo tipo
de razonamiento se aplica para los 8 casos posibles.
Podemos repetir el proceso anterior hasta el ltimo bit del cociente q 0. En este punto tenemos que resolver
dos pequeos problemas. El primero es que deseamos tener r y x del mismo signo, y el segundo est
relacionado con la representacin en 2 complemento, a la cual le sobrar 1 si el cociente es negativo, o sea,
en esencia, tenemos que generar el 1 complemento.
Por lo tanto, si el ltimo dividendo parcial generado, llamado z0, y x son del mismo signo, podemos poner
r=z0 y q0 = 1. Esto es evidente si tambin y es del mismo signo. Por otro lado, si y fuera de signo opuesto,
entonces r es correcto, q0 es correcto y por esto debemos entrar un 0 en esa posicin. La transformacin de 1
a 2 complemento sumar un 1 en la ltima posicin del cociente, por esto debe ponerse q0 = 1.
Si x y z0 son de distinto signo tenemos dos casos:
Si x e y son del mismo signo (luego z0 tambin), entonces q0 = 0 y restauramos r = z0 + y. Si x, y > 0
seguimos como vimos para enteros positivos. Si x, y < 0 el cociente es positivo y 0 es el bit generado por
una mala suposicin.
Si x e y son de signo diferentes y z0 es del signo de y, r es correcto e igual a z0 y, q0 = 1 (mala suposicin
para un cociente negativo) y q es incrementado en 1 para la representacin en 2 complemento
El algoritmo es como sigue

24

Divisin SRT
En la divisin sin restoring, se realiza una operacin con la ALU (una suma o una resta) en cada paso, y
parece no haber lugar para una operacin de salto. Pero pensemos a la divisin de la siguiente manera: Para
calcular a/b, restemos mltiplos de b en a, y luego devolvemos cuntas restas realizamos. En cada etapa del
proceso de resta el resto debe caber en un registro P. Cuando el resto es un pequeo entero positivo,
normalmente restamos b; pero en lugar de esto supongamos que solo lo desplazamos y restamos b la
siguiente vez. Tan pronto como el resto sea lo suficientemente chico (esto es el
bit ms alto sea 0), luego de desplazarlo
deberemos ponerlo en P, y no perderemos
informacin. Adems, este mtodo no
necesita cambiar la forma de contar el nmero
de veces que restamos b de a. Esta idea
normalmente se conoce como divisin SRT,
por Sweeney, Robertson y Tocher, quienes
independientemente propusieron algoritmos
de esta naturaleza. El principal problema de
este mtodo es que los bits del cociente no
pueden determinarse directamente en cada
paso del signo de P, como puede hacerse en la
divisin sin restoring
Se vio que trabajando sin restoring en cada paso, iteracin, se suma o se resta independientemente de si los
dgitos del cociente eran o no 0s.
Pero pensemos que si el dividendo es relativamente pequeo podramos asumir el bit del cociente en 0 y
producir un nuevo dividendo con el mero desplazamiento a izquierda de ese dividendo sin que se produzca
error en la medida de que no se desborde el acumulador.
S i a esto le sumamos notacin redundante digito signado lo cual permitira corregir el cociente (si me he
pasado de largo) estamos ante la posibilidad de un esquema algortmico de divisin diferente ya no de
prueba y error.

25

Ms precisamente, para dividir a en b, nmeros de n bits, trabajamos con n+1 bit (signo):
MQ a (dividendo)
B b (divisor)
A0
1. Si B tiene k ceros por delante cuando lo expresamos en n bits, desplazamos todos los registros
(A.MQ y B) k bits a la izquierda. Luego, como b tena n + 1 bits, los ms significantes sern 0 y los
restantes 1.
2. For i = 0 to n 1
Si los tres bits ms significativos de A son iguales
qi= 0
desplazar (A.MQ) un bit a la izquierda
Si los 3 son distintos y A es negativo
qi = -1
desplazar (A.MQ) un bit a la izquierda
sumar B
Sino (distintos y A >=0)
qi = 1
desplazar (A.MQ) un bit a la izquierda
restar B
3. Si el resto final es negativo, corregirlo sumando B, y corregir el cociente restndole 1 (Q Q-1).
Finalmente, debemos desplazar el resto k bits a la derecha, donde k es el desplazamiento inicial y
debemos evaluar Q en un circuito que pueda realizar resta (parte >0 parte<0).
Trabajando en base 2, los dgitos del cociente sern -1,0,1. Reiterando que se basa en no desbordar el
acumulador, la eleccion del qi respectivo en la iteracin i, el dividendo parcial para la prxima, esto es r i+1,
estr acotado para la representacin posicional digito signado entre los valores extremo:
(0.MIN MIN MIN)B<= Ri+1<=(0.MAX MAX MAX)B **1**

podemos escribirla como:


-B/2(1.111)<= Ri+1<=B/2(1.111..)
Recordando que la serie X 0 X 1 X 2 ... X n con n oo converge a 1/(1-x) para todo x<1, en
particuar x=1/2.
Dado que para el dividendo parcial negativo resultar posible su correccion sumandole B en la posicin
menos significativa con lo cual el mnimo a codificar admite B (1/2)n.
B<= Ri+1<=B

**2**

Ri+1=2Ri Qi+1B

Adoptando de tal forma un dgito del cociente Qi+1


-B<= (2Ri Qi+1B )<B **3**

26

SRT busca aprovechar toda vez que se pueda correr sobre los 0s. De **3**, lo mismo que de su grfica se
puede concluir que el valor Qi+1=0 se puede asumir para un Ri
Si ri >= B/2 Qi+1=1, Si Ri< -B/2 se adoptaba Qi+1 =
Asumimos, sin prdida de generalidad B fraccionario, el punto a izquierda.
Luego con el eventual corrimiento del primer paso podemos asegurar que B>=1/2.
La decisin de adoptar Qi+1=0 para los 3 bits mas significativos iguales (paso 2a) se produce en un rango
para el dividendo (Ri) 1.11xxx <= Ri <= 0.00xxx
Es decir -1/4 <= Ri <= (dado que B>=1/2)
Se verifica que con 3 bits iguales es correcta la adopcin de Qi+1=0. El dividendo para el prximo paso dado
que la decisin se toma a partir de R >= o Ri < -1/4 asegura que 1/2<= Ri+1<=1/2 con lo uqe el dgito del
signo es redundante, con lo cual alcanza n bits (AW,A) esto es opero sin bit de signo.
El signo lo fija el segundo bit (b replica).
1.1xxx <= Ri+1<= 0.00xxx miramos 0.01 signo es redundante.
Veamos base 4
Se razona de igual manera notacin redundante digito signado y planteo de no desbordar el acumulador.
Se ir definiendo de a 2 bits del cociente, reduce las iteraciones a la mitad.
Condicin para asegurar el no desborde de A
-2/4(1.010101)B <= Ri+1<= 2/4(1.010101..)B

X 0 X 1 X 2 ... X n

8
86
2
B 2B
B B con x= converge 1/(1-x) = 1/(1-1/4)=4/3 n oo
3
3
3

-2/4.4/3.B <= Ri+1< 2/4.4/3.B

27

Se ha visto que el dividendo negativo se puede corregir sumndole B al dividendo menos representable.
Se lee: el dividendo que puedo entregar a partir de los rangos propuestos.

2
4. B 2 B
3
8
86
2
B 2B
B B
3
3
3

Cmo determinar el valor correcto para el cociente?


Se verifica que analizando 6 bits del dividendo y 4 del divisor, accediendo a una LOOK UP TABLE se
puede obtener dicho valor.
SRT Y LOS CSA
Srt como se vio para decir el qi, no se vale de todo el dividendo (2 bits, 6 bits ms significativos con base 2,
4 respectivamente). Se podra iterar con el dividendo completo en los CSA y solo procesar los bits mas
significativos (para la consulta) en un sumador paralelo (en este caso de pocos bits).
Con esta convencin, el registro P almacena nmeros que satisfacen 1 P < 1. El primer paso del algoritmo
desplaza b para que sea b . Como antes, r es el valor del par (P,A). La regla por la cual realizamos la
operacin de la ALU es esta: si r < (que es verdad cuando los tres bits ms altos de P son iguales),
calculamos 2r desplazando (P,A) un bit a la izquierda; sino si r < 0 (y luego r < , ya que si no sera
eliminado por la primera condicin), calculamos 2r + b desplazando y sumando, sino r y restamos b de
2r. Teniendo b , es fcil verificar que estas reglas mantienen r < . Para la divisin sin restoring,
solo tenemos |r| b, y necesitamos un P de n + 1 bits de ancho. Pero para la divisin SRT, el lmite de r es
menor, o sea r < .
Adems podemos ahorrar un bit ms eliminando el MSB de P (y de b y del sumador). Luego, la revisin de
la igualdad de los tres MSBs de P se transforma en solo dos bits.
El algoritmo podra cambiar un poco al implementarlo. Luego de cada operacin de la ALU, el registro P
puede ser desplazado tantos lugares como se necesiten para hacer P o P < . Desplazando k lugares,
los k bits del cociente son puesto a cero todos a la vez. Por esta razn la divisin SRT se define a veces
como la que mantiene el resto normalizado a |r| .
Vase que el valor del bit del cociente calculado en un dado paso se basa en qu operacin se realiza en l
(la que depende del resultado del paso anterior). Esto se contrasta con la divisin sin restoring, donde solo
depende del mismo paso. Esta diferencia se refleja en el hecho de que cuando el resto final es negativo, el
ltimo bit del cociente debe ser corregido en SRT, pero no en la divisin sin restoring. Sin embargo, el factor
clave en el bit del cociente en la divisin SRT es que puede incluir 1. Asimismo los bits del cociente no
puede almacenarse en los bits ms bajos de A; adems, el cociente debe convertirse a 2 complemento con un
sumador completo. Una forma simple para hacerlo es acumular los bits positivos en un registro y los
negativos en otro, y luego restarlos.
Como hay ms de una forma de expresar un nmero en trminos de 1, 0 y 1, la divisin SRT se dice que
usa una representacin redundante del cociente.

28

Diferencias:

Divisin rpida con un sumador (ANEXO)


Las dos tcnicas para acelerar la multiplicacin con un solo sumador son con CSAs y con bases altas. Pero
hay dificultades al tratar de emplearlas en la divisin sin restoring. El problema con los CSAs es que al final
de cada ciclo el valor de P, que est en la forma carry-save, no se conoce exactamente. Particularmente, el
signo de P es incierto, no obstante este es el que se usa para calcular el dgito del cociente y decidir la
siguiente operacin de la ALU. Cuando se usan bases altas, el problema es decidir que valor restar de P. En
el mtodo de papel y lpiz, debemos elegir el dgito del cociente. En la divisin binaria solo hay dos
posibilidades; debemos ser capaces de refinar el problema suponiendo inicialmente un uno e ir ajustando las
suposiciones basndonos en el signo de P.
Esto no funciona para bases altas porque tenemos ms de dos posibilidades; tener todas las opciones puede
complicarse: tendramos que calcular todos los mltiplos de b y compararlos con P.
Ambas tcnicas pueden funcionar si usamos representacin redundante del cociente. En la divisin carrysave, la idea es, como el resto (el registro P) no se conoce, el dgito exacto del cociente tampoco es
conocido. Pero gracias a la representacin redundante, el resto no necesita conocerse precisamente para
poner un bit al cociente.
Esto se muestra en la figura, donde el eje x representa r i, el contenido del par de registros (P,A) luego de i
pasos.
La lnea llamada qi = 1 muestra el valor que ri+1 tendr si elegimos qi = 1, y equivalentemente para las dems.
Podemos elegir cualquier valor para qi, mientras que ri+1 = rP qiB satisfaga | ri+1 | B. Los rangos
disponibles se muestran en la mitad derecha de la figura. De este modo solo necesitamos conocer r de forma
bastante precisa para decidir en qu rango cae.

Estas son las bases para usar sumadores CSAs. Mirar los MSBs del CSA y sumarlos en un sumador
propagado.

29

Y entonces usar esta aproximacin de r para calcular q i, normalmente con la ayuda de una tabla lookup. La
misma tcnica funciona para divisin de base alta (cuando se usa o no un CSA). Los MSBs de P pueden
usarse para indexar un tabla que da uno de los dgitos vlidos del cociente.
Un desafo de diseo se presenta cuando construimos un divisor SRT de alta velocidad es establecer cuntos
bits de P y B necesitaremos examinar. Por ejemplo, supongamos que tenemos base 4, usemos dgitos del
cociente de
2, 1, 0, -1 y 2, pero tenemos un sumador propagado. Cuntos bits de P y B examinaremos?. Decidirlo
involucra dos pasos. Para una divisin normal sin restoring en base 2, donde en cada etapa |r| b, el buffer P
no tiene overflow. Pero para base 4, se calcula r i+1 = 4ri qib en cada etapa, y si r i est cerca de b, entonces
4ri estar cerca de 4b, e incluso el dgito ms grande del cociente no llevar a r dentro del rango | r i+1 | b.
En otras palabras, el resto crecer sin lmite. No obstante, restringiendo a |r i| 2b/3 hace fcil verificar que
ri quedar limitado.
Luego de establecer el lmite que debe satisfacer ri, podemos dibujar la figura, que es anloga a la anterior.
Si ri est dentro de (1/12)b y (5/12)b, podemos poner q = 1, y as hasta el final. O visto de otra forma, si r/b
est entre 1/12 y 5/12, ponemos q = 1. Supongamos que miramos 4 bits de P y 4 bits de b, y los MSBs de b
son 1001xxx
Para simplificar las cuentas, imaginemos el punto binario en el extremo izquierdo de cada registro. Como
truncamos, r (el valor de P concatenado con A) tendr un valor desde .0011 a .0100, y b tendr un valor
desde 1001 a .1010. Luego r/b ser tan pequeo como .0011/.1010 o tan grande como .0100/.1001. Pero .
00112/.10102 = 3/10 < 1/3 necesitar un bit de cociente de 1, mientras que .0100 2/.10012 = 4/9 > 5/12
necesitar 2. Esto hace que 5 bits para P y 4 para b sean suficientes. Esto puede verificarse chequeando todos
los casos

30

Divisin con multiplicacin repetida (ANEXO)

31

Pipeline
Requerimientos bsicos para un PC
El PC consiste desde el punto de vista del programador de:
Un conjunto de registros que definen el estado del sistema;
Un conjunto de registros que contienen operandos y resultados temporarios de clculos;
Una ALU que ejecuta instrucciones de acuerdo a sus opcode y operandos asociados como se implica en la
descripcin del set de instrucciones.
Procesador Central
-Fetch: Bsqueda desde memoria, carga IR (Instruccin register)
-Decodificacin: Establecer el tipo de instruccin, hacerse de los operandos y controlar la ejecucin (ordenar
el control sobre el data path)
-Ejecucin: Se realiza la operacin que propone el opcode.
HAY DOS DIBUJOS GRANDOTES
Acelerando el ciclo de instruccin
En camino a lograr acelerar la ejecucin de las instrucciones, podemos pensar en hacer un solapamiento de
las distintas fases que intervienen en la ejecucin de las mismas. Para ello es importante determinar que
recursos estn involucrados en cada fase, los cuales debern estar libres al comienzo de las mismas y
tambin determinar cules son los recursos que se liberan al final. Esto mostrar que recursos son crticos y
eventualmente la posibilidad de duplicarlos para conseguir una mayor concurrencia.
Bsqueda de instrucciones (fetch)
El tiempo del fetch se consume en el acceso a memoria para obtener la instruccin. Ms all de ver de
acelerar este proceso (ej cache), se puede pensar en introducir un buffer de instrucciones look ahead.
Mientras el CPU procesa una instruccin ir a memoria en bsqueda de lo que podr ser la/s prxima-.
Ejemplo en 8086/8088
Lo ideal sera evitar los accesos al MP. Esto es
posible cuando tenemos look-behind y look-ahead.
El look-ahead consiste en tener en el procesador un
buffer que almacene temporalmente la informacin que
se trae por adelantado, de manera tal que cuando esta se
necesita, ya se dispone de ella. El look-behind consiste
en que una instruccin permanece en el buffer de
instruccin decodificada y/o ejecutada hasta que las m
instrucciones que le siguen hayan sido decodificadas.
Con esto se da la situacin tpica de saltos hacia atrs
dentro de la ejecucin de un programa; en la medida en
que el salto est contenido en el buffer tendr que
modificar un puntero al buffer y evito con esto un
acceso a memoria.
Cuando se completa la parte destinada a look-behind se pierde la instruccin que ha estado ms tiempo
almacenada reemplazndola por la nueva instruccin.
Los lmites dentro del buffer para el look-ahead y look-behind varan. Esta forma de trabajo sera asimilable
al funcionamiento que tiene la memoria cache.

32

Aceleramiento decode
El mayor tiempo que se consume en esta fase no es de decodificacin, sino el que se consume en la
obtencin de las direcciones efectivas y bsqueda de los operandos. La mejor manera de minimizar estas
operaciones es eliminarlas. Esto significa que las instrucciones registro-registro sean usadas tanto como sea
posible. Es una alternativa en CISC, nica posibilidad en RISC
Aceleramiento Ejecucin
En primer lugar podemos utilizar algoritmos y sus respectivas implementaciones eficientes . Un paso
adicional en tal sentido podr ser disponer de varias unidades funcionales que operen en paralelo. Ms an,
unidades dedicadas en general sern ms eficaces que mltiproposito.
Si permitimos superposicin en la ejecucin, entonces necesitaremos algn mecanismo de control de HW, el
cual pueda chequear el orden permisible de operaciones. Estos controles pueden hacerse muy complejos. De
la misma manera, si se permite concurrencia en la ejecucin, entonces deben modificarse los programas para
que tomen ventaja de esto. Implica deteccin de paralelismo y planificacin.
Una vez optimizadas estas tareas como se puede alcanzar nuevas mejoras? Con el Pipeline
Para reducir los tiempos de ejecucin podemos realizar actividades concurrentes. La concurrencia se puede
lograr con 2 alternativas:
Paralelismo: duplicar recursos para realizar actividades simultneas e independientes.
Solapamiento (Overlap): implica dividir una tarea en subtareas, dedicando un hardware especfico a cada
una de ellas, etapa o segmento del pipeline y alcanzar una ejecucin solapada de distintas tareas. (en
distintas etapas de ejecucin).
El pipeline es una tcnica de implementacin mediante la cual mltiples instrucciones son superpuestas en
ejecucin (solapadas). Hoy da es la tcnica de implementacin clave para hacer CPU ms rpidos.
El pipeline es una tcnica de implementacin que explota el paralelismo entre instrucciones, en un flujo
secuencial de instrucciones.
El tiempo para obtener el resultado (en rgimen) no depende de la profundidad del pipeline sino de la etapa
ms lenta. Solo depende del rgimen con que se puedan ingresar nuevas tareas.
Su funcionamiento es sincrnico, a los impulsos de un reloj la operacin progresar en el pipe. La etapa ms
lenta constituye el cuello de botella para el temporizado.
En la medida de que una etapa carezca de su memoria buffer, originalmente se debern introducir buffer a la
entrada de las etapas a los efectos de aislarlos entre si.

= Periodo del reloj del Pipe


Lo determina la etapa ms lenta sumado al retardo del latch
Tk k 1 n

Tiempo de computo de
n operaciones

Setup
El pipeline incrementa el throughput de instrucciones del CPU (n de instrucciones completadas por unidad
de tiempo), pero no reduce el tiempo de ejecucin de una instruccin individual (latencia), es ms, lo
incrementa un poco debido al overhead en el control del pipeline. El incremento del throughput de
instrucciones significa que el programa corre ms rpido y tiene un menor tiempo de ejecucin.
n
n

(k 1) n
Con n1 se aproxima el w a la frecuencia de traslado ( =1/f)
W

33

Latencia y throughput resultan antagnicas. Dos cuestiones daan la latencia en el pipe:


1) La no equiparticin (hay que trabajar a la velocidad de la ms lenta).
2) La consideracin ms importante es el efecto combinado del delay de los latches y el desvo del reloj.
Para aislar las etapas entre s, esto es que puedan funcionar con distintos datos (en diferentes estados),
requerirn en general buffers interetapas. Estos latch tienen un tiempo de setup y un delay por cada ciclo de
reloj. Cuando el ciclo de reloj es muy chico, la suma de los retardos, los delays y el skew hacen que el
pipeline no sea tan til.
La performance ideal en un pipeline se mide por la ganancia de velocidad contra una mquina sin pipeline:
Speedup (en condiciones ideales) = Promedio de Tiempo de instrucciones sin pipeline / Promedio de Tiempo
de instrucciones con pipeline
nk
nk
Sk

k n 1
k 1 n
n>>k ( n )
Skk
Condiciones para viabilizar un Pipeline
1. La evaluacin de la funcin bsica es equivalente a la evaluacin secuencial de las subfunciones
que la constituyen.
2. Las entradas de una subfuncin provienen nicamente de las salidas de sus subfunciones previas
en la secuencia
de operaciones.
3. Solo existe intercambio de entrada/salida entre sus subfunciones.
4. Requiere de hardware necesario para la evaluacin de las subfunciones (etapa del pipe).
5. El tiempo requerido por estas unidades es aproximadamente el mismo.
Eficiencia
Entendida como el grado de ocupacin de las etapas.
tiempo de efectivo uso x Recurso
nk
n

tiempo total afectado x Recurso


k 1 n
k k 1 n
1
n
S
k por lo tanto con eficiencia 1 el speed up k
K

CLASIFICACIN DEL PIPELINE


De acuerdo al nivel de procesamiento:
Pipeline Aritmtico.
Estructura las unidades funcionales (ALU) en pipeline, con lo cual solapamos el procesamiento sobre
distintos datos. Las unidades lgicas pueden ser segmentadas para operaciones de pipeline.
Pipeline de Instrucciones.
Se divide el procesamiento de una instruccin en fases, se asigna hardware especfico a cada fase y luego se
acomete el procesamiento concurrente de mltiples instrucciones. Originalmente se lo refiri como look
ahead de instrucciones.
Pipeline de Procesos
Procesamiento en pipeline del mismo string de datos por una cascada de procesadores. El data string pasa
por el primer procesador y sus resultados se almacenan en memoria, la cuales accesible por el segundo
procesador, y as siguiendo hasta completar la tarea.
34

De acuerdo a su configuracin y estrategia de control


Unifuncional vs. Multifuncional.
El multifuncional tiene mltiples funciones que pueden ser en diferentes tiempo o en el mismo tiempo. El
unifuncional siempre es esttico.
Estticos vs. Dinmicos.
Los estticos asumen una sola funcin por vez (podran ser unifuncionales o multifuncionales). Para que el
pipe esttico sea eficaz deber ejecutar operaciones del mismo tipo con cierta continuidad (procesador
vectorial). Dicho de otra manera los cambios de configuracin si los hubiera deberan ser esperados. Caso
contrario la performance ser relativamente baja.
Los dinmicos permiten que varias configuraciones existan simultneamente. (siempre ser multifuncional).
La configuracin dinmica precisa de mecanismos de control y secuenciamiento mucho ms elaborados que
aquellos para pipeline estticos.
Escalar vs. Vectorial.
Depende del los datos o del tipo de instrucciones.
Escalares. Procesa una secuencia de operandos escalares bajo el control del software (do, loop).
Vectorial. Tiene instrucciones para operar con vectores, luego la sucesin de operaciones sobre los
componentes escalares de los vectores se manejan a travs de hardware o firmware. Deber ser
configurado para cada operacin, aunque sean las mismas, dado que se los instruye adems de la
operacin, respecto a la ubicacin de los vectores, dimensin, etc. Ej. Pipeline multifuncional
estticamente configurado.
Z
TFlush
Tsup1

Tsup2

N cardinalidad del vector

Tsup1 > Tsup2 por la configuracin


TFlush: Se debe expresar que se vacie el pipe antes de iniciar una nueva operacin. La pendiente es menor por
2 cuestiones:
1)La tarea de hacerse de los operandos es por hardware
2)Un procesador vectorial organiza a la memoria de manera muy ajustada a sus requerimientos(asegura
fluides en el acceso)
Secuenciamiento del pipeline
Si el pipeline es lineal la tarea es trivial. Bastara fijar un perodo de menos que contemple la etapa ms lenta
(eventual latch) y se estar en condicin de iniciar una nueva operacin en cada ciclo de reloj. Situacin
esta que se complica si el pipeline presenta feedback o feedforward en su evolucin que se traduzca en el
empleo de algunas etapas ms de un ciclo para una dada operacin.
Las etapas podrn ser usadas en ms de una oportunidad, aparece la idea de feedback (realimentacin) o
feedforware. Complican el secuenciamiento.
El timing de los feedback ser crtico para la performance del pipeline, lo mismo que la adopcin de
secuenciamientos ptimos.
Tabla de reservacin. Es un mtodo para el secuenciamiento ptimo de un pipeline estticamente
configurado sin colisiones.
Se construye una tabla de reservacin:
Tantas filas como etapas.
Tantas columnas como ciclos de reloj consuma una operacin.
Tendr una marca para indicar la ocupacin de una dada etapa en un determinado ciclo.
35

A partir de la tabla construimos el vector de colisin observando las latencias crticas. C= {Ci}
Ci= (latencia) (tiempo entre 2 iniciaciones) = 0 si permitida
1 si prohibida
En el diagrama la posibilidad de colisin la dan la presencia de mltiples xs en una fila.
Las latencias crticas se computan a partir de las distancias entre cruces de una misma fila.
El vector de colisin tiene una cardinalidad dada por la mxima latencia prohibida
Diagrama de iniciaciones
El objetivo es encontrar ciclos (cerrados) que aporten la menor latencia promedio.
Latencia promedio= suma de latencias ciclos / nro de iniciaciones
La menor latencia promedio alcanzable a nivel terico es el nmero mximo de cruces de una fila de la tabla
La latencia promedio mxima de un ciclo greedy es 1 ms el nmero de 1s del vector de colisiones.
Procesador DLX
Refleja el estado de las arquitecturas RISC al principio de los 90.
Caractersticas:
Instrucciones de tamao fijo (32 bits).
Formato fijo.
RAR (registro a registro), solo load/store con memoria
Pipeline de Instrucciones para DLX
Todas las instrucciones pueden ser partidas en cinco pasos bsicos:
1. Instruccin Fetch: Se enva el PC y se trae la instruccin de memoria ponindola en el IR (registro de
instruccin).
2. Instruccin Decode/Register Fetch: Se decodifica la instruccin y accede al register file para leer los
registros. Tambin se incrementa el PC para apuntar a la prxima instruccin. La decodificacin puede ser
hecha en paralelo junto a la lectura de los registros.Instrucciones con formato fijo.
3. Ejecucin / Clculo direccin efectiva: La ALU opera con los operandos de la etapa anterior realizando
una de las siguientes tres funciones:
- Referencia a memoria. La ALU suma los operandos para formar la direccin efectiva y el MDR es
cargado si es un store.
- ALU instruccin. La ALU realiza la operacin especificada por el opcode.
- Branch/Jump. La ALU suma el PC con el valor inmediato para computar la direccin del target del
branch. Si es un branch condicional, un registro, que ha sido ledo en la etapa anterior, es chequeado
para decidir si la direccin debe ser insertada en el PC.
4. Acceso a Memoria/completado del branch: Realiza una de las siguientes operaciones:
- Referencia a Memoria. Si la instruccin es un load, los datos son retornados de memoria. Si un
store los datos son escritos en memoria.
- Branch. Si es un branch, el PC es reemplazado por la direccin destino del branch.
5. Write Back: Escribe el resultado en el register file, ya sea que venga de memoria o de la ALU.
Hacer que el pipeline funcione
Todo recurso que es usado en ms de una etapa deber ser, o bien duplicado o bien modificado para
eliminar una eventual colisin:
- Datapath
- instruccin path
Todo dato generado en una etapa que ser consumido ms adelante deber ser buffereado, caso contrario
ser destruido por la instruccin siguiente.
buffers de la ALU.
36

Requerimientos bsicos para implementar un pipeline de instrucciones


1) Introducir buffer inter etapa toda vez que la etapa no cuente originalmente con su memoria
2) Todo recurso que es usado en ms de una etapa deber o bien ser modificado o duplicado para hacer
efectivo el solapamiento de las etapas en cuestin.
3) Todo dato que es usado ms adelante en el pipe ( ms all de la etapa siguiente a la que se produce)
deber ser adecuadamente buffered.
4) Un pipe de instrucciones no podr hacerse arbitrariamente profundo. El tiempo de ciclo mnimo no
determinara las operaciones que tienen que ser atmicas para posibilitar el flujo de instrucciones
dependientes en el pipe.
Manejando Interrupciones
Las interrupciones son difciles de manejar en una mquina pipelined porque el solapado de instrucciones
hace ms complicado saber si una instruccin puede cambiar de forma segura el estado de la mquina. En
estas mquinas, una instruccin se ejecuta parte por parte y se completa en varios ciclos de reloj. En el
proceso de ejecucin necesita actualizar el estado de la mquina. Mientras se ejecuta, una interrupcin puede
forzar a la mquina a abortar la ejecucin de instrucciones antes de que se completen.
En implementaciones no pipeline, las interrupciones tienen dos propiedades: (1) ocurren entre instrucciones,
y (2) deben ser reiniciables. En nuestro pipeline, muchas instrucciones pueden estar ejecutndose al mismo
tiempo, entonces, para salvar el estado de la mquina y, poder reiniciarla correctamente, se guarda el PC de
la instruccin a reiniciar. Si esta no es un branch podemos continuar con el fetch de forma secuencial, pero,
si es un branch, debemos evaluar la condicin y hacer fetch del target o de la instruccin siguiente. Cuando
se produce una interrupcin, podemos llevar a cabo los siguientes pasos para salvar el estado del pipeline:
1. Forzar una instruccin de trap en el pipeline en el siguiente fetch.
2. Hasta que se tome el trap, se deben rechazar todas las escrituras de la instruccin que caus la
interrupcin y de todas las que le siguen en el pipeline. Esto evita cualquier cambio del estado por parte de
instrucciones que no sern completadas antes de manejar la interrupcin.
3. Luego la rutina de manejo de la interrupcin del SO recibe el control, e inmediatamente salva el PC de la
instruccin que caus la interrupcin. Este valor ser usado luego para el retorno de la rutina.
Despus de manejar la interrupcin, se usan instrucciones especiales para devolverle el estado a la mquina.
Pipeline Hazard
Hay situaciones, llamadas hazard, que impiden que la prxima instruccin en el flujo de instrucciones se
ejecute durante su ciclo de reloj. El hazard reduce la performance del speedup ideal ganado por el pipeline.
Un hazard no resuelto condiciona el procesamiento de la prxima instruccin en el pipe, forzar ciclos stall
en un mecanismo que se refiere como pipeline interlock. Cuando una instruccin es stalled, las instrucciones
siguientes tambin son stalled. El stall causa el deterioro de la performance ideal del pipeline.
Se frenan todas las instrucciones posteriores a las del hazard pero las que le anteceden continan fluyendo
en el pipe, que halla o no stall depende de la arquitectura del pipe( estos ocupan etapas sin tarea efectiva).
IPC = Instrucciones por ciclo
CPI= Ciclos por instruccin
El ideal es = 1
Existen tres clases de hazards:
Estructural: Se produce cuando dos etapas diferentes necesitan utilizar el mismo recurso. El HW no
puede soportar la combinacin de instrucciones que se est ejecutando.
Datos: Se dan cuando una instruccin, al ser decodificada, no es independiente en sus operandos de alguna
instruccin previa de algn modo en que la ejecucin solapada puede dar resultados distintos a los de una
ejecucin normal.
Control: Cualquier instruccin que modifique el flujo secuencial de instrucciones. (call, jump, brach, set)
37

El hazard se detecta en la etapa de decode (para detectar los errores hay que saber qu quiere hacer la
instruccin y qu necesita). La instruccin de hazard no se podr decodificar (se frena). El decoder frena
todas las instrucciones posteriores
Hazard Estructurales
Ocurre cuando, al momento de decodificar y por conflicto de recursos, una instruccin establece la
imposibilidad de solaparse con alguna otra que est activa. Claramente colisionara en el pipeline. Las
posibles soluciones seran:
- duplicar recursos, en tanto se justifique. Hay que hacer una ponderacin de cmo repercute en la
performance. El nivel de duplicacin depender de la latencia de la operacin y de la frecuencia de la
operacin.
- Estructurar adecuadamente el pipeline(si se tratase de una unidad funcional). Esto solo se justifica si la
latencia y el throughput lo justifican.
- D-virtuales a nivel de unidad funcional le asociamos a esta un buffer donde encolo las instrucciones que
demandan su operacin. Se irn resolviendo a medida que se computen las previas. De esta forma se
destraba al decode puede seguir con las otras instrucciones. Claramente esto dar lugar a una ejecucin fuera
de otra (ejecucin fuera de orden).
Hazard de datos
El mayor efecto del pipeline es cambiar el tiempo relativo de una instruccin solapando sus ejecuciones.
Esto introduce los hazard de datos. Este ocurre cuando el orden de acceso a los operandos es cambiado por
el pipeline versus el orden normal encontrado por la ejecucin secuencial de las instrucciones.
Los hazard de datos pueden ser clasificados en uno de tres tipos dependiendo del orden de acceso a lectura y
escritura en las instrucciones. Dada una instruccin j a ser decodificada y una instruccin genrica i
(previa) activa en el pipeline, se podr provocar los siguientes hazard de datos:
- RjAWi (Read after write): el conflicto ser que j trata de leer su fuente antes de que i lo escriba (con i<j).
Es estrictamente procedural.
- WjARi (Write after read): aqu j trata de escribir en un destino antes que este sea ledo por i. Luego i
obtendr un valor incorrecto. Esto no ocurre en nuestro pipeline porque todas las lecturas se hacen antes en
el ID y todas las escrituras se hacen despus en el WB.
- WjAWi (Write after write): aqu j trata de escribir en su destino antes de que este sea escrito por i. En ese
contexto la escritura termina realizndose fuera de orden. Se presenta en pipelines que escriben en ms de
una etapa. En el nuestro no ocurre esto (solo se escribe en WB).
En los ltimos dos la dependencia es de nombre, no estrictamente procedural. Por ende la solucin de estos
es ms directa. Estos conflictos se podrn dar tanto operando sobre locaciones de memoria o sobre registros.
38

En memoria se producen si existen accesos fuera de orden. La solucin de HW a estos problemas es lo que
se conoce como renombramiento de registros. Disponiendo de un conjunto de registros fsicos (internos al
CPU), sustancialmente superior al nmero de registros lgicos (los ve el SW), el HW podr asignar
dinmicamente registros fsicos a los registros lgicos. Admitiendo para un registro lgico mltiples
instanciaciones, los conflictos WAR y WAW desaparecen. El WAR se soluciona con un buffer de entrada
que carga los valores dejando libres los registros.
Los hazard RAW se pueden minimizar con la tcnica forwarding.
Forwarding
Una primera alternativa de hardware, no para solucionar el conflicto en general sino para reducir el perjuicio
que pueda ocasionar al pipe es forwarding (o bypass).
Toda vez que un dato sea conocido en el CPU se podran organizar caminos alternativos para el dato de
forma tal que el decoder en lugar de esperar que el dato arribe a destino (resigter + file) se adelante y oriente
a que los datos se obtengan directamente de instancias intermedias.
El forwarding se debe establecer entre las unidades funcionales pipe que producen y consumen resultados.
Si se asume que al banco de resistro se accede 2 veces por ciclo (concebible en pie muy simples y ni
tampoco con la evolucin de la tecnologa). Podramos escribir en la primer mitad del ciclo y leer en la
segunda, eliminando un camino de forwarding

El problema del forwarding no es ni la lgica ni los caminos (buses) alternativos en si mismos. El problema
se puede originar en los retardos que conlleva su implementacin.

39

La solucin a RAW se puede lograr en:

Software:
El compilador podra intentar reordenar el cdigo de forma de evitar reducir los stalls que se originan en
instrucciones que son dependientes entre si (una instruccin requiere del resultado de una instruccin
previa). Static scheduling----------------------------------------------------------------------------En general esta tarea se enfrenta con 2 problemas:
1. Enfrenta conflictos de nombre que se podrn solucionar con renombramiento ( limitacin en la cantidad
de registros que tiene).--------------------------------------------------------------------------------2. Limitacin con las referencias a memoria (incapacidad de memory desambiguation)

Hardware
Scheduling Dinmico en Pipelines
En pipelines ms avanzados (mltiples unidades funcionales, gran profundidad, etc), las tcnicas para el
manejo de los hazards anteriores no solucionan los problemas. El scheduling dinmico es la utilizacin de
hardware para el manejo de los hazard. A diferencia del scheduling esttico (software), el dinmico tiene
algunas ventajas:
- Habilita el manejo de algunos casos donde las dependencias son desconocidas en tiempo de compilacin
- Simplifica el compilador
- Permite que un cdigo que fue compilado con un pipeline en mente funcione eficientemente en un pipeline
diferente.
Estas ventajas se logran con un incremento en la complejidad del hardware.
En las tcnicas anteriores se usa el despacho de instrucciones en orden. Si una instruccin se para, ninguna
otra puede continuar. Aqu lo que se usa es la ejecucin fuera de orden. Si una instruccin en el pipeline es
stall, instrucciones siguientes que no tengan dependencias podrn ser despachadas sin esperar que termine la
instruccin stall.( solapar instrucciones que no tienen condicionamiento)
Scoreboarding
En la etapa Decode se realiza la decodificacin de la instruccin, la lectura de los operandos y el despacho
de la instruccin a ejecucin (issue). Para permitir la ejecucin fuera de orden necesitamos separar el
Decode en dos etapas:
Issue: Chequeo de posibles conflictos y de poder hacerlo realiza el despacho de la
instruccin.
Lectura de Operandos, esperar hasta que no haya hazard de datos, entonces leer los
operandos.
Mientras que todas la instrucciones pasan a travs de la etapa Issue en orden, estas pueden ser stall o bypass
una de otras en la etapa de lectura de los operandos y por esto entran en una ejecucin fuera de orden. Es
una tcnica que permite la ejecucin fuera de orden de las instrucciones cuando hay suficientes recursos y
no hay dependencias de datos. El objetivo es el de mantener una tasa de ejecucin de una instruccin por
ciclo de reloj, ejecutando una instruccin lo ms pronto posible. As, cuando una instruccin al frente de una
cola es stall, otra instruccin puede ser issue y ejecutada si no depende de ninguna instruccin activa o
stalled. El scoreboard (SC) toma completa responsabilidad del issue y ejecucin de una instruccin,
incluyendo la deteccin de los hazard. Toda la deteccin y resolucin de los hazards se centralizan en el SC.
Para tomar ventaja de la ejecucin fuera de orden, se requiere que mltiples instrucciones estn en la etapa
de EX simultneamente. Esto se puede llevar a cabo con mltiples unidades funcionales o haciendo un
pipeline de la unidad funcional (pipeline aritmtico).

40

Las cuatro etapas que atraviesa una instruccin son:


1. Despacho: si una unidad funcional para la instruccin est libre y ninguna otra activa tiene el
mismo registro destino, el SC la despacha a la unidad funcional y actualiza su estructura
interna de datos. Chequeando estas cosas se garantiza de que no haya un WAW. Si existe un
hazard estructural o WAW se para el despacho de la instruccin y ninguna otra puede ser
despachada hasta que este hazard sea resuelto.
2. Lectura del operando: el SC monitorea la disponibilidad de los datos fuentes. Un operando
fuente est disponible si ninguna instruccin activa va a escribirlo o si el registro que contiene
el operando ser escrito por una unidad funcional activa. Cuando los operandos fuentes estn
disponibles, el SC le dice a la unidad funcional que proceda con la lectura de los operandos
de los registros y comience la ejecucin. El SC resuelve los RAW dinmicamente y la
instruccin puede ser enviada a ejecucin fuera de orden.
3. Ejecucin: la unidad funcional comienza con la ejecucin con los operandos recibidos.
Cuando el resultado est listo este notifica al SC que ha completado la ejecucin.
4. Escritura de los resultados: una vez que el SC se asegur que la unidad funcional complet la
ejecucin, chequea por hazard WAR. A una instruccin no se le puede permitir que escriba
sus resultados cuando:
Hay una instruccin que no ha ledo sus operandos,
Uno de los operandos es resultado de una instruccin ya completada,
El otro operando era el resultado de una instruccin ms vieja. Si no existe WAR o
fue resuelto, el SC le dice a la unidad funcional que guarde el resultado en el registro
destino.
La estructura de datos mantenida por el SC se divide en tres partes:
Estado de la Instruccin, indica en cul de las etapas est la instruccin.
Estado de las Unidades Funcionales, indica si la unidad est ocupada o no, la operacin que se est
realizando en ella, el registro destino, registros fuentes y flags que indican si los registro fuentes
estn listos.
Estado del Registro Resultado, indica cul unidad funcional escribir un registro.
Algoritmo de Tomasulo
Esta es otra tcnica para el scheduling dinmico. En muchos aspectos es parecido al SC, pero tiene dos
diferencias importantes:
La deteccin de los hazard y el control de ejecucin est distribuido (estaciones de reservacin en
cada unidad funcional controlan cundo una instruccin puede comenzar la ejecucin en esa
unidad). En el SC est centralizado en l.
Los resultados son pasados directamente a la unidad funcional, en lugar de que tengan que ir a
buscarlo a los registros. Se usa un bus comn de resultados(common data bus o CDB) que permite
que todas las unidades reciban simultneamente un operando que deben cargar.
Para analizar el algoritmo, nos enfocamos en la implementacin hecha para una unidad de punto flotante. La
estructura bsica del algoritmo de Tomasulo es:
Tabla de Reservacin: mantiene las instrucciones que fueron despachadas y estn siendo ejecutadas
en la unidad funcional, as como la informacin necesaria para controlar la instruccin.
El load y store buffer: mantienen los datos que vienen y van a memoria.
Registros de Punto Flotante: estn conectados por un par de buses a las unidades funcionales y por
un solo bus al store buffer.
CDB: todos los resultados de las unidades funcionales y de memoria son enviados en el CDB, el cual
va a todos los lugares, excepto el load buffer.
41

Todos los buffers y estaciones de reservaciones tienen tags(identificadores) que son usados para el
control de los hazard.

Mult/ADD se encuentran en pipeline


*Estaciones de reservacin

Memoria

FP
operations

Floating point
register

6
5
4
3
2
1

3
2
1

3
2
1

3
2
1

Store
buffer

Memoria

Common data base (CDB)


Las etapas por las que atraviesa una instruccin en el algoritmo de Tomasulo son:
1. Issue. Se toma una instruccin de la cola de operaciones de punto flotante. Si la operacin es de
punto flotante, se despacha si hay una estacin de reservacin vaca y se envan los operandos a la
estacin de reservacin si estn en los registros. Si la operacin es un load o un store, puede ser
despachada si hay un buffer disponible. Si no hay estaciones de reservacin vacas o buffer vacos,
existe un hazard estructural y la instruccin es frenada hasta que se libera una estacin o un buffer.
2. Ejecucin. Si uno o ms operandos no estn disponibles, se monitorea el CDB mientras se espera
porque el registro sea computado. Este paso chequea por RAW hazard. Cuando ambos operandos
estn disponibles, se ejecuta la operacin.
3. Escribir Resultado. Cuando el resultado est disponible, se escribe este en el CDB y de este a los
registros y en cualquier unidad funcional esperando por este resultado.
Una observacin importante es que los hazard WAR y WAW no son chequeados, porque son
eliminados a travs de la utilizacin de renombramientos de registros usando las estaciones de
reservacin

42

Hazard de Control
Los conflictos de control pueden causar una mayor prdida de performance en nuestro pipeline que los data
hazard. Cuando un branch es ejecutado este puede o no cambiar el flujo secuencial del programa. Si la
instruccin i es un branch, no sabemos cul ser la instruccin a ejecutar luego de ella. Esto causar un stall
en el pipeline hasta resolver el branch. Si este se toma, podremos hacer el fetch luego de 3 o + ciclos
(dependiendo de la profundidad del pipeline), cuando se complete la etapa MEM (donde ya se tiene la
direccin target). Este efecto es llamado control o branch hazard.
El nmero de ciclos de reloj en un branch stall puede ser reducido en dos etapas:
Calcular ms temprano en el pipeline, si el branch es tomado o no tomado.
Computar el PC tomado (direccin del branch) ms temprano en el pipeline.
Para realizar lo primero, en pipelines simples (como el DLX) se puede completar la decisin del branch al
final del ciclo ID usando lgica especial puesta para este test. Para tomar ventaja de esto, se debe computar
la direccin target del branch. Esto requiere un sumador adicional, que puede sumar durante la etapa de ID.
Con esto solo hay un stall de un ciclo de reloj en los branch. En las mquinas donde la evaluacin de las
condiciones y calcular la direccin target del branch toma ms tiempo y no pueden ser resueltas en el ID, los
branch hazard tienen ms ciclos de reloj de penalidad.
Otra forma de lidiar con los branch stall, es usar mtodos estticos en tiempo de compilacin, llamado
scheduling esttico. Aqu la prediccin es esttica.
Un mtodo es tomar el branch como no tomado. Aqu se permite que el hardware continue como si
el branch no se fuera a ejecutar. Si el branch es tomado, se necesita parar el pipeline y reiniciar el
fetch.
Otro mtodo es predecir el branch tomado. Tan pronto como el branch es decodificado y la
direccin del salto es computada, se asume que el branch ser ejecutado y se hace el fetching y la
ejecucin del salto. Esto solo tiene sentido si se conoce la direccin del salto antes de que el branch
aparezca.
Otra tcnica es la de Branch delay (retardado). Aqu aparece el branch-delay slot (slot de retardo).
El software tiene que poner una instruccin que sea vlida y til en el lugar del delay slot y que no
dae la ejecucin del programa.
Existen varios mtodos para elegir la instruccin a colocar en el delay-slot:
1. Mover una instruccin que est antes del branch: El branch no tiene que depender de esa
instruccin.
2. NOP (no operacin): Salvo en pipe poco profundos y sin superescalar, esta alternativa no es
eficaz.
3. Full trought
4. Branch tomado: Se inserta una instruccin del target del branch.
5. Branch no tomado: Se coloca una instruccin que sigue a la instruccin del branch.
Estas dos ltimas se usan cuando no es posible aplicar la primera, porque el problema que tienen es que en
el caso que falle la prediccin, hay que volver atrs todos los cambios que se hicieron, o sea, se debe volver
al estado inicial. Todo esto tiene un overhead muy grande y degrada mucho la performance.
Hay que asegurar el control del flujo de datos y el comportamiento de excepciones. Sin intervencin del
hardware poco se puede hacer de all la limitacin de esta tcnica. Si bien es una tcnica de software
requiere de una modificacin del hardware. Bsicamente en lugar de salvar un PC se debern salvar n+1 PC
s (n slot de retardo).

43

Manejo de Control Hazard con Scheduling Dinmico


El esquema ms simple de prediccin de branch dinmicos es el branch-prediction buffer, tratando de seguir
de alguna forma del comportamiento particular del branch.
Lo ms simple es un bit que indique si el branch fue recientemente tomado o no. UN pequeo buffer
direccionado con lo bits inferiores del PC, con 1 bit en cada entrada complementa la tarea.
No sabemos si la prediccin es correcta, pero eso no importa. Se asume correcta y el fetching comienza en
la direccin de la prediccin. Si la prediccin resulta incorrecta, el bit de prediccin se invierte. Si un branch
es casi siempre tomado, entonces cuando es no tomado, se predecir incorrectamente dos veces, en vez de
una. Para solucionar esto se usa un esquema de prediccin de dos bits. Aqu, una prediccin debe
equivocarse dos veces antes de cambiar.
El branch prediction buffer puede ser implementado como un pequeo y especial cache accedido con la
direccin de la instruccin durante la etapa de IF. Tambin se puede implementar como un par de bits
adjuntados a cada bloque en el cache de instrucciones y fetched con la instruccin. Si la instruccin es
predecida como un branch y si el branch es predecido tomado, el fetching comienza por el target tan pronto
como el PC es conocido.
De otro modo, se realiza el fetch y la ejecucin continua en forma secuencial.
Para reducir la penalidad de los branch en los pipeline DLX, se necesita saber qu direccin se debe traer al
final de la etapa de IF. Esto significa que debemos saber si la instruccin no decodificada an es un branch y
si lo es, cul ser el prximo PC. Si la instruccin es un branch y se conoce el prximo PC, la penalidad es
cero. Un branch-prediction cache que almacena la direccin predecida para la prxima instruccin despus
de un branch es llamado branch-target buffer. Debido a que se predice la direccin de la prxima instruccin
y se enva antes de decodificarla, se debe conocer si ser como un branch tomado. Si el PC de la instruccin
trada coincide con un PC en el buffer, entonces el correspondiente PC predecido es usado como prximo
PC.
Si una entrada que coincide se encuentra en el branch-target buffer, el fetch comienza inmediatamente con el
PC predecido. No habr branch delay si la entrada es encontrada en el buffer y la prediccin es correcta. De
otra manera, habr una penalidad de 1 o 2 ciclos de reloj, debido a que el branch-target buffer debe ser
actualizado.
El siguiente cuadro muestra cmo funciona el branch-target buffer y cules son las penalidades en todos los
posibles casos.

44

Limitaciones de la especulacin
Se vio que con el branch retardado la limitacin que tena el compilador para disponer instrucciones en los
slots de retardo en tanto fuesen instrucciones del target o del full trought, originadas en la especulacin.
Flujo de datos
Excepciones
Existen una serie de alternativas de contribucin del hardware para entender con este problema, viabilizar la
tarea del compilador (si este fuera el caso). Estas alternativas de menor a mayor culminan en lo que se
refiere como hardware especulativo:
1) La ms bsica es suministrar un tratamiento diferenciado a las interrupciones-------------------------Aquellas excepciones que marcaran la finalizacin del proceso en ejecucin sustituirlas porque solo
devuelvan un valor cualquiera posibilitando que la ejecucin contine.------------------------------------Un programa bien construido no ser el caso, en general, que produzca interrupciones de ese tipo.
Su aparicin estara en tal sentido originada en una ejecucin especulativa que se enmarcara en una
situacin de no corresponder haber sido ejecutada.------------------------------------------------------------Luego los valores que produce su ejecucin es garbage, de all el sentido de esta propuesta. Estos
valores nos sern en definitiva de inters aprovechables, en la ejecucin normal, correcta del
programa.
Complementariamente para la etapa de debugging corresponder habilitar el comportamiento normal
de excepciones para llevar adelante dicha tarea.
2) Disponer de poisson bit a nivel de los registros ---------------------------------------------------------------Se especula sobre registros y o sobre locaciones de memoria.-----------------------------------------------Adems de 1 bit ms en cada registro, se requiere que el compilador marque adecuadamente las
instrucciones especuladas.-----------------------------------------------------------------------------------------Si una instruccin normal produce una excepcin, sin ms se la atiende.----------------------------------Si una instruccin especulada produce una excepcin no se atender en ese momento, solo se marca
el registro destino con el poisson bit puesto a 1.---------------------------------------------------------------Si una instruccin especulada tiene a un registro fuente con el PB en 1, hereda tal condicin el
registro destino.-----------------------------------------------------------------------------------------------------Lo interesante es que se mantiene el manejo de interrupciones para instrucciones normales ( no
especuladas) a nivel de las especuladas la alteracin es que no se atienden al momento de producirse
se difiere al momento en el que una instruccin normal acceda a un registro con el PB en 1.
3) Hardware especulativo
El hardware provee buffering para los valores especulados.
Se agrega a las etapas de la instruccin un commit, se hace efectivo el cambio de estado
asociado con la instruccin. La idea es que en la ejecucin de instrucciones se irn
produciendo resultados los que sern convenientemente buffereados como instancias previa
al commit.
Instrucciones posteriores que requieren de esos valores los podrn obtener de esos buffer.
Se dispone de un reorder buffer que ser el responsable de organizar el commit de las
instrucciones.
Las instrucciones entran en orden al reorder buffer. Su ejecucin podr ser fuera de orden,
atendiendo a los conflictos RAW. El commit ser en orden. Cuando arriben al tope del buffer,
instrucciones ya ejecutadas ser el momento del commit.
a) Si hay una instruccin de branch en el tope resulta mal predicha simplemente se hace
un fetch del R buffer
45

b) Como las excepciones se atienden solo cuando es segura la ejecucin de la ejecucin


que la produjo, esto es cuando arriban al tope de R buffer.
c) Ms aun a nivel de excepciones se logra un manejo preciso para estas.
Multiple Issue Procesor
Despacho de ms de una instruccin por ciclo.
Hay 2 alternativas:
1) Dinamic Issue: Superescalar (hardware)
2) Static Issue: Very large instruction word
Dinamic (static) considerando el hecho de que pueda o no. Variar el nmero de instrucciones que se
despacha por ciclo de ejecucin
1) Superescalar:
a) Static Scheduling
b) Dynamic Scheduling
Depende de resolver o no las dependencias RAW entre instrucciones de un mismo ciclo
a) Histricamente el SUPERESCALAR naci muy modestamente RIS 6000 de IBM, 2 instrucciones
por ciclo una entera y otra de punto flotante. Si bien estas limitaciones se fueron reflejando, a nivel
de la combinacin de instrucciones soportadas por ciclo. Con todo se podrn dar conflictos
estructurales que pueden condicionar el mltiple issue.
b) Habilitar que sigan despachando instrucciones. En un ciclo ms all del conflicto RAW.
Porque con la evolucin de la tecnologa (dispositivos cada vez ms pequeos, ya hoy en da de 0,04
m), son ms baratos (si escalo por k, tengo k 2 + A = rea), son ms rpidos y disipan menos (k 2
menos).
La limitacin es el retardo de la interconexiones (escalndolos) solo mantienen le retardo.
2) Bsicamente toda la responsabilidad recae en el software. El compilador empaqueta instrucciones,
operaciones en un palabra ancha (16-8) sin chequeo alguno del hardware. INTEL y HP despus de varios
aos sacaron la EPIC.
SUPERESCALAR
VLIW
Mltiples unidades funcionales
Hardware ms simple(no existe Control de
mltiples unidades funcionales)
Se independiza del compilador en El compilador es central
dynamic scheduling
La bsqueda aqu es limitada (80-120 El cdigo se expande ( existencia de nops
instrucciones)
y trace scheduling). Explota el paralelismo
Mayor capacidad de extraer paralelismo
Al modificar el hardware hay que
recompilar para el nuevo
Aqu el compilador puede involucrar todo
el cdigo
Aqu ms eficiente en tanto el paralelismo
resulte claro.
Idem procesador vectorial.
La limitacin de performance la da el tipo
de operacin un paquete de instrucciones
no progresa por completo en tanto existan
situaciones conflictivas.
46

En tal sentido la cache constituye un


severo desafo dado que los miss de cache
no podran predecirse (aplicaciones
grficas)

Jerarqua de Memoria
Objetivos de la Jerarqua de Memoria
Los objetivos son:
Intentar equiparar la velocidad de acceso a la memoria con la del CPU. Reducir la diferencia
de velocidad entre el procesador y la memoria.
Lograr una performance adecuada a un costo razonable. Equilibrar la relacin costo /
performance. El costo puede ser descompuesto en dos factores:
Factor esttico, el cual limita el tamao de los componentes ms rpidos, y por lo tanto
los ms caros.
Factor dinmico, alude a los recursos que se consumen para administrar la jerarqua (ej.
procesador central, buses).
La jerarqua de memoria persigue una performance dada por el nivel ms alto de la jerarqua a un costo por
bit del nivel ms bajo.
Es decir, se quiere lograr la velocidad de la memoria ms rpida, al costo de la memoria ms lenta.
La velocidad se controlara organizando la informacin de forma tal que lo ms requerido se encuentre en
los niveles ms altos de la jerarqua.
Lo que se quiere simular es una nica memoria grande, rpida y barata.
Niveles de la Jerarqua de Memoria
Cada nivel cuenta con atributos caractersticos en cuanto a:
Capacidad del nivel.
Costo del Nivel
Tiempo de acceso al nivel
Tamao del nivel
A su vez la interconexin (comunicacin) entre niveles tendr atributos de:
Ancho de Banda, velocidad de transferencia de la informacin, throughput.
Tamao del bloque de informacin desplazado.
Los niveles encontrados en las computadoras actuales son mostrados en la siguiente figura:

47

Registros. Estos estn en el tope de la jerarqua y se ajustan a la velocidad del CPU, pero tienden a ser
caros y a consumir una cantidad significante de energa. Generalmente hay un pequeo nmero de registros
en un procesador.
Cache. Este es el nivel entre el procesador y la memoria principal. Puede haber varios niveles de cache.
Forma una memoria de alta velocidad, que eleva la performance del sistema. Debido al alto costo por bit que
estas tienen, sus tamaos son muchos ms pequeos que la memoria principal.
Memoria Principal. Esta se encuentra entre la cache y el almacenamiento secundario.
Almacenamiento Secundario. Este corresponde al almacenamiento permanente en archivos. Est
soportado por uno o ms discos de brazo mvil (discos duros). Los tiempos de acceso son muchos grandes
que los de la Memoria Principal, debido al tiempo de bsqueda que se necesita para mover el brazo al
cilindro adecuado. Su capacidad es mucho ms grande que la de la Memoria Principal y su costo por bit es
mucho ms pequeo.
Almacenamiento Off-Line. Este es el ltimo nivel. Aqu aparecen el almacenamiento de archivos en
discos removibles y cintas magnticas. Estos ltimos son ms baratos y lentos y tiene un acceso secuencial.
Pueden guardar alrededor de cientos de MB. El tiempo de transferencia es menor que los discos y el tiempo
de acceso depende del ltimo dato ledo.
Localidad de las referencias
Los programas no referencian a memoria al azar, sino que se comportan de manera predecible. Esta
propiedad se la conoce como Localidad de Referencia.
Esta est compuesta por:
Localidad Temporal. La posibilidad cierta que una locacin que ha sido accedida vuelva a ser
referenciada en un futuro inmediato. (loops, variables temporales).
Localidad Espacial. La tendencia de un programa a referenciar reas acotadas de memoria vecinas a la
ltima referencia. (instruccin-procedimiento, datos-arreglos).
Localidad Secuencial. Es la tendencia a que referencias sucesivas se resuelvan en locaciones consecutivas
de memoria (instrucciones secuenciales, arreglos, vectores).
Cada tipo de localidad ayuda o influencia la caracterizacin de una jerarqua de memoria eficiente. El
principio de localidad espacial permite determinar el tamao de bloque a ser transferido entre niveles. El
principio de localidad temporal ayuda a determinar el nmero de bloques a ser contenidos en cada nivel. La
localidad secuencial permite la distribucin de identificadores nicos para dispositivos que operan
concurrentemente en ciertos niveles de la jerarqua para posibilitar accesos concurrentes.
Principios generales de la jerarqua de Memoria
El objetivo primordial es poder llegar a la velocidad del nivel ms alto, se desprende de esto que el mayor
porcentaje de los accesos se debern resolver en el nivel ms alto. UN faltante en ese nivel, implica lentificar
el acceso dando el mayor tiempo que insumen niveles inferiores.
Si la informacin no se encuentra en un dado nivel se inicia la bsqueda en el nivel inferior de un bloque
que contiene al tem faltante.
La jerarqua de memoria consta de varios niveles, pero es manejada entre dos niveles adyacentes al mismo
tiempo. El nivel superior es aquel que, de los dos, est ms cerca del procesador, y el nivel inferior es el que
est ms lejos. La mnima unidad de informacin que puede estar presente, o no, en los dos niveles de la
jerarqua se llama bloque. El tamao del Bloque puede ser fijo (sistemas paginados) o variable (sistemas
segmentados). Si es fijo, el tamao de la memoria es mltiplo del tamao de bloque, en caso contrario el
tamao no lo fija la arquitectura (solo el max y min), el tamao se ajusta a la aplicacin.
48

Cuando se encuentra la informacin en el nivel accedido se habla de hit, caso contrario hablamos de
miss.
La tasa de aciertos (hit ratio) tpicamente se define como la fraccin de accesos exitosos o como porcentaje
.
Miss ratio = 1 hit ratio
Una adecuada tasa de aciertos depender de la disparidad de velocidad entre niveles.
Tacceso = hit ratio * Tacceso de nivel superior + miss ratio * Tacceso del nivel inferior
Un hit ratio de 80% o 90% es razonable entre niveles de cache. Entre cache y MP debera ser mayor a 90% o
95% porque hay mayor disparidad. Muy distinto deber ser la tasa de acierto en MP, la relacined 1 a 10 o
peor. Demandar tasas del orden del 99,99% de acierto. La cache se sustenta en la localidad temporal traigo
una vez y en la medida que el bloque sea accedido varias veces (antes de ser reemplazado) el costo de
acceso al nivel inferior se prorratea entre todos los accesos al bloque.
La tasa de acierto creciente demandar tamao de bloque proporcionalmente ms grande.
Ante un miss la penalizacin del mismo est dada por:
El tiempo de acceso del nivel ms bajo
Ancho de banda de las transferencia entre niveles.
Promedio de tiempo de acceso a memoria = hit time + miss ratio * miss penalty
Hit time = es igual al tiempo de acceso al nivel superior, incluido el chequeo de la bsqueda
Miss rate = contempla la transferencia del bloque desde el nivel inferior y el propio acceso de la
informacin del miss.
Miss penalty = tiempo que tarda en buscar el bloque y llevarlo al nivel correspondiente.
Este miss penalty se podra dividir en tiempo de acceso y tiempo de transferencia. Veamos que sucede con el
miss penalty si se aumenta el tamao del bloque. La porcin de tiempo de acceso del miss penalty no es
afectado por el tamao del bloque, pero el tiempo de transferencia se incrementa junto con el tamao del
bloque. Si el tiempo de acceso es muy grande en comparacin con el tiempo de transferencia, el miss
penalty ser casi puramente debido al tiempo de acceso, es decir, el tiempo de transferencia ser casi
insignificante comparado con el tiempo de acceso. Sin embargo, incrementar el tamao del bloque significa
pocos bloques en el nivel superior. Incrementando el tamao del bloque se baja el miss rate hasta que la
reduccin de miss por bloques grandes (localidad espacial) es desbalanceado por el incremento de los miss
por poco nmero de bloques (localidad temporal).
Tecnologias empleadas
Los niveles de cache (L0, L1, L2) recurren a MOS esttica, MP a MOS dinmica.
Tecnologa transistores
Bipolar controlado por corriente
MOS: Metal oxido semiconductor
N MOS electrones
P MOS hueco
C MOS combinacin de los 2 anteriores (disipa mnimamente)
MP: paso de memoria de ncleo a semiconductora a MOS dinmica sin mayor interregno
M cache: inicialmente bipolar (esttica) por velocidad de tamao muy reducido.
Con la evolucin de la tecnologa MOS, paso a ser MOS pero esttica.
MOS Esttica la celda, el bit es un FF un biestable.
49

MOS dinmica la celda es un pequeo condensador el bit lo determina el estado de carga del mismo VH o
VL y la celda se construye a partir de un nico transistor.
-Menor velocidad
-Refresco
-Efecto parasito: la lectura es destructiva luego requiere generacin (leo y refresca)

Cache
Es una memoria relativamente rpida, este es el nivel ms cercano al procesador. Est entre este y la
memoria principal.
Pueden haber diferentes niveles de cache. Generalmente se usa un primer nivel dentro del procesador y un
segundo nivel fuera de este. El nivel interno es ms rpido, ya que trabaja a la velocidad del procesador, pero
es pequeo. El segundo nivel brinda una mayor capacidad con una velocidad ms baja.
Trabaja por demanda (sin perjuicio de que se pueda recurrir al prefetching: software como hardware)
Un read pasa por cache:
si hit entrega la informacin.
Si miss sale a buscar la informacin (bloque) al nivel inferior.
Los miss los podemos tipificar con una triple C (pudiendo reconocerse una cuarta)
Compulsivo: Es el primer acceso a un bloque que no est en el cache, entonces el bloque debe ser trado al
cache. Es tambin llamado cold start (arranque en fro).
Capacitivo: Tiene que ver con que el cache no puede contener todos los bloques necesarios durante la
ejecucin de un programa. Los miss capacitivos ocurren por los bloques que son desalojados por cuestiones
de espacio y luego son referenciados nuevamente.
Conflictivo: Tiene que ver con la restriccin que se presenta en cuanto a que un bloque de memoria
principal podr ser cargado no en cualquier lugar de cache sino en un conjunto restringido de bloques.
Podr darse el caso de que un bloque de cache sea desplazado, no porque no exista un lugar disponible en el
cache ( ante un miss) sino porque el bloque a traer en cache demanda ese lugar. Este miss se origina cuando
el bloque que ha sido desplazado vuelve a ser referenciado
Qu se puede hacer ante estos factores? Conceptualmente los conflictos son fciles: locacin full
associative descarta los miss de conflictos, pero es difcil de realizar en hardware y tiene tiempos de accesos
lentos, degradando la performance general. No hay mucho por hacer respecto a los miss de capacidad,
excepto comprar chips de memoria grandes. Si el nivel superior de memoria es mucho ms pequeo del que
necesita el programa y un tiempo significante es gastado moviendo los datos entre los niveles de la jerarqua,
se dice que la memoria entra en trash. Esto es debido a que se necesitan muchos reemplazos. Trashing
significa que la mquina corre cerca de la velocidad del nivel inferior o an ms bajo debido al overhead.
Haciendo bloques grandes se reduce el nmero de miss de compulsin, pero se incrementa el de conflictos.
Inicialmente los caches era bipolares de tamao reducido; por esta razn se defini el tamao del bloque en
no ms ni menos de lo que se poda traer en un acceso a memoria. La restriccin surge de que bloques ms
grandes implican menor nmero de bloques con el posible aumento de los miss de conflictos.
No menos ya que no se justifica descartar informacin que se trajo y podra ser til; y no ms ya que
implicara ms de un acceso con el riesgo de afectar los miss de conflicto.
En la actualidad no se da este techo luego se avanza en el tamao del bloque dado que se podr contar con
un mayor nmero de bloques a pesar del tamao ms grande, dado el aumento en el tamao de la cache.
Se podra decir que el lmite al tamao del bloque podr estar determinado por otros factores uno de ellos
podra ser la cuarta C

50

Coherencia: Se da en un contexto multiprocesador cada no trabajando con su cache privada. Una escritura
en una cache privada deber ser tomado en cuenta en las dems cache si queremos asegurar coherencia de
cache.
Hay dos alternativas para manejarse con copias mltiples
1) Invalidacin: En esta alternativa, la ms frecuente de implementar, la invalidacin que experimenta
un bloque es lo que da lugar a los miss de coherencia
Cuanto ms grande sea el bloque mas expuesto estar a lo se llama false sharing, incrementando
injustificadamente los miss de coherencia.
2) Actualizacin
Locacin de un bloque en Cache
Las restricciones de en dnde colocar un bloque, crean 3 categoras de organizaciones de cache:
a) Mapeo directo. Aqu cada bloque tiene un solo lugar en donde puede ir a cache. Es el ms rpido
(en acceso) pero el de mayor miss rate (maximiza los miss de conflicto) No se requiere algoritmo de
reemplazo
b) Full Associative. Aqu cada bloque puede ir a cualquier lugar del cache. Es la ms compleja, no
existe miss de conflicto pero es la de mayor hit rate.
c) Set Associative. Aqu un bloque puede ser puesto en un restringido conjunto de lugares. Un conjunto
es un grupo de dos o ms bloques en la memoria. Un bloque es mapeado a un set y luego es puesto
en cualquier lugar dentro de l. Si hay n bloques en un set, se dice que la organizacin del cache es nassociative.
Encuentro de un bloque si este est en cache
a) Una direccin de la memoria se divide en 3 campos
n
TAG

Index

n-a-b

Despl.

b es tal que 2b es el tamao del bloque


a es tal que 2a e el nmero de bloques de la cache
Con el index se indexa la cache de forma directa se apunta a un bloque.
El TAG aporta informacin que permite identificar al bloque de memoria.
Distintos bloques de memoria con igual index van al mismo lugar de cache, por ende el tag e
informacin que se almacena junto con los datos en un bloque.
Debido a que la velocidad es la esencia, todos los posibles tag son buscados en paralelo.
Para saber si un bloque de cache tiene informacin vlida, se le agrega al tag un bit de validacin. Si
el bit no est activado, no se puede hacer un match en esa direccin.
El tag tiene un costo en memoria. Se necesita uno para cada bloque. Una ventaja de incrementar el
tamao de bloque, es que el overhead del tag por cada entrada en cache se convierte en una fraccin
ms pequea del costo total del cache.

TAG
TAG

Index
Dato
=

Despl.

Si hit

V
51

El bloque en cache a ser empleado para almacenar un bloque en memoria principal se resume:
(Nro de bloques en memoria) mod (cant de bloques)
# de bloque
n-b

desp
b

Si n es el nmero de bloques, un bloque k de memoria ira al mismo lugar que k+n, k+2n
b)

n
TAG
n-a-b

Index

Despl.

a es tal que 2a e el nmero de conjuntos


Indexa, busca directo al set (conjunto) y luego realiza una bsqueda asociativa dentro del conjunto.
En realidad es hacer mltiples comparaciones.
c) Aqu se requiere de una memoria asociativa para implementar lo que sera el directorio.
Si bien el menor miss rate, lo tornara muy costosa, no razonable salvo cuando entendemos con
caches pequeos (ejemplo TLTS)
Reemplazo de bloques en un miss de cache
La decisin entre un bloque que contiene datos vlidos y otro que no, es fcil. El problema ocurre cuando
ambos bloques tienen datos vlidos.
El uso de locacin de mapeo directo hace que la decisin del hardware sea simple, es ms, no hay opcin.
Solo un bloque es chequeado para un hit y solo un bloque puede ser reemplazado. En el reemplazo en full
associative y set-associative hay varios bloques para elegir en un miss. Hay dos estrategias primarias para la
eleccin del bloque a ser reemplazado:
Random. Los bloques son elegidos al azar.
Least-Recently-Used (LRU). Para reducir la chance de sacar informacin que se necesitar pronto,
los accesos a los bloques son recordados. El bloque reemplazado es el que ha sido inutilizado por
ms tiempo. Se hace uso de la localidad temporal.
Una virtud del random es que es simple de construir en hardware. A medida que el nmero de bloques a
mantener aumenta, LRU se convierte incrementalmente en caro y es frecuentemente solo aproximado. Las
polticas de reemplazo juegan un papel ms importante en caches chicos, que en caches grandes donde hay
ms opciones para el reemplazo.
Escritura en Cache
Las lecturas dominan el acceso al cache. Todas las instrucciones son ledas y la mayora de estas no escriben
en memoria. Afortunadamente, el caso ms comn es tambin el caso ms fcil de hacer rpido. El bloque
puede ser ledo al mismo tiempo que se compara el tag, as que la lectura del bloque comienza tan pronto
como la direccin del block-frame est disponible. Si la lectura es un hit, el bloque es pasado
inmediatamente a la CPU.
Si es un miss, no hay beneficio, pero tampoco dao.
En la escritura no ocurre esto. El procesador especifica el tamao de la lectura (usualmente 1 a 8 bytes); pero
solo una parte del bloque se cambia. Esto significa que una secuencia de operaciones lectura52

modificacinescritura se realizan sobre el bloque. Leer el bloque, modificar una porcin y escribir el nuevo
valor del bloque.
Adems, la modificacin del bloque no comienza hasta que el tag se chequea para ver si es un hit. Debido a
que el chequeo del tag no ocurre en paralelo, la escritura demora ms tiempo que la lectura.
Hay dos opciones bsicas cuando se escribe en el cache:
1. Write through, la informacin es escrita tanto en el bloque del cache como en el bloque del
nivel inferior de memoria.
2. Write back, la informacin es escrita solo en el bloque del cache. El bloque de cache
modificado es escrito en la memoria principal solo cuando es reemplazado.
Un bloque de cache con write back es llamado clean o dirty, dependiendo si la informacin del cache difiere
de la del nivel inferior de memoria. Para reducir la frecuencia de escritura en el reemplazo write back, se usa
un bit dirty, que indica si el bloque fue o no modificado en el cache. Si no lo fue, el bloque no es escrito, ya
que el nivel inferior tiene la misma informacin que el cache.
Ambos mtodos tienen sus ventajas. Con write back, la escritura ocurre a la velocidad de la memoria cache
y mltiples escrituras en el bloque requiere solo una escritura en el nivel inferior. Y como cada escritura no
va a memoria, write back usa menos ancho de banda, haciendo la escritura ms atractiva a
multiprocesadores.
Con write through, los miss de lecturas no resultan en una escritura en el nivel inferior y es ms fcil de
implementar que el write back. Tambin se tiene la ventaja de que la memoria principal siempre tiene la
copia actual del dato.
Por esto, los multiprocesadores quieren write back para reducir el trfico de memoria por procesador y
quieren write through para mantener el cache y la memoria consistente.
Cuando el CPU debe esperar para que se realice la escritura, con write through, se dice que est write stall
(escribiendo parado). Una optimizacin para reducir este write stall es usar un write buffer, que permite al
procesador continuar mientras la memoria es actualizada.
Hay dos opciones ante un miss de escritura:
1. Write Allocate (fetch en la escritura): Se lo trae a cache y se lo actualiza.
2. Write no Allocate (escritura around): Solo escribimos en el nivel inferior, bypass del nivel superior.
Generalmente caches con write back usan write allocate (esperando que escrituras subsecuentes a un bloque
se resuelvan solo en cache) y caches con write through usan write no allocate (ya escrituras subsecuentes a
este bloque todava tendrn que ir a memoria).
Cache Multinivel
La razn de esta estrategia es satisfacer simultneamente requisitos de velocidad y tamao.
Con los tamaos de memoria principal que se manejan (varios Gb) no tendra caso emplear caches de
algunas decenas de Kb, la cache deber estar proporcionada en tamao a la memoria principal.
El problema es que a mayor tamao, mayor tiempo de acceso contrariando el propsito de reducir tiempo de
acceso.
La solucin es esa jerarqua de cache:
Un primer nivel que ajuste lo ms posible al temporizado del CPU (controlando tamao y
asociatividad) con una taza de acceso razonable.
Luego un segundo (tercer nivel) con una mucho mayor tolerancia en cuanto a velocidad y por ende
capacidad suministrada.--------------------------------------------------------------------------------------------Esta posibilidad de trabajar con menos velocidad en los niveles ms alejados de cache, habilita
tambin a trabajando con las tensiones de alimentacin controlar (reducir) la disipacin de potencia
en esas reas del chip.----------------------------------------------------------------------------------------------Existen polticas a seguir; que la informacin del nivel superior este incluida en el inferior
(multilevel inclusive property) o que la informacin este solo en el primer nivel. AMD e Intel
emplean polticas diferentes.
53

Cache no bloqueante o lock up fase cache


Ante un miss de cache, la cache lejos de bloquearse siga atendiendo nuevos requerimientos
El objetivo es reducir el miss penalty en la medida que pueda solapar bsqueda con procesamiento. El
esquema ms simple es hit under miss.
En general no resultar suficiente y se plantea hit under miss o hit under several miss. Recin luego de un
determinado nmero de miss la cache se bloquea.
Este planteo resulta necesario (bsico) en una arquitectura moderna con ejecucin fuera de orden y
especulativa, como se vio se trata de abarcar en hardware una ventana importante de instrucciones (80-120)
de las cuales estadsticamente 20-30 de ellas sern de referencia a memoria, con lo cual una cache
bloqueante implicara un conflicto estructural que malograra todo lo hecho a nivel de arquitectura.
L1 y L2 niveles de cache
Tiempo de acceso = Hit timeL1 + Miss ratio L1 + miss penaly L1
= Hit timeL1 + Miss ratio L1 (Hit timeL2 + Miss ratio L2 * miss penalty L2 )
Miss local: Miss ratio L1, Miss ratio L2
Miss Global = Miss ratio L1 * Miss rate L2
Alternativas de mejora de performance en cache
-Hit time
-Miss Rate
-Miss Penalty
Las 3C tipifican a los miss. Los de capacidad obviamente se reducen aumentando el tamao de cache; esto
se traduce en un mayor hit time.
Aumentar asociatividad apunta a reducir los miss de conflicto, pero anlogamente a lo anterior aumentar el
hit time.
As Full asociativa o miss de conflicto pero como se sabe es costosa y lenta. En otro extremo mapeo directo,
mximo miss de conflicto, si bien es simple y rpida.
Una alternativa a los miss compulsivos es aumentar el tamao del bloque, eso podra incidir negativamente a
nivel del miss penalty.
Ambas alternativas bloques grandes y mayor asociatividad fueron ampliamente exploradas en un principio.
Ms recientemente surgieron alternativas que apuntan a reducir el miss rate sin afectar ciclos de reloj o al
miss penalty.
Un ejemplo es la vctim cache, una pequea memoria full asociativa alojara los ltimos reemplazos
producidos ante algn miss de all su nombre.
Si el bloque reemplazado vuelve a ser reemplazado, directamente respondera la victim cache osea no no
existe un miss como hubiera sido sin este recurso. Ms aun se har u swap entre la victim cache y el bloque
en cache.
En lnea con este mismo planteo se puede recurrir (ALPHA 21246) a una organizacin set asociativa
lgica. Alpha si bien es 2-way associativo, a los efectos del hit time se computa (en general) como mapeo
directo.
Si enfrentamos saltos incondicionales con un branch target buffer el planteo lo podemos llevar an ms
lejos.
En el buffer almacenar la/las instrucciones del target.
El jmp ms que penalizar 0, cuesta (consume) 0 ciclos Branch folding
Otra tcnica para reducir el miss rate son daar el hit time es prefetching; podr ser por hardware o por
software.
Tanto a nivel de datos como de instrucciones. Los bloques que se traigan en avance podrn ir, bien sea a la
propia cache o a un buffer externo a la misma.
54

Esto ltimo en la idea que de requerir a futuro esa informacin o bien estar en cache o en ese buffer
equivalente en velocidad a lo cache.
Para instrucciones tpicamente se almacena en un buffer externo, denominado instruccin. Stream buffer
(pref por hardware).
Un planteo simple de prefetch por hardware es traer ms de un bloque cuando se atiende miss.
Existen planteos ms sutiles, mecanismos que se disparan automticamente frente a determinadas
caractersticas de los accesos. Lo que subyace en el prefetching es solapar cmputo con la bsqueda
anticipada de informacin, que de ser accedida efectivamente no se traducira en miss.
El prefetch por software claramente requiere de instrucciones que lo implemente.
El escenario para esto ser una arquitectura superescalar, adems la cache deber ser necesariamente no
bloqueante.
Estas instrucciones podran ser faulting o no faulting.
Reduccin de la penalizacin por un miss
Una es dar prioridad a las lecturas frente a las escrituras. La presencia de un write buffer permita su
implementacin (buffer escrituras en tanto se atiendan las lecturas)
Otra alternativa es trabajar con sub-bloques (con un bit de vlido).
Bloques grandes reducen el overead para almacenar informacin de directorio. Efectivamente la primer
cache que se implement (un sistema IBM 370) busco reducir el costo de cache a nivel de identificacin de
bloque, organiz de tal forma por sectores a la cache, en particular 16 sectores, con 2Kb cada uno, FULL
asociativo.
Hoy da este esquema de sub-bloques es doble encontrada, mas all de la ineficiencia que seguramente tena
el esquema de sectores. Esto, si, un esquema de unos pocos sub-bloques ( 4 por ejemplo)
Otras alternativas para reducir l miss penalty:
1) Early restart: Entrega el dato al CPU ni bien lo tiene, sin esperar que el bloque se complete
2) Critical Word first: El primer acceso es para traer la informacin del fault para luego completar la
informacin en el bloque
Reduccin de hit time
Una alternativa para su reduccin es eliminar la etapa de conversin de direcciones lgicas a fsicas
C
CPU

MMU

DF

Esto es acceder a cache con dichas direcciones lgicas. Esto hoy da puede funcionar relativamente bien
dado el tamao que tiene la cache; observar que de haber un miss deber si o si pasar de lgica a fsica.
Una cache as organizada tiene problemas de ambigedades y de sinnimos o alas que habr que resolver
(atender) cache virtuales.
Ambigedad: Ms de una direccin fsica asociada a una direccin lgica.
Sinnimos: Ms de 1 direccin lgica apuntando a una misma direccin fsica.
Al Tag le agregamos un pequeo entero que identifique al proceso.
ASL ADDRES SPACE IDENTIFIER (no confundir con PID)
C - virtual
10000

Diferentes dir virtuales


MP

32000
55

La solucin a esto es evitar que en cache se pueda dar esta circuntancia:


Por hardware: Se conoce como anti-aliasing (Operan AMD) (complejo)
Por software: De forma ms simple forzando a los alias a compartir algunos bits de direccin.
Se lo conoce como page coloring
Cache Virtual
Apunta a reducir el hit time
En lugar de direcciones fsicas emplear en la bsqueda direcciones lgicas o (virtuales).
Toda vez que haya hit, el mecanismo de translacin no trabajo, solo si se produce miss.
Acceso cache
TAG
INDEX

OFFSET

Direccin lgica (pg)


VPN
Desplazamiento
VPN= Virtual page number
Problemas
Ambigedades
Sinonimos
Page Coloring(software): Sun restringe a que sinnimos comportan los 18 bits significativos. Una
cache mapeo directo, con hasta 256 kb, con esta restriccin, hace imposible que coexistan en cache
ms de una entrada de sinnimo.
AntiAliasing (hardware): Opteron AMD
Tag fsico, index virtual
Beneficio a nivel del hit time ( habida cuenta que el de translacin en este esquema si trabaja siempre.
MT
CPU

Hit o miss
CAC

Desaparece Ambigedades

En la medida que el campo de desplazamiento (de la direccin virtual) resulte ineficiente para definir index
y offset en el acceso a cache quedarse expuesto al problema de sinnimos.
De resultar suficiente que para el acceso a cache los bits de la direccione virtual que no van a cambiar
(desplazamiento) el funcionamiento es idntico al de cache fsico pero con la ventaja que el mecanismo de
translacin trabaja en paralelo con el acceso a cache.
Memoria Principal
Despus del cache, la memoria principal es el prximo nivel bajando en la jerarqua. La memoria principal
satisface las demandas del cache y los vector units, y sirve como interface de E/S, as sea como
destinatario de la entrada o como fuente de la salida. A diferencia de los caches, la medida de performance
de la memoria principal se enfatiza tanto en la latencia como en el ancho de banda. Generalmente, la latencia
56

de la memoria principal (la cual afecta la penalidad del miss del cache) es la principal preocupacin del
cache, mientras que el ancho de banda es la principal preocupacin de la E/S y los vector units. Como los
bloques de cache crecen de 4-8 bytes a 64-256 bytes, el ancho de banda de la memoria principal tambin se
vuelve importante para los caches.
La latencia de memoria es tradicionalmente definida por dos medidas:
Tiempo de Acceso, es el tiempo entre que es ledo el requerimiento y la palabra deseada llega;
Tiempo de Ciclo, es el mnimo tiempo entre dos requerimientos a memoria. (definira el ancho de
banda)
La evolucin en los tiempos de acceso es muy lenta (reduccin de 1/3 cada 10 aos).
La evolucin significativa se da tanto a nivel de capacidad, como de velocidad de transferencia.
La memoria principal es DRAM dinamic MOS
Una evolucin fue pasar a la SDRAM Sinchronics DRAM -. Aqu el reloj interno (de la memoria) esta
sincronizado con el exterior haciendo ms eficiente el trabajo.
Esto sumado a un acceso por rfaga, esto es disponer de un contador y en u acceso traer varias palabras.
Una DRAM se accede fila/columna.
El direccionado:
Lineal (memoria)
Multidimensional (memoria)
Codificado (bus)
Las SMOS inicialmente lineal, luego pasan a dos dimensiones.
DMos siempre en 2 dimensiones, esto debido al refresco que no puede ser individual.
Factores q inciden en la performance de la jerarqua de memoria
Naturaleza del programa (localidad de sus referencias)
Capacidad y velocidad del cada nivel
Ancho de banda de la comunicacin entre niveles
Algoritmos de reemplazo
Organizaciones para mejorar la performance de la Memoria Principal
Existen dos mtodos principales para mejorar el ancho de banda de la memoria y lograr reducir el tiempo de
latencia
Memoria Principal ms Ancha. Los caches son usualmente
organizados con un ancho de una palabra debido a que la
mayora de los accesos de CPU son de este tamao. La memoria
principal es de este tamao para coincidir con el cache. Doblar o
cuadriplicar el ancho de memoria doblar o cuadriplicar el
ancho de banda de memoria.
Existe un costo en un bus ms ancho. El CPU seguir accediendo
a cache de a una palabra, entonces se necesita un multiplexor
entre el cache y el CPU y este multiplexor puede ser un tiempo
crtico en el camino. Otro problema es que ya que la memoria es
expansible por las personas, el mnimo incremento es doblarla o
cuadriplicarla.
Finalmente, memorias con correccin de errores tienen
dificultades con las escrituras en una porcin del bloque.

57

Memoria Intercalada (interleaving). Apunta a mejorar el ancho de Banda. Consiste en principio en


disponer de varios modulos de memoria, con su respectivo controlador y posibilitar que trabaje de
forma concurrente, de tal forma si un mdulo suministra un ancho de banda, digamos W, si
dispusiramos de 4 y trabajan concurrentemente el ancho de banda disponible para ser 4W.

El tema es como direccionar a los distintos mdulos:

Low order: Es el que bsicamente posibita ganancia de velocidad. Dada la localidad Secuencial se
tendr la posibilidad de que trabajen concurrente.
No es modular: el crecimiento deber ser para todos los mdulos por igual.
No es tolerante a fallas: si se cae un mdulo se cae el sistema.

High order: Solo suministrara concurrencia, esto es creciente ancho de banda, en un ambiente
multiprocesador del tipo DSM (distributed shared memory). En este se cuidar que la mayora de los
accesos a memoria sean locales. En tal contexto los distintos mdulos operaran en paralelo. Se usa
high order para el direccionado de los distintos mdulos.
Modularidad: El crecimiento de los distintos mdulos es independiente.
Tolerante a fallas: Podra ser el caso de desafectar al mdulo en falla y seguir trabajando.

Actividad concurrente en modulo independientes. Se podr dar un interleaving a nivel interno, esto es del
arreglo de bits; esto es disponerlos en bancos. EN la medida que se aplique interno de bajo nivel;
internamente se lograra que accesos consecutivos refieran a bancos distintos, luego la mejora en throughput.
Esto no se agota aqu, hoy da este concepto de multilanked se aplica a nivel de chips de memoria y resulta
fuertemente utilizado para incrementar el ancho de banda.
DDR (Doble data rate): En la transmisin del bus se usan los 2 flancos
DDR1 = La memoria y el bus tienen distinta frecuencia.
DDR2 = El bus trabaja al doble de velocidad de la memoria.
DDR3 = El bus trabaja a 4 veces la velocidad de la memoria
Memoria Virtual
Conceptos de Memoria Virtual
En cualquier instante de tiempo la computadora est ejecutando mltiples procesos, cada uno con su propio
espacio de direcciones. Sera muy costoso dedicarle todo el espacio de direcciones vlido de la memoria a
cada proceso, esencialmente porque muchos procesos solo usan una pequea parte. Por esto debe haber una
manera de compartir una pequea cantidad de memoria fsica entre muchos procesos. Una manera de
realizar esto, memoria virtual, es dividir la memoria fsica en bloques y asignarles estos a diferentes
procesos. Inherentemente esta aproximacin debe tener un esquema de proteccin, que restrinja un proceso a
los bloques que pertenecen a este proceso. La mayora de las formas de memoria virtual tambin reduce el
tiempo de arranque de un programa, ya que no todo el cdigo y datos necesarios tienen que estar en la
memoria fsica antes que el programa comience.
El compartimiento no fue la razn por la que la memoria virtual fue creada. Antes, si un programa se
converta en muy grande para la memoria fsica, era responsabilidad del programador hacerlo entrar. Los
programadores dividan los programas en partes e identificaban las que eran mutuamente excluyentes. Estas
overlays eran cargadas y descargadas bajo el uso de un programa de control durante la ejecucin, donde el
cual el programador se aseguraba que un programa nunca tratara de acceder a ms memoria principal fsica
de la que haba en la mquina. Esta responsabilidad desgastaba la productividad del programador. La
58

Memoria Virtual, inventada para aliviar a los programadores de esta carga, automticamente maneja los dos
niveles de la jerarqua de memoria representada por la memoria principal y el almacenamiento secundario.
En adicin al compartimiento del espacio de direcciones y el manejo automtico de la jerarqua de memoria,
la memoria virtual tambin simplifica la carga del programa para la ejecucin
Con memoria virtual, el CPU produce direcciones virtuales que son trasladadas, por una combinacin de
hardware y software, a una direccin fsica, la cual puede ser usada para acceder a memoria principal. Este
proceso es llamado mapeo de memoria o translacin de direcciones.
f VM
xV

Y M, si X mapea Y (esta presente)


indefinido, Si no est en MP, se produce una excepcin por fault

Esta excepcin tiene la naturaleza ms compleja en su atencin:


Se atiende la naturaleza ms compleja en su atencin
Debe posibilitar que la tarea se retorne (resume) como si nada hubiera pasado ( se conoce como
interrupciones precisas) A estos sistemas se los denomina restartables.
En conclusin independiza el programa del tamao de MP disponible posibilitando un manejo ms eficiente
en un ambiente multitarea (permite mas tareas sin tanto swap.
Hay algunas diferencias entre los caches y la memoria virtual, ms all de las cualitativas:
El reemplazo en el cache es primariamente controlado por hardware, mientras que en memoria
virtual es controlado por el SO. Un miss penalty ms grande significa que el SO puede involucrarse
y gastar ms tiempo decidiendo cul reemplazar.
El tamao de las direcciones del procesador determina el tamao de la memoria virtual, mientras
que en cache es normalmente independiente de las direcciones del procesador.
Los sistemas para implementar memoria virtual pueden categorizarse en 3 clases:

Paginados, donde los bloques son de tamao fijo


Segmentados, donde los bloques son de tamao variable.
Tambin existe un mtodo hbrido llamado Segmentado Paginado, en donde los segmentos estn
integrados por pginas. Esto simplifica el reemplazo debido a que la memoria no necesita ser
contigua, y los segmentos no necesitan estar completos en memoria principal.

Sistemas Paginados
El sistema paginado usa bloques de tamao fijo, donde la direccin virtual est dividida en un nmero de
pgina y un desplazamiento.
El dispositivo de mapeo debe trasladar la direccin de entrada (virtual) de bloque, en una direccin real y si
este no est en Memoria principal, debe generar un page fault. Hay dos implementaciones para la translacin
de direcciones:

Mapeo Directo: Aqu el dispositivo de translacin consiste en n entradas correspondientes a la


cantidad de pginas virtuales posibles (|V| / p, donde p es el tamao de pgina). La entrada i de la
tabla contiene la direccin de entrada de la pgina real, o frame, en el cual la pgina virtual i es
mapeada, o un patrn que indica que la pgina i no est en memoria principal. Si tenemos tamao de
pginas p = 2n, una direccin virtual efectiva de n bits puede ser descompuesta en un nmero de
pgina (los n - k bits ms a la izquierda) y en un desplazamiento (los k bits ms a la derecha). El
dispositivo traslada los nmeros de pgina a un nmero frame, el cual es concatenado al
desplazamiento para obtener la direccin real.
59

Mapeo Asociativo: Aqu el dispositivo contiene pares (x, y), donde x es el nmero de pginas e y es
el nmero de frame en la memoria fsica. La bsqueda es hecha por contenido, es decir, se busca x
para encontrar y. Se necesitan tantas entradas a la tabla como frames existan en la memoria fsica (|
M| / p, donde p es el tamao de pgina). Si bien puede resultar mucho menor en nmero de entradas
al anterior, su implementacin no es RAM, sino CAM (con su mayor costo).

Debido a las desventajas de estos dos mtodos se usa un mtodo hbrido. Este dispone una
pequea memoria asociativa (TLB o Translation lookaside buffer) que contendr el par frame-page
(x, y) ms probable a ser referenciado. Y la tabla de pginas en memoria principal contendr el resto
del mapa. Un registro (PP) apunta al comienzo de la tabla de pginas del proceso actual. La
bsqueda se inicia en el TLB. En paralelo tambin se realiza en la tabla de pginas. Si hay hit en el
TLB sacamos el frame (puntero a la direccin fsica al comienzo de la pgina) y cancelamos la
bsqueda directa (en la tabla). En caso de que no se encuentre en los TLB, se espera por el resultado
de la bsqueda directa. Si ambos fallan ocurre un page fault y se le da el control a una nueva tarea.
VPN

OFF
miss

TLB
hit

VPN

OFF

Dificultad del paginado


1) Manejo de espacios lgicos variables. Cada tarea tiene asociada su tabla de pginas
VPN

OFF

PFP

Puede darse el caso que se intente invadir espacios lgicos ya asignados. Esto marca el aborto de la
aplicacin no tiene solucin. Ser habla de tablas ralas.
2) Compartir cdigo/datos
Si bien se puede hacer, tambin no sin tener en cuenta su posible efecto
TAREA B

TAREA A
TAREA C
2000
3000

2000

2000
3000

60

3000

Dado la ejecucin de C se har por parte de A (o B) a partir de su respectiva tabla de pginas, el sistema
debe estar avivado de ello para dejar espacio libre que pueda dar cabida (esto para cualquier tarea que
pretenda usar C)
Tabla de Pginas
Problemas que acarrea la tabla de pginas:
Muchos recursos de memoria principal empleados por la pgina de pginas.
Problema de fragmentacin externa a nivel de tabla. En el sentido de que es un rea contigua en la
cual se indexa con VPN (nmero virtual de pgina). Se requiere un espacio contiguo de tamao
suficiente.
Lo primero se maneja permitiendo que la tabla de pginas se encuentre paginada, esto es, parte en memoria
y parte en disco.
El otro punto queda resuelto organizando la tabla de pginas en forma jerrquica, no en nico nivel. Solo
estar en memoria lo que se necesita.
Otra solucin a los temas planteados es el empleo de una tabla de pginas invertida. De lo que se trata es de
englobar en una nica estructura la informacin de todas las pginas, sin distincin de procesos, residentes
en memoria. La tabla estar acotada por el tamao de la memoria principal del sistema y el tamao de
pgina, no existiendo tampoco el problema de manejar reas contiguas. Se usa una tcnica de
almacenamiento a travs de una tcnica de hash y se realiza una bsqueda en forma asociativa.
Thrashing
Un manejo global de memoria est sujeto a thrashing, o sobrecompromiso de las locaciones de memoria
principal. Si el nivel de multiprogramacin es demasiado alto, las pginas sern tomadas del conjunto del
programa ms recientemente usado. Pero estas pginas pronto tendrn que ser rellamadas puesto que este
programa ser el siguiente en ser ejecutado. Incluso si la carga est bien controlada, una tarea puede perder
algunas de sus pginas durante las transiciones. Por esto se necesitan controles de localidad y de carga.
Algoritmo de reemplazo (ver cuaderno)
El manejo de alocacin de memoria primaria (PMA) para una tarea toma varias formas dependiendo de las
elecciones de diseo. Estas opciones son:

Si las tareas son particionadas en reas fijas o variables


Si los algoritmos de reemplazo son locales o globales.

Sea Ct = {p1,p2,,pi} el conjunto de pginas residentes en el tiempo t para una tarea dada. Si ri = pj Ci,
luego debemos cargar pj en memoria principal.

Reemplazo Aleatorio (local o global, particiones fijas o variable). Un pi es elegido en forma


aleatoria de Ct cuando se necesita un reemplazo. Este algoritmo no cumple con el principio de
localidad, por ende no es bueno. Para este algoritmo no es necesario hardware extra y el trabajo del
SO es mnimo.
Reemplazo First In- First Out (FIFO, particiones local y particiones fijas). Las pginas en Ct son
ordenadas al orden de llegada. Cuando se llena C t, la primera pgina cargada es la primera en ser
reemplazada. No es necesario hardware extra, el SO debe mantener una cola de las pginas cargadas.
61

El overhead de un page fault, que es la insercin y borrado de la cola, es mnimo comparado con el
tiempo que toma traer una pgina de memoria secundaria. Un problema de este es que una pgina
que es referenciada muchas veces puede ser reemplazada con demasiada frecuencia.
Reemplazo Clock o First In- Not Used First Out (FINUFO, local y fijo + global y variable). Este
trata de resolver el problema que tiene el FIFO. Mantenemos una cola FIFO como antes con la
adicin de un bit de uso y una cola circular. Cuando ocurre un fault nos fijamos en la cola la primer
pgina con el bit de uso apagado. Si no lo est, se apaga y se posiciona en la siguiente en la lista, as
hasta encontrar una pgina que tenga el bit apagado. Para implementar este algoritmo necesitaremos
un bit en hardware para cada frame. Este bit es seteado en cada referencia a memoria de este frame.
Esto puede ser hecho durante el proceso de mapeo, si el bit es colocado en las tablas de mapeo. Por
lo tanto no habr un overhead de tiempo y el hardware extra es poco. La funcin del SO es simple.
Reemplazo Last Recient Use (LRU, (l, f) +( g, v)). El problema del algoritmo anterior es que no
reordena las pginas de acuerdo a n de referencias recientes. Podemos lograr esto mediante el uso de
una pila, la cual es reordenada en cada referencia. Cuando se referencia una pgina que se encuentra
en memoria, se busca en la pila, se saca, se mueven todas la pginas una posicin para abajo y se
coloca esta al tope de la pila. Si la pgina referenciada no se encuentra en la pila, la pgina del fondo
de esta es la elegida para el reemplazo, se elimina de la pila, se mueven todas las restantes una
posicin hacia abajo y la pgina trada a memoria se coloca al tope. El algoritmo LRU puro es
imprctico, ya que el orden en la pila cambiar con cada referencia a memoria. Cada movimiento en
la pila implica un acceso a memoria y el overhead es inaceptable, a menos que la pila sea
almacenada en un buffer de memoria rpido. En este caso el corrimiento de la pila puede ser hecho
en paralelo con la referencia a memoria.
Reemplazo ptimo en particiones fijas ((l, f)). Con conocimiento del futuro, se puede desarrollar
un algoritmo ptimo, donde optimalidad es definido como el mnimo n de page fault. Cuando ocurre
un page fault y el Ct est completo, hay que elegir una pgina para reemplazar, ya que usamos
particiones fijas para el Ct. Nos valemos de la informacin del futuro prximo y elegimos aquella
pgina perteneciente a Ct que sea la ltima en ser referenciada de las dems en este futuro prximo.
Naturalmente esto no es aplicable en tiempo real y es de inters para proveer una medida para los
otros algoritmos.
Reemplazo Working Set (local o global, variable). Consiste en fijar (como parmetro del sistema)
una ventana T. Periodiacamente, no necesariamente al momento del page fault analiza que pginas
han sido referenciadas en el ltimo intervalo T. Las que si lo fueran permanecen en el working set.
Las que no dejan de pertenecer al mismo lo cual no indica que abandonan memoria, si no que
pasarn a integrar una estructura global de pginas libres Si hay un page fault simplemente se la trae
desde MS, incrementando el WS (obviamente si superar un lmite del sistema).

Ejemplo: asumamos una ventana de 4 referencias:

Reemplazo Frecuencia de Fallo de Pgina (PFF, local o global, variable). Esta regla es un intento
de tener una alocacin de memoria principal que siga las variaciones en las localidades. Est definida
como la recproca de T, y monitorea el tiempo de fallo entre pginas (T expresado en las mismas
unidades que la ventana T del algoritmo WS). En un page fault, si la PFF es ms grande que un valor
predefinido P, no hay reemplazos y el PMA se aumenta en uno para cargar la pgina faltante. De otra
62

manera, si la PFF es ms chica que P, se descargan todas las pginas no referenciadas desde el ltimo
page fault.
La principal diferencia entre PFF y WS est en el lugar en que se toman las acciones cuando ocurre
un fallo de pgina, ya que en esencia T representa el lmite inferior del tamao (variable) de la
ventana.

Algoritmo mnimo a partir de conocer el futuro


La dificultad es que se tienen, a diferencia de fijo, 2 grados de libertad.
Optimo: Minimizar el producto espacio X tiempo
El costo de un page fault ahora depender no solo del tiempo de acceso a disco sino de la memoria
asignada en el momento del page fault.
Esto imposibilita teorizar sobre una optimizacin variable. Se puede recurrir a una simplificacin.
Fijar un costo (promedio) de page fault.
A partir de esto si esto podemos razonar conociendo el futuro. Imaginemos una ventana hacia
adelante. Conociendo el futuro, con qu criterio decidimos que una pgina se quede o jede de
pertenecer al WS.
Si el costo de mantenerla es menor que el del page fault en que se incurra si se la reemplaza.
Se traducira en una ventana a futuro.
R = costo page fault
n = cantidad de referencias previas
u = tiempo de cada acceso
nucR
t=R/U
Una ventana T talque si n excede a T corresponde liberara la pgina en lugar de reternerla.

Sistemas Segmentados
La segmentacin es una tcnica para manejar la alocacin del espacio virtual, mientras que la paginacin es
un concepto usado para manejar la alocacin del espacio fsico. Un segmento es un conjunto de elementos
de datos contiguo relacionados lgicamente. A los segmentos les est permitido crecer y contraerse
arbitrariamente, a diferencia de las pginas las cuales tienen un tamao fijo.
El sistema segmentado tiene direcciones de la forma (Si, Dj), donde Si es el n de segmento y Dj es el
desplazamiento en el segmento. Asociado con cada tarea hay una tabla de segmento que nos da la
translacin entre el n de segmento y la direccin real. Un registro (STP) contiene la direccin de la tabla de
segmento para el proceso actual. El proceso de translacin es as: se tiene la direccin virtual (Si, Dj), donde
Si es sumado al contenido del STP para apuntar a la entrada correspondiente en la tabla de segmento. Un
flag indica si el segmento est en memoria principal. Si es as, se realiza un chequeo para determinar si Dj es
ms grande que Li (longitud de segmento).Si este es el caso una rutina de error es invocada y el programa es
abortado. Si no es as, se chequean los bit de proteccin. Asumiendo que la operacin es vlida, luego Dj es
sumado (no concatenado) a la direccin real, encontrada en la entrada de la tabla, para conseguir la direccin
efectiva.
El mecanismo es un poco ms complejo que el de la paginacin, debido que involucra una suma.
Consideremos el caso que un segmento no est en memoria principal. La primera tarea es chequear si hay
espacio para el segmento, esto es, si existe en memoria principal un rea libre de tamao Li. Se mantiene
informacin del sistema generalmente en dos listas enlazadas, una para los segmentos reservados y otras
para los segmentos libres. Cada segmento libre tambin tiene informacin respecto a su tamao. Para
determinar si es posible reservar un rea de memoria principal utilizamos un algoritmo de reservacin (Ej.
63

First Fit). Si esto es posible, el rea de memoria es alocada al segmento. Se actualiza la tabla de segmentos y
la lista de segmentos reservados. Si la reservacin falla tenemos la opcin entre compactacin y
reemplazo.
La fragmentacin externa torna inviable (por ineficiente) para MP.

Sistemas Segmentados con Paginacin


Elimina el problema de fragmentacin externa, podr retener las ventajas del sistema segmentado.
Aqu los segmentos son divididos en pginas. Una direccin virtual es de la forma (Si, Pj, Dl), donde Si es un
n de segmento, Pj un n de pgina en el segmento y Dl un desplazamiento dentro de la pgina. Un
segmento consiste de una o ms pginas. El mecanismo de translacin consiste en: un registro STP que
apunta a la tabla de segmentos actual, si corresponde a la entrada en la tabla. Luego asociado con esta
entrada hay un puntero a la tabla de pginas. La j-sima en la tabla de pginas indica si existe el
correspondiente frame o si se produce un page fault. En el primer caso la direccin real es finalmente
computada concatenando el desplazamiento con la entrada en la tabla de pginas. En el caso de fault, se
maneja como en sistemas paginados.
Observemos que la translacin de una direccin es hecha a travs de dos referencias indirectas en lugar de
una, como en sistemas puramente paginados o segmentados. Por lo tanto la penalidad puede ser
extraordinariamente severa a menos que usemos algn tipo de mapeo asociativo y/o registros fast buffers.
# segmento

# paginado

offset

Tabla segmento

Tabla de pginas

FP

Podr encontrarse 2 casos

extremos:

Segmentacion lineal: Lo ms parecido a un sistema pginado. Esto es el segmento al solo efecto de


controlar tamao (address). La proteccin a nivel de pginas

Name segmentacin: Esto es segmentacin solo que los segmentos estn pginados.

64

Paginacin vs. Segmentacin

En un espacio paginado, el espacio lgico de un programa queda fijado en el momento de la carga (en la
primer llamada).
Clasificacin de las Computadoras Paralelas
Clasificacin de Flynn:

Est basada en dos conceptos: flujos de instrucciones y de datos. Un flujo de datos corresponde a un
contador de programa. Un sistema con n CPU tiene n contadores de programa, y luego n flujos de
instrucciones.
Un flujo de datos consiste de un conjunto de operandos.
Los flujos de instrucciones y de datos son, casi siempre, independientes, para las cuatro combinaciones
existentes. SISD es solo la computadora secuencial clsica de Von Neumann. Tiene un flujo de
instrucciones, un flujo de datos, y hace una cosa a la vez. Las mquinas SIMD tienen una unidad de control
65

nica que despacha una instruccin a la vez, pero tiene varias ALUs para ejecutarla en varios conjuntos de
datos simultneamente.
Estas mquinas se usan para clculos cientficos.
Las mquinas MISD son una categora extraa, con varias instrucciones sobre el mismo dato. No est claro
si alguna de tales mquinas existe, pero algunos ubican a las mquinas pipelined como MISD.
Finalmente, tenemos MIMD, las cuales son solo varias CPUs independientes operando como parte de un
gran sistema. La mayora de las computadoras paralelas caen dentro de esta categora. Los
multiprocesadores y las multicomputadoras son mquinas MIMD.
La clasificacin de Flynn termina aqu, pero puede extenderse como en la figura. SIMD puede separarse en
dos subgrupos. El primero es para supercomputadoras numricas y otras mquinas que operan sobre
vectores, realizando la misma operacin sobre cada elemento del vector. La segunda es para mquinas del
tipo paralela, como la ILLIAC IV, en la cual una unidad de control maestro reparta las instrucciones a
muchas ALUs independientes.
En nuestra clasificacin, la categora MIMD puede dividirse en multiprocesadores (mquinas con memoria
compartida), y multicomputadoras (mquinas con pasaje de mensajes). Existen tres clases de
multiprocesadores, los que se distinguen por como implementan la memoria compartida.

UMA (Accesos a Memoria Uniformes): cada CPU tiene el mismo tiempo de acceso a cada mdulo
de memoria. Esto hace que el rendimiento sea predecible, un factor importante para la escritura de
cdigo eficiente.
NUMA (Accesos a Memoria No Uniformes): no tienen la propiedad de las anteriores y el tiempo
de acceso depende de la distancia entre el CPU y el mdulo al que se desea acceder.
COMA (Accesos a Memoria Cache Only): son tambin NUMA, pero de una manera diferente.
Trata a toda la memoria principal como cache. Las pginas no estn fijas a la mquina que las cre.
En su lugar, el espacio de direcciones fsicas se divide en lneas de cache, las cuales viajan dentro del
sistema a pedido. Los bloques no tienen mquina de residencia. Una memoria que solo llama a las
lneas cuando las necesita se dice una memoria de atraccin. Usar toda la RAM como un gran cache
aumenta el hit rate, y por lo tanto, el rendimiento.

La otra categora principal de mquinas MIMD consiste de las multicomputadoras, las cuales, a diferencia
de las anteriores, no tienen una memoria principal compartida a nivel de arquitectura. En otras palabras, el
SO no puede acceder a la memoria de otras CPUs solo ejecutando un LOAD. Tiene que enviar un mensaje
explcito y esperar por una respuesta. Esta es lo que las distingue de las anteriores. La habilidad de acceder a
memoria remota est soportada por el SO y no por el HW. La diferencia es sutil, pero muy importante. A
veces son llamadas mquinas NORMA (Accesos a Memoria No Remota), porque no pueden acceder
directamente a memoria remota.
Pueden dividirse a su vez en dos subcategoras:

66

MPPs (Procesadores Paralelos Masivamente): supercomputadoras caras que consisten de muchas


CPUs fuertemente acopladas por una red propietaria de interconexin de alta velocidad (Cray T3E,
IBM SP/2).

NOW (Red de Estaciones de trabajo) o COW (Grupo de estaciones de trabajo): consiste de


varias PC normales o estaciones de trabajo conectadas por tecnologa comercial. No tienen mucha
diferencia, pero se construyen por una fraccin de lo que cuesta una MPP y se les dan otros usos.

Diseo de Control
Introduccin
Los sistemas digitales se pueden separar en dos partes: una unidad de procesamiento de datos, que es una
red de unidades funcionales capaces de desarrollar ciertas operaciones sobre el dato, y la unidad de control.
Esta tiene como propsito mandar seales de control o instrucciones a la parte que procesa el dato. Estas
seales de control seleccionan la funcin a ser realizada en un tiempo especfico y rutean el dato a travs de
la unidad funcional apropiada.
Dado un set de instrucciones y el diseo de un datapath, el prximo paso es definir la unidad de control. Esta
le dice al datapath que hacer en cada ciclo de reloj durante la ejecucin de instrucciones.
Su funcin es traer instrucciones de memoria e interpretarlas para determinar las seales de control que
deben ser enviadas a las unidades de procesamiento de datos. Dos aspectos centrales de estos procesos
pueden identificarse:
Secuenciamiento de la instruccin, son los mtodos por los cuales las instrucciones son elegidas para
ser ejecutadas.
Interpretacin de la instruccin, mtodos utilizados para activar las seales de control que causan la
ejecucin de la instruccin en la unidad de procesamiento de datos.
La unidad de control puede ser especificada por un diagrama de estados finitos. Cada estado se corresponde
con un ciclo de reloj, las operaciones ha ser realizadas durante el ciclo de reloj son escritas en el estado. El
prximo paso es llevar este diagrama de estados al hardware.
Una forma de medir la complejidad del control est dada por:
Estados * Entradas de Control * Salidas de Control
Secuenciamiento de la Instruccin
Conceptualmente, el mtodo ms simple de controlar la secuencia en la cual las instrucciones son
ejecutadas, es que cada instruccin especifique explcitamente la direccin de su sucesor (o sucesores). La
explcita inclusin de la direccin de la instruccin tiene la desventaja de un incremento sustancial de la
longitud de la instruccin, el cual incrementa el costo de la memoria de almacenamiento.
La mayor parte de las instrucciones tienen un nico sucesor, que se encuentra en la locacin inmediata. Por
esto se usa el program counter (PC), que contiene la direccin de la instruccin actual. Sumndole al PC la
longitud de la instruccin (k), encontramos la prxima instruccin (PC = PC + k). Esta suma se hace
automticamente despus que la instruccin es trada, por lo tanto el PC tiene ya la direccin de la prxima
instruccin.
Es necesario proveer algunas instrucciones que transfieran el control entre instrucciones, que no estn en
direcciones consecutivas. Estas instrucciones, llamadas BRANCH, especifican explcitamente o
implcitamente una direccin de instruccin. Los branch incondicionales siempre cambian el control, en
cambio los branch condicionales, testean primero una condicin. Si se satisface, se realiza el cambio de
control, sino se incrementa el PC de forma comn (PC = PC + k).
Para poder realizar las llamadas a subrutinas y procedimientos, se usa un stack (pila) que guarda las
direcciones de retorno cuando el procedimiento termina.
67

Interpretacin de la instruccin
Las seales de control son transmitidas de la unidad de control al mundo exterior va lneas de control.
Se cuentan principalmente con cuatro tipos de lneas de control:
COUT: Estas seales controlan directamente la operacin de la unidad de procesamiento de datos.
La funcin principal de la unidad de control es generar las COUT
.
CIN: Estas seales permiten que el dato que est siendo procesado influencie a la unidad de control
permitiendo que las decisiones se hagan con una dependencia de dato. (Ej. overflow).
COUT: Estas seales son transmitidas a otras unidades de control y pueden indicar condiciones de
estados como ocupado u operacin completa.
CIN: Estas seales son recibidas de otras unidades de control. Tpicamente incluyen seales de
start o stop de informacin de temporizacin.
Existen dos enfoques en el diseo de las unidades de control. El primero ve a la unidad de control como
uncircuito lgico secuencial que genera especficas secuencias fijas de seales de control. Las metas de este
enfoque es el de minimizar el n de componentes usados y maximizar la velocidad de las operaciones. No se
pueden realizar cambios en el diseo. En este enfoque se dice que es una unidad de control cableada. Debido
a que las unidades de control son los circuitos ms complejos en una computadora, se dice que las unidades
de control cableadas son costosas de disear y depurar.
El otro enfoque (propuesto por Wilkes) es la microprogramacin. Las microinstrucciones se almacenan en
una memoria especial llamada memoria de control (CM). La operacin es realizada trayendo las
microinstrucciones, una a la vez, de la CM y usndolas para activar las lneas de control directamente. La
microprogramacin hace el diseo de la unidad de control ms sistemtica a travs de organizar las seales
de control en palabras (microinstrucciones) que tiene un formato bien definido. Las seales son
implementadas por un tipo de software (firmware) en vez de hardware, por lo tanto el diseo puede ser
fcilmente cambiado, alterando el contenido de la CM. El lado negativo, las unidades de control
microprogramadas son ms costosas que las unidades cableadas por la presencia de la CM. Tambin es ms
lenta debido al tiempo extra requerido para traer la microinstruccin de la CM
Control Cableado
El diseo de una unidad de control cableada involucra varios compromisos complejos entre la cantidad de
HW usado, la velocidad de la operacin y el costo del proceso de diseo por si mismo. Los tres mtodos ms
comunes son:
Mtodo de la tabla de estados: El algoritmo estndar se acerca al diseo de un circuito secuencial.
Mtodo de delays: es un mtodo heurstico basado en el uso de elementos de retardo controlados por
reloj para temporizar las seales de control
Mtodo secuenciamiento por contador: utiliza contadores para temporizar las seales.
El primer mtodo es el ms formal y usa tcnicas para minimizar el nmero de compuertas y flip-flop. Los
otros mtodos son menos formales y tratan de derivar el circuito lgico directamente de la descripcin
original de la unidad de control (diagrama de flujo). Aqu el diseo no contiene el mnimo nmero de
compuertas y flip-flop pero es obtenido con mucho menos esfuerzo.
Todos estos mtodos no son una aproximacin sistemtica al diseo del control cableado. En la prctica, la
unidad de control del CPU es tan compleja que ninguno de estos mtodos de diseo por si mismo puede dar
uncircuito satisfactorio a un aceptable costo de diseo. Por ejemplo, los diseos ms eficientes en varios
circuitos secuenciales independientes, enlazados.
Mtodo de la Tabla de Estados
El comportamiento requerido de una unidad de control, como una mquina secuencial de estados finitos,
puede ser representado por una tabla de estados (TE). Los Cin y Cout denotan las variables de entrada y de
salida de la unidad de control. Las filas de la tabla de estado corresponden al conjunto de estados internos de
68

la mquina. El estado interno es determinado por la informacin almacenada en la unidad en puntos


discretos de tiempo (clock period). Las columnas corresponden al conjunto de seales externas que van a la
unidad de control, esto es CIN.
La entrada en la columna Ciy la Ij denota el prximo estado de la unidad de control y el conjunto de seales
de salida.
La forma ms directa de implementar es mediante una ROM. Otra forma es aprovechando que una pequea
parte de la tabla tiene informacin nica, el hardware para llevar a cabo esto es el PLA. Dado el gran tamao
de la tabla, un solo PLA es demasiado grande, entonces se factoriza la tabla en varios PLA pequeos cuyas
salidas se multiplexan. Al momento de asignar los estados hay que tener en cuenta, para minimizar el
tamao del PLA, que los estados que realizan operaciones similares tengan nmeros de estados prximos.
Adems la seleccin de los opcodes tambin puede afectar el costo de la unidad de control.
Una TE es recomendable para implementar pequeas unidades de control. Las desventajas de usar TE son:
1. El nmero de combinaciones de estados y entradas puede ser de un tamao muy grande y tornar la
computacin muy costosa.
2. Una TE tiende a ocultar informacin til acerca del comportamiento del circuito, por Ej. la existencia
de patrones repetidos o loop.
Los circuitos de control diseados con TE tienden a tener una estructura aleatoria, lo cual dificulta el
depurado y mantenimiento del circuito.
Mtodo Contador
Se centra la unidad de control en un contador. Bsicamente la unidad de control consiste en un contador
modulo k cuyas salidas estn conectadas a un decoder (1k) cloqueadas. Si el enable del contador est
conectado a una fuente de reloj, el contador ciclar continuamente a travs de los k estados. El decoder
genera k seales de pulsos en sus lneas de salida. Pulsos consecutivos son separados por un perodo de
reloj. El conjunto de pulsos divide el tiempo requerido para un ciclo completo a travs del contador en k
partes iguales; estos conjuntos de pulsos son llamados seales FASE. Dos lneas de entradas adicionales son
provistas para prender y apagar el contador.
La utilidad de los contadores de control de este tipo est dada por el hecho de que muchos circuitos digitales
son diseados para realizar un nmero pequeo de acciones repetidas. Cada pasada a travs del loop
constituye un ciclo de instruccin, asumiendo que cada etapa puede ser realizada en un perodo de reloj uno
puede construir una unidad de control para un CPU alrededor de un nico contador secuencial. Cada seal
pulso activa un conjunto de lneas de control en la etapa i de cada ciclo de instruccin. Es usualmente
necesario poder variar la operacin desarrollada en el paso i dependiendo de ciertas seales de control o
variables de condicin, estas son las seales CIN. Un circuito lgico se necesita para combinar la CIN con
las seales pulsos generadas por el contador.
Performance del control Cableado
Al momento de disear el control para una mquina se quiere minimizar el:
CPI promedio,
El ciclo de reloj
Y la cantidad de hardware.
El CPI se minimiza reduciendo el nmero de estados a lo largo del path de ejecucin de una instruccin
puesto que cada ciclo de reloj corresponde a un estado. Esto se logra tpicamente realizando cambios al
datapath para combinar o eliminar estados.
Control Microprogramado
Cada instruccin en una CPU es implementada por una secuencia de uno o ms conjuntos de
microperaciones concurrentes. Cada microperacin es asociada con un conjunto especfico de lneas de
control, las cuales, cuando son activadas, causan que la microperacin tome lugar. Ya que el nmero de
instrucciones y lneas de control son a menudo unas cientos, una unidad de control cableada que selecciona
69

y secuencia las seales de control puede ser extremadamente complicada. Como resultado, es muy costoso y
dificultoso disearla.
La microprogramacin es un mtodo de diseo de control en el cual la informacin del secuenciamiento y
de la seleccin de las seales de control, es almacenada en un ROM o RAM llamada memoria de control
(CM). Las seales de control pueden ser activadas en cualquier momento en que son especificadas a travs
de la microinstruccin, la cual es trada de la CM. Cada microinstruccin tambin especfica explcitamente
o implcitamente la prxima microinstruccin que ser usada, por lo tanto provee la informacin necesaria
para el secuenciamiento.
En una CPU microprogramada, cada instruccin mquina es ejecutada por un microprograma el cual acta
como un interprete en tiempo real para la instruccin. El conjunto de microprogramas que interpretan un
conjunto de instrucciones en particular o lenguaje L es llamado un EMULADOR de L.
La invencin de la microprogramacin posibilit que el conjunto de instrucciones pueda ser cambiado
alterando el contenido de la CM, sin tocar el hardware
El diseo de Wilkes
En el esquema original, la microinstruccin tena dos partes:
Campo de control, el cual indica las lneas de control que sern activadas.
Campo de direccin, el cual indica la direccin en la CM de la prxima microinstruccin que ser
ejecutada.
Aqu, cada bit ki del campo de control corresponde a una lnea distinta de control Ci
Cuando ki . = 1 en la microinstruccin actual, Ci es activada, sino permanece inactiva.
En este primer esquema, la CM estaba organizada como una ROM, compuesto de un PLA (matriz de
diodos). Laparte izquierda de la matriz contiene los campos de control de cada microinstruccin, mientras
que la parte derecha contiene los bits del campo de direcciones. Las filas de la CM representan las
microinstrucciones y las columnas representan cada lnea de control o lnea de direccin. Un registro
llamado Control Memory Address Register (CMAR), almacena la direccin de la microinstruccin actual.
Tambin hay un switch S, que permite responder a seales externas o condiciones. Este S permite
seleccionar uno de los dos posibles campos de direcciones.
Muchas modificaciones se han propuesto a este diseo bsico. La mayor rea concierne a la longitud de la
palabra de la microinstruccin. La longitud de la microinstruccin est determinada por:
El n mximo de microperaciones simultneas que se pueden especificar (grado de paralelismo).
La manera en la cual la informacin de control es representada o codificada.
La manera en la cual la direccin de la prxima microinstruccin es especificada.
En una unidad de control microprogramada el costo de hardware se mide por el tamao de la CM y la
performance se mide por el CPI. El tamao de la CM se trata de reducir de dos maneras: reducir el n de
microinstrucciones y el ancho de cada microinstruccin. Las instrucciones que demandan gran parte del
tiempo de ejecucin son optimizadas para velocidad y las otras son optimizadas para espacio.
Paralelismo en microinstrucciones
Las microinstrucciones que especifican una sola microperacin, son relativamente cortas, pero, por la
carencia de paralelismo, ms microinstrucciones se necesitarn para realizar una dada operacin.
Muchas veces, las microinstrucciones son diseadas para tomar ventaja del hecho de que a nivel de
microprogramacin, muchas operaciones pueden ser hechas en paralelo. Usualmente se divide la parte de la
especificacin de la microperacin de la microinstruccin en k campos disjuntos de control. Cada uno de
estos est asociado a un conjunto de microperaciones, cada una de las cuales puede ser realizada
simultneamente con las microperaciones especificadas en los campos de control restantes. Un campo de
control usualmente especifica los valores de las lneas de control para un solo dispositivo (sumador, registro
bus, etc.).
Los esquemas, en los cuales hay un campo de control para cada lnea de control, malgastan el espacio de la
CM, ya que muchas combinaciones de seales de control que pueden ser especificadas por la
microinstruccin nunca son usadas. Consideremos el Registro R de la siguiente figura, el cual puede ser
70

cargado de una de cuatro fuentes independientes usando las lneas de control c0, c1, c2 y c3. Supongamos
que hay 1 bit para cada una de estas lneas de control en un campo de control de la microinstruccin. Solo 5
combinaciones son vlidas (una lnea con un 1 y las restantes con 0, ms la que tiene 0 en toda las lneas).
Estas 5 combinaciones pueden ser codificadas en un campo de [log2 5] = 3 bits.
El formato sin codificar tiene la ventaja que las seales de control pueden ser derivadas directamente de la
microinstruccin. Cuando se usan campos codificados, cada uno de ellos debe ser conectado a un
decodificador del cual se derivan las seales de control.
Las microinstrucciones son clasificadas en:

Horizontales. Tienen las siguientes caractersticas:


- Formatos Largos
- Habilidad de expresar un alto grado de paralelismo
- Pequea codificacin de la informacin de control.

Verticales. Tienen las siguientes caractersticas:


- Formatos cortos.
- Limitada habilidad de expresar paralelismo.
- Considerable codificacin de la informacin de control.

Direccionamiento de la Microinstruccin
En el diseo de Wilkes, cada microinstruccin contiene la direccin en la CM de la prxima
microinstruccin a ser ejecutada. Esta explcita especificacin de la direccin tiene la ventaja de que no se
pierde tiempo en la generacin de la direccin de la microinstruccin, pero desperdicia mucho espacio de la
CM.
Los campos de direccin pueden ser eliminados de todas las microinstrucciones, con el uso de un microprogram counter (PC). Los branch condicionales son implementados de varias formas. La condicin a
testear es generalmente una variable de condicin o un flag generado por la unidad de procesamiento del
dato. Si existen varias de estas condiciones, un subcampo seleccin de condicin es incluido en la
microinstruccin, para indicar que variable de condicin debe ser testeada. La direccin del branch puede
estar en la microinstruccin, y en tal caso la direccin es cargada en CMAR cuando la condicin es
satisfecha. El espacio de la CM puede ser conservado no almacenando un campo completo de direccin en
la microinstruccin, sino almacenando los bit de menor orden. Esto restringe el rango de los branch a una
porcin pequea de la CM.
71

Un enfoque alternativo al branch es permitir que las variables de condicin modifiquen el contenido del
CMAR directamente, eliminando as completamente o en parte la necesidad de direcciones de branch en las
microinstrucciones.

Timing de las microinstrucciones


Asumimos que cada microinstruccin genera un conjunto de seales de control que se activan durante su
ciclo de ejecucin. As, un solo pulso de reloj sincroniza todas las seales de control; el perodo de reloj
puede ser el mismo que el perodo de ciclo de instruccin. Este modo de control es llamado MONOFASE.
El nmero de microinstrucciones necesarias para especificar una operacin particular puede ser reducido
dividiendo el ciclo de la microinstruccin en varias fase secuenciales o subperodos. Cada seal de control
est activa solo durante una de las fases. Este modo de operacin, llamado POLIFASE, permite que una sola
microinstruccin especifique una secuencia de microperaciones.
El tiempo requerido para traer una microinstruccin de la CM es regularmente una parte significativa del
tiempo de ciclo total de la microinstruccin. El fetch y la ejecucin de la microinstruccin pueden ser
solapados. Una manera simple de hacer esto es reemplazar el IR por un par de registros formando un
pipeline de dos segmentos. Mientras una microinstruccin en IR1 es ejecutada, la siguiente
microinstruccin puede ser trada y puesta en el IR0.
Hasta ahora asumimos que la influencia del campo de control de una microinstruccin est limitada al
perodo en el que dura la ejecucin de la microinstruccin. Esta restriccin puede ser eliminada
almacenando el campo de control en un registro el cual continua ejerciendo el control hasta que la siguiente
microinstruccin lo modifique.
Esta tcnica es llamada control residual y es particularmente til cuando las microinstrucciones son usadas
para alocar los recursos del sistema.
Aplicaciones de la Microprogramacin
Adems de la interpretacin de un dado set de instrucciones, la microprogramacin tambin puede ser
aplicada efectivamente a otras tareas de naturaleza interpretativa como la emulacin, ejecucin directa de
lenguajes de alto nivel y mejoras de aspectos especficos de una dada arquitectura.
Emulacin
La microprogramacin, tal como ha sido vista, es la interpretacin de un conjunto de instrucciones nativo.
La emulacin sera la interpretacin de sets de instrucciones diferentes al set nativo. Esta definicin puede
no ser precisa para mquinas como Cel Data 100 en la cual no hay set nativo. De hecho es la emulacin la
que provee la compatibilidad entre tales mquinas.
La interpretacin de cdigo no necesita de la microprogramacin, puede darse enteramente en SW, en cuyo
caso se llama simulacin. Luego el trmino emulacin lo reservamos a los casos en donde es hecho
principalmente a nivel de microprogramacin, con algn soporte de SW. Un emulador microprogramado
ser luego un microprograma en una mquina ejecutando los 5 pasos del ciclo de ejecucin de instrucciones
de otra mquina.
Para ser eficiente, el PC emulado, el PSW(palabra de estado del programa) y toda variable del estado del
procesador emulado deber estar en registros accedidos por el microcdigo de la mquina original.
Naturalmente, la velocidad de la emulacin depender de la arquitectura de la mquina original y de la
emulada.
Si los sets de instrucciones se parecen y los tipos de datos bsicos tienen igual longitud, la emulacin ser
rpida; se puede concebir que una versin de una mquina emulada A en una mquina B puede ser ms
72

rpida que la versin original, si B es ms rpida que A (ciclos de MP y CM ms rpidos y mayor


horizontalidad que A).
Lo visto para emulacin es relativamente simple. Requiere del entendimiento de la instruccin a ser emulada
y de las habilidades de microprogramacin de la mquina en la cual se implementar. Cuando se incluyen
I/Os e instrucciones privilegiadas en la emulacin, se agrega otro nivel de complejidad (deben manejarse
conversin de cdigo, buffering, interrupcin y excepciones).

Ejecucin directa de Lenguajes de Alto Nivel


La traduccin y posterior ejecucin de un programa escrito en alto nivel, pueden adoptar dos tcnicas. En un
proceso de compilado, todo el programa fuente es traducido a lenguaje mquina. Luego esta versin o
programa objeto, es ejecutado. En el proceso de interpretacin, el fuente es ejecutado sin pasar por la fase de
programa objeto. Esto puede llevar a un procesamiento ineficiente, dado que una sentencia ser analizada
cada vez que se encuentre. Luego el intrprete es dividido en 2 partes:
Traduccin: transforma el fuente en un lenguaje intermedio,
Ejecucin: que computa directamente las cadenas generadas en el paso anterior.
Veamos que pasa cuando la mquina es microprogramada en el caso de interpretacin. La rutina intrprete
puede ser escrita en lenguaje mquina (a su vez ejecutada por el microcdigo), o puede ser
microprogramada. En este ltimo caso, se tiene lo que se conoce como ejecucin directa de lenguajes de alto
nivel.
El lenguaje intermedio, o lenguaje de ejecucin directa, tiene que ser una buena salida de la fase de
traduccin y una buena entrada para la interpretacin del microprograma (esto implica una serie de
condicionamientos: velocidad, etc.).

73

Sintona de Arquitecturas
La microprogramacin da la oportunidad al diseador de modificar y expandir el conjunto de instrucciones
clsicos (Von Neumann).
Esto se hace evidente en mquinas como la VAX 780, con instrucciones como CALL y otras.
En esencia, habra una ganancia en la velocidad de ejecucin y un aumento de espacio en la memoria de
control.
La sintona del set de instrucciones consiste en monitorear el uso de las mismas, modificando el set nativo,
evaluando la ganancia o prdida en eficiencia, e iterativamente repetir este proceso hasta que alcance una
mejora razonable.
Idealmente se podra hacer este proceso dinmicamente con mquinas con memoria de control modificables.
El monitoreo podra hacerse en unas pocas microinstrucciones. El anlisis del seguimiento de las
instrucciones podra revelar cules secuencias pueden ser agrupadas.
Un generador de microprograma podr procesar el microcdigo para tales secuencias e insertar las nuevas
microrutinas en el microprograma.
La ltima accin sera reemplazar las secuencias originales por las nuevas instrucciones, interpretadas por
las nuevas microrutinas. Sin llegar a este punto, se puede pensar en optimizar subprocesos. Por ejemplo,
para sintonizar una lnea orientada a editor de texto para una mquina dada, podramos comenzar por
monitorear los comandos ms usados y las rutinas que son llamadas ms frecuentemente.
Se deben tomar precauciones (como hace VAX) de que en estas instrucciones de ejecucin, alternativamente
extensas, se puedan atender interrupciones en otros puntos del ciclo de las mismas, adems del fetch.

Comunicaciones
Topologas de la comunicacin entre Procesador y Memoria
La red de interconexin entre procesadores y memorias, puede tener varias topologas dependiendo de la
concurrencia deseada en la transferencia y de la inversin en HW.
Cross-bar switch
Es el esquema ms extenso y caro, ya que suministra rutas directas de procesadores a memorias. Con m
procesadores y n mdulos de memoria, se obtiene una concurrencia mnima de mn.(m, n). Necesita m . n
interruptores y cuando m y n son del mismo orden de magnitud, el nmero de puntos de cruce crece como
n2.
Como cada punto de cruce debe tener hardware capaz de intercambiar transmisiones paralelas y de resolver
pedidos conflictivos para un dado mdulo de memoria, el dispositivo de interconexin puede volverse
rpidamente un factor dominante en el costo del sistema completo. Esta tendencia puede acelerarse en el
futuro, ya que, con los avances en la tecnologa LSI, los costos de las memorias y los procesadores
disminuirn ms rpidamente que la estructura de los interruptores.
Fueron usados en los multiprocesadores Burroughs. El sistema ms representativo actual es el C.mmp
(multiminiprocesador).
74

Aunque este mtodo permite varias conexiones simultneas, hay un solo un camino posible entre dos
unidades.
No hay necesidad de eleccin sobre que camino seguir, no existen caminos alternativos.

Bus de tiempo compartido (time-shared bus)


Es la organizacin ms simple aunque con varios grados de complejidad dependiendo del nmero de buses.
Uno de los ms simple es tener todos los procesadores, memorias y unidades de I/O conectadas a un nico
bus, el cual puede ser totalmente pasivo. Obviamente, la concurrencia es mnima(una transaccin a la vez),
pero es por la inversin en hardware. La estructura de bus nico puede usarse en procesadores(virtuales)
compartiendo una memoria comn, con alguna circuitera adicional, de una manera multiplexada
sincronizada.
Puede ser usado en arquitecturas de funciones distribuidas y redes locales para interconexin entre
procesadores.
En las arquitecturas MIMD, puede lograrse ms paralelismo, al precio de ms complejidad, con ms buses
uni o multidireccionales. Pueden darse prioridades a unidades especficas si se agrega un rbitro de bus para
manejarlos.
Buses de Memoria de Mltiple Prtico
Esta organizacin concentra el intercambio en los mdulos de memoria. Cada procesador tiene acceso, con
su propio bus, a todos los mdulos de memoria. Los conflictos son resueltos asignando prioridades fijas a
los puertos de las memorias. Esta organizacin es bastante utilizada en monoprocesadores para permitir
accesos a memoria concurrentes entre la CPU y el PIO. Una caracterstica interesante de la arquitectura de
mltiple puerto es que la CPU puede tener accesos privados a memoria, o equivalentemente negarle el uso
de algn mdulo de memoria, de una forma muy simple.
La concurrencia en nuevamente mn.(m, n). La cantidad necesaria de HW es del mismo orden de magnitud
que en el cross-bar(m conexiones por mdulo) pero est ms localizada. Parece fcil aumentar el nmero de
mdulos, pero, por otro lado, el nmero de puertos en ellos limita el nmero de procesadores que pueden
conectrseles.
Algunos problemas son evidentes para elegir uno de las tres topologas anteriores. La tabla resume estos:

75

También podría gustarte