Está en la página 1de 35

Ingeniera Informtica. Ampliacin de Estructura de Computadores.

Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
SEGMENTACIN

6.1 Introduccin a la segmentacin de Instrucciones.
La segmentacin o pipeline es una tcnica de realizacin de procesadores por la cual se solapa la
ejecucin de las instrucciones. Hoy en da es la tcnica clave para la realizacin de CPU rpidas.
La idea bsica de la segmentacin se puede extraer de una cadena de montaje de coches. Los
coches no se montan uno a uno, si no que su construccin se divide en fases sucesivas y el montaje
del coche se realiza tal como este va avanzando por estas fases. De esta forma cada fase est
trabajando simultneamente en la construccin de un coche diferente. De esta forma, la construccin
de un coche cuesta el mismo tiempo que antes, pero ahora la frecuencia con que salen los coches
construidos es mucho mayor (tantos como fases tenga su construccin).
Cada uno de estas fases se denomina segmento o etapa de segmentacin. Al igual que en los
coches, la productividad de un computador va a depender del nmero de instrucciones que acaben
por unidad de tiempo, y no de lo que le cueste a una instruccin individual.
6.2 Segmentacin para DLX.
Si queremos aplicar la tcnica de la segmentacin a la ejecucin de instrucciones, deberemos
dividir la ejecucin de las mismas en una serie de etapas. Por ejemplo, en DLX la ejecucin de una
instruccin se divide en 5 etapas:
IF: Lectura de instruccin.
ID: Decodificacin de Instruccin y lectura de registros.
EXE: Ejecucin de la instruccin.
MEM: Acceso a memoria de datos.
REG: Acceso a banco de registros.
La realizacin de cada etapa de segmentacin es un ciclo mquina. Esta duracin est
determinada por la duracin de la etapa ms lenta. Con frecuencia el ciclo mquina es un ciclo de
reloj (a veces dos), aunque el reloj puede tener mltiples fases.
El objetivo del diseador de computadores es equilibrar correctamente el diseo de cada
segmento para que todos tengan la misma duracin. Si esto es as, entonces la duracin de una
instruccin ser (si no hay atascos):

Tiempo por instruccin en mquina no segmentada
Nmero de etapas de la segmentacin

De forma ideal, el avance en rapidez del procesador por la segmentacin se ve multiplicado
por el nmero de etapas que dispongamos. Pero en la realidad no es exactamente as, las etapas no
suelen estar perfectamente equilibradas y siempre surgen atascos en la ejecucin de las instrucciones
que hacen que no siempre se superponga su ejecucin perfectamente (se suele obtener un 10% menos
de rapidez de la prevista en el caso ideal).
La segmentacin es una tcnica no visible al programador, que consigue una reduccin en
el tiempo de ejecucin medio por instruccin. Esta tcnica que explota el paralelismo entre
instrucciones secuenciales.


Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
La segmentacin es una tcnica de diseo de procesadores que se viene empleando desde la tercera
generacin de computadores. En la figura siguiente podemos ver como se han diseado los
procesadores en cada generacin.



Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
En las dos figuras siguientes se puede observar cmo funciona la segmentacin cuando se ejecutan
varias instrucciones sobre un procesador segmentado. La figura 1 es en el caso ideal, y la figura 2 en
el caso real.


Figura 1. Segmentacin caso ideal.


Figura 2. Segmentacin caso real. Se introducen numerosos retardos en la ejecucin
de las instrucciones.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Ejemplo 1: Sea un procesador segmentado en 5 etapas con una duracin de (50, 50, 60, 50, 50) nseg
de duracin para cada una de las etapas. Es decir, cuando ejecuta una instruccin de forma no
segmentada, tarda 260 nseg en ejecutarla.
Si este mismo procesador lo diseamos de forma segmentada, deberemos aadir 5 nseg. a cada etapa
debido al retardo de los biestables que almacenan la informacin entre etapas.
Ver el esquema siguiente:

La pregunta es, cuando ejecutamos N=10 instrucciones, qu aceleracin y que eficiencia se
consiguen?

