You are on page 1of 35

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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: EXE: MEM: REG: Decodificacin de Instruccin y lectura de registros. Ejecucin de la instruccin. Acceso a memoria de datos. 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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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?
Aceleracin TNoSegmenta do TSegmentado *n (n 1)) seg * ( k
ins

260 *10 65 * (5 (10 1))

2600 910

2.86

Eficiencia

(k

n (n 1))

10 (5 (10 1))
lim n

10 14
ins

0.71

AceleracinMaxima

lim n

Aceleracin

*n (n 1)) seg * ( k

ins seg

260 65

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).

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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).

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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+(IR16)16##IR16..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 ((IR16)16##IR16..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 + ((IR16)16##IR16..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

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

Ejercicio: Aunque es un repaso de lo visto en cursos anteriores, completar el siguiente esquema.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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 3 EX ID IF de 4 MEM EX ID Reloj 5 WB MEM EX detencin IF

Instruccin Carga Instruccin i+1 Instruccin i+2 Instruccin i+3 Instruccin i+4

1 IF

2 ID IF

WB MEM WB ID EX IF ID

MEM WB 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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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 SUB R1, R2, R3 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 3 4 EX ID_leo_R1 MEM EX

Instruccin ADD SUB

1 IF

2 ID IF

WB_en_R1 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 2 ID de 3 EX Reloj 4 MEM IF

Instruccin ADD nop nop SUB

1 IF

WB_R1 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.

Vicente Arnau Llombart

26/11/2010

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

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 memoria y de memoria a memoria. ADD R1, R2, R3 LW R4, 0(R1) SW 12(R1), R4 a FIGURE 3.12: adelantamiento de memoria a unidad aritmtica: !!?. 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).

Vicente Arnau Llombart

26/11/2010

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

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.

Fichero de Registros

Mux

Mux

Caminos de desvio ALU Bus de escritura de resultados R4 R1 Buffers de resultados de la ALU

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.
Vicente Arnau Llombart 26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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 ADD SUB AND R1,32(R6) R4,R1,R7 R5,R1,R8 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 3 4 EX ID IF MEM EX ID IF Reloj 5 6 WB MEM WB EX ID IF MEM WB EX ID MEM WB EX MEM WB

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

1 IF

2 ID IF

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 Instruccin LW R1,32(R6) ADD R4,R1,R7 SUB R5,R1,R8 AND R6,R1,R7 nop 1 2 3 EX ID IF 4 MEM Reloj 5 WB MEM EX ID IF WB MEM EX ID WB MEM WB EX MEM WB 6 7 8 9 10

IF ID IF

detencin EX detencin ID detencin IF

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

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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:

Instruccin LW R1,B LW R2,C ADD R3,R1,R2 SW A,R3

1 IF

2 ID IF

Ciclos de 3 4 EX ID IF MEM EX ID IF

Reloj 5 WB MEM

WB MEM WB EX MEM WB

detencin EX detencin ID

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.

Vicente Arnau Llombart

26/11/2010

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

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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 = CPIreal / CPIideal El CPIideal es 1. El CPIreal 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 CPIreal se calcula por cociente entre estas cantidades: CPIreal = 11/10=1,1 4) Por lo tanto tenemos: Rapidez = (CPIreal / CPIideal ) % = (1,1/1) = 11% la mquina ideal es un 10% ms rpida.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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 .word 8, 0 .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, .space 64 .text 0x100 ...

n: datosX: datosY: datosZ:

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 datosX: .double datosY: .double datosZ: .space .text addi lw 8, 0 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 64 0x100 R1, R0, 0 R8, n

eti:

LD LD ADDD SUBI SD ADDI BNEZ trap

F0, datosX(R1) F2, datosY(R1) F4, F0, F2 R8, R8, 1 datosZ(R1), F4 R1, R1, 8 R8, eti 0

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

Segmentacin SIN FORWARDING:

Segmentacin CON FORWARDING:

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

Planificamos el cdigo para eliminar completamente los riesgos por dependencias de datos:

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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.

Vicente Arnau Llombart

26/11/2010

Ingeniera Informtica.

Ampliacin de Estructura de Computadores. Curso 2010-2011

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

Vicente Arnau Llombart

26/11/2010

You might also like