Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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:
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.
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:
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.
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
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
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
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.
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.
13
14
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
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.
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
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
2n
22 n 2n.Y
P 2n.Y X .Y 2 2 n 2n.Y
19
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
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:
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:
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
x.r0 r1r2...
Q
y.r0 r1r2...
converja rpidamente a Q.
x.r0 r1r2...
y.r0 r1r2... 1
r0 1 b
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...
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**
**2**
Ri+1=2Ri Qi+1B
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
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
28
Diferencias:
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
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.
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
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
Tsup2
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
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
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
Todos los buffers y estaciones de reservaciones tienen tags(identificadores) que son usados para el
control de los hazard.
Memoria
FP
operations
Floating point
register
6
5
4
3
2
1
3
2
1
3
2
1
3
2
1
Store
buffer
Memoria
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
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
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.
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.
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
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
32000
55
OFFSET
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
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
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 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
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:
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.
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).
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.
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.
# paginado
offset
Tabla segmento
Tabla de pginas
FP
extremos:
Name segmentacin: Esto es segmentacin solo que los segmentos estn pginados.
64
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
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
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:
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.
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.
75