86 . 2
910
2600
)) 1 10 ( 5 ( * 65
10 * 260
)) 1 ( ( *
*
n k
n
T
T
n Aceleraci
seg
ins
Segmentado
do NoSegmenta


71 . 0
14
10
)) 1 10 ( 5 (
10
)) 1 ( ( n k
n
Eficiencia


4
65
260
)) 1 ( ( *
*
lim lim
seg
ins
seg
ins
n n
n k
n
n Aceleraci nMaxima Aceleraci


Realizar los clculos de la Aceleracin y la Eficiencia para cuando procesamos N = 4 y N = 32
instrucciones. (Importante: Usar siempre las formulas de este ejemplo).

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Ejemplo 2: En esta figura 6.3 del Tomo 2 de Estructura y diseo de Computadores (Ed. Revert)
Se puede observar cmo se realiza la ejecucin de una instruccin de DLX de forma no segmentada.
Se observa como al ejecutarse de forma segmentada, se necesita definir un nico tiempo de
segmento, por lo cual elegimos el segmento de mayor duracin.


Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Antes de pasar a ver como definimos con detalle las operaciones a realizar en cada uno de los
segmentos de ejecucin segmentada de DLX, debemos recordar cuales son los tres formatos de
instrucciones de que dispone.








Tambin necesitamos recordar la estructura del procesador DLX con ejecucin monociclo, pues en
esta estructura nos basaremos para definir el procesador segmentado.
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010

Ahora, ya estamos preparados para empezar a disear nuestro procesador Segmentado.
Lo primero que haremos ser colocar los registros intermedios que nos permitirn almacenar datos y
seales de control de cada una de las instrucciones que entran en el cauce segmentado.
En la figura siguiente se muestra el esquema inicial del procesador DLX segmentado (ya lo
complicaremos despus).



Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Definicin de Segmentacin para DLX.
Vamos a partir de un repertorio de instrucciones conocido como es el DLX, pero sin operaciones en
coma flotante. La ejecucin de todas sus instrucciones puede descomponerse en 5 pasos bsicos,
cada uno de los cuales tiene un duracin de 1 o ms ciclos de reloj. Veamos por partes cada paso:

1. IF-Paso de bsquea de instruccin: Se pasa el valor del Contador de Programa (PC) al Registro
de Acceso a Memoria (MAR). Se lee de memoria la siguiente instruccin y se carga en el RI.
MAR PC ; IR Mem[MAR

2. ID-Paso de bsqueda del registro/decodificacin de instruccin. Se decodifica la instruccin
leda y se accede a los registros indicados. Se incrementa el PC para que apunte a la siguiente
instruccin.
A Rsl ; B Rs2; PC PC+4
Como la posicin de los registros fuente para DLX siempre es la misma, entonces estos
valores pueden ser ledos a la vez que decodificamos la instruccin en curso.

3. EX-Paso de direccin efectiva /ejecucin. La ALU podr operar con los operandos del paso
anterior para realizar una de estas tres funciones.
i) Referencia a memoria: La ALU suma los operandos para formar la direccin efectiva y se
carga en el MDR.
MAR A+(IR
16
)
16
##IR
16..31
; MDR Rd

ii) Instruccin ALU: La ALU realiza la instruccin especificada por el cdigo de operacin
sobre los registros Rs1 y Rs2 o Rs1 y un valor inmediato.
ALU-salida (A op B) (A op ((IR
16
)
16
##IR
16..31)
)

iii) Salto/bifurcacin: La ALU suma el PC al valor inmediato de signo extendido (de 16 bits
para saltos y 26 para bifurcaciones) y as calcula la direccin de salto.
ALU-salida PC + ((IR
16
)
16
##IR
16..31)
) ; cond (A op 0)

Para saltos condicionales se examina un registro que ha sido ledo en un paso anterior para saber si la
direccin calculada se coloca en el PC.
La arquitectura de carga/almacenamiento de DLX supone que el clculo de una direccin efectiva y
la ejecucin de una instruccin en la ALU se pueden superponer, pues ninguna instruccin aritmtica
necesita calcular una direccin para acceder a un operando.

4. MEM-Paso de completar salto/acceso a memoria: las nicas instrucciones DLX activas en este
paso son las de acceso a memoria y los saltos.
i) Referencia a memoria: Accede a memoria para leer o escribir un dato.
MDR Mem[MAR Mem[MAR MDR
ii) Salto: El valor de PC es sustituido por la direccin de salto.
if (cond) : PC ALU-salida

5. WB-Paso de postescritura (write-back): Escribe resultado en registro, tanto si proviene de
memoria como de la ALU.
Rd ALU-salida MDR
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Como resultado de poder subdividir cada instruccin en 5 segmentos (todos de 1 ciclo de
reloj), podemos leer una instruccin en cada ciclo de reloj. Y as, aunque la ejecucin de cada
instruccin requiera 5 ciclos de reloj, el resultado es que cada ciclo de reloj (si no pasa nada) finaliza
una instruccin diferente. Recordar lo visto en la figura 1:




El resultado ms evidente es que la segmentacin aumenta el nmero de instrucciones emitidas y
finalizadas sobre una CPU por unidad de tiempo, pero sin reducir (antes al revs) la duracin de
ejecucin de una instruccin. Por ello, cara al programador, sus programas se ejecutan ms rpidos.
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Diseo de la Unidad Segmentada.

Camino de datos. Muestra, como ya sabemos de cursos anteriores, como funciona el procesador de
DLX cuando est ejecutando una instruccin por ciclo (es decir, es un repaso de materia ya vista en
primero, en EC I). Es un ejemplo de cmo se propagan los datos a travs del procesador.



Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Ejercicio: Aunque es un repaso de lo visto en cursos anteriores, completar el siguiente esquema.


Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Control para la segmentacin.

La ejecucin de instrucciones en un procesador segmentado requiere que en cada uno de los
segmentos seamos capaces de almacenar toda la informacin de la instruccin que se est ejecutando
en ese segmento.
Por ejemplo, si ejecutamos una instruccin de salto, en el primer segmento leeremos el cdigo de la
instruccin e incrementaremos el PC almacenndolo en un registro NPC. Este valor puede que lo
necesitemos en el ciclo de EXE, y si no se va trasladando de segmento a segmento, ocurrir que al
siguiente ciclo de reloj, al leer una nueva instruccin, borraremos este valor y ya no podr ser
utilizado despus.

Por este y otros motivos similares, en los registros intermedios del procesador segmentado para
DLX, se almacena toda la informacin necesaria de la instruccin que se est ejecutando en ese
segmento, y cuando pasamos al segmento siguiente, esta informacin si se va a utilizar en algn
segmento posterior, se traslada tambin copindose en los registros que hay entre segmentos.
En la figura 6.19 observamos la forma que ha de tener el procesador segmentado para que la
segmentacin funciones correctamente.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010

Observar:
Propagacin del valor del NPC.
Propagacin del cdigo del registro destino hasta ltimo segmento.
Propagacin de resultado de la ALU: ALUOutput.
Como se actualiza el valor del contador de programa, usando una puerta AND.
Lneas de entrada del Banco de Registros.
Lneas de entrada de Memoria de Datos.
Una ALU para datos y otra para direcciones de saltos.







Ahora todo junto. Se muestra tanto el camino de datos como el camino de control para la realizacin
segmentada de instrucciones de DLX. (figura 6.30). Esta transparencia debe ser analizada con
detalle.
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
6.3 Los riesgos de la segmentacin.
Todo lo visto hasta ahora est muy bien, pero no siempre se pueden superponer la ejecucin de las
instrucciones como se ha visto en los ejemplos anteriores. Hay situaciones llamadas riesgos
(hazards) que lo impiden, y que se pueden clasificar en tres clases:
Riesgos estructurales. Producidos por conflictos en la utilizacin del hardware. Impiden que
dos instrucciones se solapen en determinados segmentos.
Riesgos por dependencias de datos. Es cuando los datos que necesita una instruccin para
ejecutarse son inicializados por instrucciones anteriores que aun no han finalizado.
Riesgos de control. Suceden cuando hay un cambio brusco en el valor del PC producido por
una salto u otras instrucciones.
Cuando se detecta un riesgo, puede ser necesario detener la segmentacin (no siempre). Pero
detener el procesador en una mquina no segmentada es fcil, basta terminar la instruccin en curso.
En una mquina segmentada hay varias instrucciones en curso, y por ello un detencin supone, en la
mayora de los casos, que algunas de las instrucciones en curso deben ejecutarse hasta finalizar, otras
se retardan y otras si pueden detenerse en un instante dado.
Por lo general, cuando una instruccin se detiene, las instrucciones anteriores finalizan
normalmente y las posteriores sufren un retardo en su ejecucin. Durante el tiempo de retardo, no se
leen ms instrucciones.
Vamos a pasar a estudiar en este apartado 1.5. los tres tipo de riesgos: estructurales, de dependencia
de datos y los de Control, aunque en el temario estos ltimos riesgos figuren como un apartado
nuevo (el 1.6.).
Riesgos estructurales.
En una mquina segmentada deben de poderse solapar cualquier combinacin de instrucciones. Si no
es as, se dice que la mquina posee riesgos estructurales. Una mquina sin riesgos estructurales
siempre tendr un CPI ms alto que si no los tuviera.
Para evitar estos riesgos en muchos casos tenemos que duplicar recursos. Por ejemplo, si
tenemos un nico puerto de acceso a memoria, si una instruccin en un determinado segmento debe
acceder a memoria para leer o escribir, en ese segmento no se podr leer ninguna instruccin, por lo
cual el inicio de una nueva instruccin se tendr que retrasar un ciclo de reloj. En la figura siguiente
se ilustra este caso, aunque se ve mejor en la transparencia de la hoja siguiente (Fig. 3.6 y 3.7).

Ciclos de Reloj
Instruccin 1 2 3 4 5 6 7 8 9
Carga IF ID EX MEM WB
Instruccin i+1 IF ID EX MEM WB
Instruccin i+2 IF ID EX MEM WB
Instruccin i+3
detencin
IF ID EX MEM WB
Instruccin i+4 IF ID EX MEM

Sin embargo hay mquinas que se disean con riegos estructurales, el motivo es sencillo:
Para reducir el coste en la produccin. Est claro que si un determinado riesgo estructural no se
presenta muy a menudo, puede que no valga la pena evitarlo, y simplemente introducimos un retardo
en el funcionamiento.
En este caso, el riesgo es tan notorio por el elevado nmero de veces que ocurre que vale la pena
realizar el procesador con dos puertos de acceso, uno para lectura de datos y otro para lectura de
instrucciones.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010



Tambin hay que destacar que aparecen dos tipos de riesgos ms:
El riesgo estructural que se introduce al acceder al banco de registros.
El riesgo estructural que se produce cuando tenemos instrucciones cuya ejecucin dura ms
de un ciclo de reloj.

El primero en los riesgos se soluciona realizando un banco de registros de forma que el acceso de
escritura y de lectura se realicen en un mismo ciclo de reloj, pero en flancos distintos. Adems, es
mejor que primero sea la escritura y luego la lectura, pues evitaremos un posible riesgo por
dependencia de datos.



Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010



El segundo riesgo lo analizaremos con ms detalle cuando introduzcamos las instrucciones
multiciclo. Pero ahora vamos a realizar un pequeo estudio, considerando lo que ocurrira si todas las
instrucciones tuviesen un ciclo de reloj en ejecucin salvo las instrucciones de multiplicacin y
divisin que tienen 2 ciclos.



Aqu se plantean varias alternativas que habr que analizar:

Duplicar la unidad de ejecucin de la Mult/Div (Ex-M), o segmentarla.
Separar (si se puede) las dos instrucciones de multiplicar. (Ins-Mult-Ins-Mult). A esto se le
llama planificar el cdigo.

Se pide analizar estas dos opciones y decidir cul es la ms conveniente.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010

Caso 1: Segmentacin Inicial.


Caso 2: Duplicamos unidad aritmtica de Mult/Div. Tenemos una burbuja o ciclo de espera en la
ejecucin de estas 4 instrucciones.



Caso 3: No duplicamos unidad aritmtica pero Si planificamos Cdigo. Seguimos teniendo una
burbuja o ciclo de espera en la ejecucin de estas 4 instrucciones.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Riesgos por dependencia de datos.
Los riesgos por dependencia de datos surgen cuando una instruccin escribe un resultado en un
determinado registro (durante el ltimo segmento) y alguna de las instrucciones siguientes hace uso
del valor de este registro antes de que se produzca dicha escritura.
Se ve mucho mejor con el ejemplo; sea las siguientes dos instrucciones:

ADD R1, R2, R3
SUB R4, R1, R5

La instruccin SUB tiene como registro fuente R1, y la instruccin anterior ADD guarda el
resultado de una suma en este mismo registro. Si ejecutsemos de forma segmentada estas dos
instrucciones tendramos:

Ciclos de Reloj
Instruccin 1 2 3 4 5 6
ADD IF ID EX MEM WB_en_R1
SUB IF ID_leo_R1 EX MEM WB

Si no introdujramos un retardo entre estas dos instrucciones, la instruccin SUB manejara
un valor de R1 no correcto. Esto es inaceptable en un procesador.

Ciclos de Reloj
Instruccin 1 2 3 4 5 6 7 8 9
ADD IF ID EX MEM WB_R1
nop - - - - -
nop - - - - -
SUB IF ID_R1 EX MEM WB

El problema planteado aqu se resuelve con una sencilla tcnica llamada segn autores de la
siguiente forma:

Adelantamiento, forwarding, desvo, bypassing o cortocircuito.

El funcionamiento hardware de esta tcnica es sencillo: las distintas unidades funcionales se
adelantan los datos entre ellas sin necesidad que estos datos estn escritos en el Banco de Registros,
para de aqu se ledos.
En las transparencias de la pgina siguiente (FIGURE 3.9 y FIGURE 3.10) se muestra el
funcionamiento de esta tcnica de formalmente.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010


Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Con ello se consigue que si una instruccin utiliza un registro como fuente y la instruccin
anterior lo tiene como destino de una operacin, entonces la segunda instruccin utilizar como valor
del registro fuente la salida de la ALU. As, aunque el valor no se grabe en el registro conflictivo
hasta 2 ciclos despus, la segunda instruccin ya habr hecho uso de su valor.
Como hemos visto, en la segmentacin de DLX, no solo la instruccin siguiente puede
necesitar un valor de un registro todava no actualizado, tambin las tres siguientes instrucciones
pueden necesitar este valor, que hasta el final del cuarto segmento (el de WB) no estar
correctamente almacenado.
En la figura 3.10 anterior se muestra un ejemplo de cmo una instruccin utiliza como
registro destino R1 y las siguientes 4 instrucciones lo tienen como registro fuente. El resultado
deber ser adelantado para las dos siguientes instrucciones. (Figura 6.7).

La primera instruccin ADD inicializa el valor del registro R1.
Las cuatro instrucciones restantes lo utilizan.
El valor de R1 se desva para ser utilizado por las dos restantes: SUB, AND y OR.
La instruccin OR y la XOR cuando necesitan R1, la instruccin ADD ya a realizado la escritura en
el banco de Registros.
Recordar: tener en cuenta que el segmento ID accede a dos registros del banco de registros, y
a su vez, al solaparse con el segmento WB este debe realizar una escritura sobre otro registro. Esto es
complicado y se resuelve haciendo que las escrituras se realicen durante la primera mitad del ciclo de
reloj y las lecturas durante la segunda mitad.

En la pgina siguiente se muestra como se realizaran los adelantamientos de datos para estas dos
secuencias de instrucciones:

FIGURE 3.11: adelantamiento de ALU a
memoria y de memoria a memoria.
FIGURE 3.12: adelantamiento de memoria a
unidad aritmtica: !!?.
ADD R1, R2, R3
LW R4, 0(R1)
SW 12(R1), R4
LW R1, 0(R2)
SUB R4, R1, R5
AND R6, R1, R7
OR R8, R1, R9

El primer ejemplo de adelantamiento se realiza sin problemas, pero no ocurre lo mismo en el
adelantamiento de memoria a ALU:
Este es el nico caso en que el procesador de DLX necesitar introducir un retraso (o burbuja) para
conseguir que el programa se ejecute correctamente. (Esto mismo lo veremos tambin ms adelante
en los apuntes).

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010





Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Bus de escritura
de resultados
Cada nivel de destino requiere de un cerrojo (biestable D activado por nivel) y un par de
comparadores para examinar si instrucciones adyacentes, comparten un destino y una fuente. En la
figura siguiente se muestra una ALU con esta estructura.


















La ALU con sus unidades de desvo.

Como puede observarse, se necesitan dos buffers para almacenar los resultados de la ALU.
Los resultados de la ALU pueden ser entradas de la propia ALU va la utilizacin de dos
multiplexores, tal como aparece en la figura.
El control de estos multiplexores se puede realizar de dos formas:
Por la propia Unidad de control.
Por una lgica local asociada al desvo.
En cualquiera de los dos casos, se deber examinar si alguna de las dos instrucciones
anteriores escribi en un registro utilizado como fuente en la instruccin actual. En cuyo caso el
multiplexor deber seleccionar es registro de resultado (salida de ALU) apropiado en lugar del bus.
Como la ALU opera en una nica etapa de la segmentacin, no se requiere ningn retardo por
combinacin de cualquier conjunto de instrucciones que operen sobre esta ALU de punto fijo.


Tambin aparecera un riesgo cuando tuvisemos dos instrucciones que pretendieran leer y
escribir sobre una misma posicin de memoria. En nuestro caso, para DLX este riego no existe pues
los accesos a memoria se mantienen siempre en orden; este riego no se puede dar.
Fichero de
Registros
Mux
Mux
ALU
R4
R1
Caminos de
desvio
Buffers de resultados
de la ALU
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010

Los fallos de acceso a cache podran tambin desordenar las referencias a memoria si se
permitiera que el procesador siguiese trabajando con instrucciones posteriores. Pero en DLX, cuando
esto ocurre, detenemos la segmentacin por completo, haciendo que la ejecucin de la instruccin
que causo fallo se prolongue todos los ciclos de reloj que haga falta.
En ocasiones puede ser necesario adelantar el resultado de una unidad funcional a otra unidad
funcional. Por ejemplo, analicemos las siguientes instrucciones:
ADD R1, R2, R3
SW 25(R1), R1
El resultado de la suma almacenado en R1, cuando est a la salida de la ALU ya se puede
utilizar para el clculo de la siguiente instruccin, y a su vez este valor ser adelantado al MDR
(Registro de Datos de Memoria) para que sea almacenado en una direccin de memoria el contenido
del registro R1.


Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Clasificacin:
Pero en cualquier procesador segmentado genrico, los riesgos por dependencia de datos se pueden
clasificar en tres tipos, atendiendo al orden de acceso de lectura y escritura de las instrucciones. Sean
dos instrucciones, primero i y luego j; entonces la clasificacin podra ser esta:

RAW (Read After Write): una instruccin j intenta leer antes de que la instruccin i realice
la escritura. El resultado es que se lee un valor no correcto (ya hemos visto ejemplos antes).
WAR (Write After Read): una instruccin j escribe un valor antes de que la instruccin i lo
lea. Esto en DLX no ocurre, pues las lecturas se realizan antes en ID y las escrituras despus
en WB. Ocurre cuando hay instrucciones que escriben anticipadamente el resultado, como
por ejemplo cuando se autoincrementa un registro en clculo de una direccin.
WAW (Write After Write). Es cuando las dos instrucciones, tanto i como j, realizan una
escritura por ejemplo en un registro; pero la instruccin j lo realiza antes que la i por hacerlo
en segmentos anteriores. Ocurre en segmentaciones que escriben en ms de una etapa.

Como es de imaginar, RAR no supone un riesgo.



Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Observar el detalle de cmo funciona la unidad de deteccin de riesgos: En el ciclo 3 de reloj se est
ejecutando la instruccin SUB R2, R1, R3 que inicializa el registro R2. Cuando esta instruccin
pasa en el ciclo 4 al segmento MEM, entrar en EXE la instruccin ADD R4, R2, R5 que
necesitar recibir de forma adelantada el contenido de R2, pues el valor ledo en el banco de registros
no es el correcto.
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Inevitables:
Pero no todos los riesgos son inevitables. Cuando leemos un dato de memoria y lo cargamos en un
registro, el registro no estar correctamente accesible hasta despus del ciclo de acceso a memoria.
Analicemos por ejemplo la siguiente secuencia de cdigo:

LW R1,32(R6)
ADD R4,R1,R7
SUB R5,R1,R8
AND R6,R1,R7

La primera instruccin LW no posee el dato hasta que finaliza el 4 segmento, en el cual
grabara en R1 el dato ledo.
Y la instruccin siguiente ADD necesita leer R1 durante su 2 periodo (en ID), por lo tanto,
deber introducirse 2 ciclos de espera en la ejecucin segmentada de estas instrucciones.
Adems SUB tambin requerir un ciclo de espera pues no podr leer en ID correctamente el
valor del registro R1. Para la instruccin AND ya no habr problemas.

Ciclos de Reloj
Instruccin 1 2 3 4 5 6 7 8 9
LW R1,32(R6) IF ID EX MEM WB
ADD R4,R1,R7 IF ID EX MEM WB
SUB R5,R1,R8 IF ID EX MEM WB
AND R6,R1,R7 IF ID EX MEM WB
nop IF ID EX MEM WB

Pero podemos acortar el tiempo de detencin si hacemos que la ALU lea directamente desde
el MDR. Es tambin un adelantamiento de los datos, con lo cual el multiplexor de entrada de la ALU
ya no tendr 3 sino 4 entradas a seleccionar. Con ello ya solo ser necesario, para este caso,
introducir un ciclo de espera, como muestra la figura siguiente.

Ciclos de Reloj
Instruccin 1 2 3 4 5 6 7 8 9 10
LW R1,32(R6) IF ID EX MEM WB
ADD R4,R1,R7 IF ID detencin EX MEM WB
SUB R5,R1,R8 IF detencin ID EX MEM WB
AND R6,R1,R7 detencin IF ID EX MEM WB
nop IF ID EX MEM WB

Generalmente, cuando tenemos una instruccin del tipo A = B + C hay una probabilidad bastante
alta de que se produzca una detencin debido a la carga del segundo dato. Sin embargo podemos
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
evitar con facilidad que se produzca un retraso en el almacenamiento del resultado, si adelantamos la
salida de la ALU al registro MDR.

Para comprender mejor lo expuesto, analicemos el cdigo ensamblador que generara la
anterior instruccin de alto nivel:


Ciclos de Reloj
Instruccin 1 2 3 4 5 6 7 8 9
LW R1,B IF ID EX MEM WB
LW R2,C IF ID EX MEM WB
ADD R3,R1,R2 IF ID detencin EX MEM WB
SW A,R3 IF detencin ID EX MEM WB

El valor del MDR es adelantado para ADD. Para SUB y para AND ya se lee bien del banco
de registros en el segmento ID de ambas instrucciones.

Lo que hemos tenido que realizar es una espera en la segmentacin que se conoce como
burbuja (bubble) o detencin de cauce (pipeline stall)
El proceso que permite que una instruccin se desplace desde la etapa de decodificacin de la
instruccin (ID) a la de ejecucin (EX) se le llama
emisin de la instruccin (instruction issue)
y la instruccin sobre la que se ha realizado este proceso se dice que ha sido emitida (issued).
Para la segmentacin de enteros sobre DLX (sin punto flotante) todos los riesgos por
dependencias de datos pueden ser comprobados durante la fase ID. Con ello se consigue reducir la
complejidad del hardware, pues nunca una detencin de una instruccin interferir en el estado de la
mquina, ya que los parmetros caractersticos de la misma solo pueden ser modificados en los
ltimos 3 segmentos.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Para detectar estos riesgos inevitables, necesitamos aadir hardware de deteccin de riesgos en el
segmento ID de nuestro procesador:


De forma que se mirar si la instruccin que est en EXE tiene previsto escribir en memoria, a
continuacin si va a escribir en memoria se analizar en registro destino de la instruccin para luego
compararlo con los dos registros fuente de la instruccin que se est decodificando en ID.
Si se cumple que hay coincidencia con alguno de los dos registros fuente, se introducir una nop
en la ejecucin segmentada, simulando una especie de burbuja como hemos visto antes.




Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Problema: Sea un procesador segmentado en el cual el 20% de las instrucciones son de carga.
Adems, despus de una instruccin de carga, en el 50% de los casos hay una instruccin que accede
al dato cargado. Ello determina que en la ejecucin segmentada de las instrucciones ser necesario
introducir un retardo de 1 ciclo de reloj.
Cuan ms rpido (en este caso ms lento) es el procesador real aqu presentado respecto a uno
ideal (sin retardos y con CPI = 1).

Solucin: Para saber la rapidez deberemos hacer el cociente entre los CPI (Instrucciones Por Ciclo),
es decir:
Rapidez = CPI
real
/ CPI
ideal


El CPI
ideal
es 1.

El CPI
real
lo podemos saber de la siguiente forma:

1) El 20% de las instrucciones son de carga y de ellas el 50% produce retardo, es decir, el 10% de las
instrucciones produce retardo.
2) En plena segmentacin, si de cada 10 instrucciones tengo un retardo, entonces estas 10
instrucciones tardarn 11 ciclos de reloj.

3) El CPI
real
se calcula por cociente entre estas cantidades:

CPI
real
= 11/10=1,1

4) Por lo tanto tenemos:

Rapidez = (CPI
real
/ CPI
ideal
) % = (1,1/1) = 11%

la mquina ideal es un 10% ms rpida.

Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Problema: Realizar un programa que realice la multiplicacin de dos vectores de n datos y almacene
el resultado sobre un tercer vector de datos. Completar el cdigo.

; VECTORES.S
;Datos a partir de esta direccin
.data 0x2000
n: .word 8, 0
datosX: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8,
datosY: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8,
datosZ: .space 64

.text 0x100
...

Una vez realizado el programa, mostrar su ejecucin segmentada de dos formas:
1) Con la opcin forwarding desactivada.
2) Con la opcin forwarding activada.
Para este segundo caso describir como se realizan todos los adelantamiento (entre que unidades
funcionales del procesador).

Solucin:
; VECTORES.S : Z(i) = X(i) * Y(i).

;Datos a partir de esta direccin
.data 0x2000
n: .word 8, 0
datosX: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8
datosY: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8
datosZ: .space 64

.text 0x100
addi R1, R0, 0
lw R8, n

eti: LD F0, datosX(R1)
LD F2, datosY(R1)

ADDD F4, F0, F2
SUBI R8, R8, 1
SD datosZ(R1), F4

ADDI R1, R1, 8
BNEZ R8, eti
trap 0
Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Segmentacin SIN FORWARDING:


Segmentacin CON FORWARDING:



Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Planificamos el cdigo para eliminar completamente los riesgos por dependencias de
datos:







Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010
Planificacin de la emisin de instrucciones.
A nivel hardware ya hemos evitado casi todos los riesgos por dependencia de datos, pero cabe
una solucin software al problema de las detenciones. El compilador puede reorganizar la secuencia
de instrucciones para evitar que se produzcan este tipo de detenciones por dependencias de datos. La
tcnica de compilacin que evita esto se conoce como:
planificacin de la segmentacin o planificacin de instrucciones
Si el software nos evita completamente este riesgo, podramos evitar utilizar el hardware de control
para evitar este tipo de riesgos. La idea es buena, ya que existen mquinas en las cuales, la
responsabilidad de detectar y evitar este tipo de riesgos esta en manos del software completamente.
Pregunta: Pero que ocurra cuando el compilador no poda evitar de ninguna forma este
tipo de riesgos?
Respuesta: No le quedaba ms remedio que utilizar una instruccin tipo NOP despus de
la carga para evitar el problema.

Esta inclusin no influa en el tiempo de ejecucin del programa, pero si en la longitud del
cdigo generado.
De todas formas, tanto si el hardware detecta el interbloqueo y detiene la segmentacin como
si no, el rendimiento mejora si el compilador planifica la ejecucin de las instrucciones.

En la figura (6.13) de la pgina siguiente se observa como mejora el rendimiento de del
procesador si el compilador previamente planifica la ejecucin de las instrucciones.




Porcentaje de las cargas que causan detencin con la segmentacin de DLX.




Ingeniera Informtica. Ampliacin de Estructura de Computadores. Curso 2010-2011
Vicente Arnau Llombart 26/11/2010

Comentarios: . . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . .
. . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . .
. . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . .
. . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . .
. . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . .
. . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . . . .

También podría gustarte