You are on page 1of 41

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 1

ARQUITECTURA DE COMPUTADORAS

CAPITULO VI

ARQUITECTURAS RISC, SUPERESCALARES Y SUPERENCAUZADAS

AO 2012

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 2

VI.1 - INTRODUCCIN: El trmino RISC, iniciales de Reduced Instruction Set Computers (Computadoras de Reducido Conjunto de Instrucciones), rene una nueva familia de mquinas, diseadas bajo el concepto de que: mientras ms simple sea el hardware, ms rpida ser la ejecucin de un programa. Esta denominacin, RISC, en realidad, no encierra la totalidad de las reformas realizadas sobre las estructuras estndar de las computadoras desarrolladas, en funcin de la posibilidad de seguir complicando el hardware sin tener en cuenta la eficiencia del mismo, que cuanto ms simple es un mecanismo, ms fcil es su mantenimiento. Los equipos desarrollados con concepcin RISC, aplican tres principios fundamentales: - Un conjunto de instrucciones de mquina limitado y simple. - Una gran cantidad de registros de propsitos generales, y/o tcnicas de compilacin que optimizan el uso de los mismos. - nfasis en la optimizacin del cauce de instrucciones. En la siguiente tabla se de una idea de las diferencias entre mquinas CISC (Complex Instruction Set Computers o Computadoras con un Complejo Conjunto de Instrucciones). Vamos a revisar a continuacin algunas de las conclusiones que llevaron al desarrollo es estas mquinas. VI.2 - CARACTERSTICAS DE LA EJECUCIN DE INSTRUCCIONES: La continua disminucin del costo del hardware, y el aumento del costo de software, han hecho que la industria de computadoras desarrolle lenguajes de mquina cada vez ms complejos, capaces de expresar algoritmos completos en forma ms concisa, con el objetivo de facilitar la escritura de programas y por ende el abaratamiento de los mismos. Esto trajo aparejado un problema conocido como "vaco semntico", que consiste en la diferencia entre las operaciones suministradas por los lenguajes de alto nivel y las propias del computador. El resultado es una ineficiencia en la ejecucin de programas, un compilador sumamente complejo, y programas objeto demasiados grandes. Los arquitectos de computadoras disearon mquinas que evitaron este vaco, lo cual llev a mayor cantidad de instrucciones, mayor cantidad de modos de direccionamiento y hasta instrucciones de alto nivel llevadas a cabo en hardware. Si bien as se facilit la escritura de compiladores, y mejor la eficiencia de ejecucin, debieron hacer una gran cantidad de mediciones sobre los programas, para saber como funcionan en la prctica. VI.2.1 - MEDICIONES SOBRE PROGRAMAS.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 3

Una de las principales mediciones, debe ser llevada a cabo sobre el rendimiento, no solo sobre la ejecucin de un dado programa, sino tambin sobre los lenguajes utilizados y sobre una mquina especfica. Hay tres reas sobre las cuales nos interesa obtener informacin: los operandos, las operaciones y la ejecucin. Llamando operando al nmero sobre el cual se realizan las operaciones. De los operandos, esperamos obtener informacin sobre su tipo, tamao, estructura y uso, informacin sta que nos permitir seleccionar el tipo de organizacin de la memoria y de los modos de direccionamiento necesarios para su acceso, lo que significa conocer:

- Si los operandos son constantes o variables. - Si los operandos son enteros, en coma flotante, caracteres o punteros. - Si los operandos son escalares, matrices, listas, o estructuras de datos. - Si los operandos son globales o argumentos de procedimientos locales. - Y finalmente la cantidad, tamao y frecuencia con que son utilizados.
En cuanto a las operaciones, nos interesa principalmente saber cual es su ocurrencia, o sea con que frecuencia relativa aparecen en los distintos programas. Un caso particular de estudio son las instrucciones de transferencia de control, de que tipo son, cual es su frecuencia y cual su ubicacin en el programa. Los mtodos ms conocidos para estudiar y analizar programas, estn divididos entre mediciones estticas y dinmicas. Las mediciones estticas se refieren al texto del programa, y pueden indicarnos cuanta memoria se utilizar para almacenar las instrucciones de mquina, y para los objetos asignados estticamente. Las mediciones dinmicas se refieren a la ejecucin del programa, por lo que se tienen en cuenta los cdigos de mquina ms que a los cdigos fuente. Si se desea inferir mediciones dinmicas en el cdigo fuente, se puede hacer una correlacin entre el cdigo de mquina y el cdigo fuente, aunque ella no sea fcil de determinar. Sin embargo, hay mediciones ms interesantes, que son las llevadas a cabo sobre pequeas secciones del cdigo, donde el programa pasa la mayora de su tiempo de ejecucin. La identificacin de estas porciones de cdigo o de lazos crticos, como tambin se las denomina, se realiza analizando cual es el costo de ejecucin para cada porcin del programa. Este costo puede estar formado por el tiempo de ejecucin, cantidad de lneas de cdigo fuente ejecutado y nmero de accesos a memoria. VI.2.2 - MEDICIONES SOBRE LAS INSTRUCCIONES:

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 4

En la tabla siguiente, se resumen los resultados de las mediciones realizadas, las que se enfocaron principalmente en la frecuencia relativa de aparicin de operaciones, en forma de tipos de sentencias para las instrucciones a nivel de fuente, o de cdigos de operacin a nivel de mquina. Estas mediciones se basan en una coleccin de ms de trescientos procedimientos, usados en programas de sistemas operativos y escritos en un lenguaje que soporta la programacin estructurada. Asimismo se analizan programas de clculo numrico escritos en FORTRAN, BASIC, ALGOL y BLISS. Finalmente tambin se analizaron programas de compiladores escritos en C y en Pascal, programas de CAD, de clasificacin y comparacin de archivos. Conclusiones:

- Las operaciones ms simples son las ms ejecutadas. - La importancia relativa que tienen las llamadas y retornos a procedimientos, por el tiempo gastado en ellos. - La importancia de las estructuras de control (Comparaciones y Saltos), debido a la frecuencia con que aparecen las sentencias If y Loop.
Para el caso de programas escritos en lenguajes funcionales, tales como el LISP, el porcentaje de instrucciones referentes a la ULA, saltos condicionales y accesos a memoria, no difiere sustancialmente de aquellos escritos en Pascal, siendo la nica diferencia notable un mayor uso de instrucciones de salto por parte de aquellos. Con respecto al uso de registros, nos interesa conocer cuantos son utilizados eficientemente y cual es su necesidad, se introduce el concepto de vida de un registro, haciendo referencia al perodo de tiempo que va desde que el mismo es cargado, hasta que se produce el ltimo uso del registro antes de la prxima carga. VI.2.3 - MEDICIONES SOBRE LOS OPERANDOS: Posiblemente este sea el menos estudiado de los temas, sin embargo, hay un anlisis de la frecuencia dinmica de la ocurrencia de clases de variables en programas escritos en C y Pascal. Los q ue llevan a la conclusiones siguientes:

- La mayora de las referencias son efectuadas a variables escalares. - Ms del 80% de los escalares son locales.
Debemos recordar que las referencias a matrices requieren previamente una referencia a su ndice o puntero, que es usado como un escalar local. Es decir que se utilizan preferentemente los escalares, y que estos son en su mayora locales. Los estudios sugieren la importancia de una arquitectura que permita el acceso rpido a los operandos, debido a la gran cantidad de veces que son utilizados.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 5

VI.2.4 - MODOS DE DIRECCIONAMIENTO: Estos merecen una mencin aparte. La necesidad de referenciar una gran cantidad de posiciones de memoria, aunada a la limitada capacidad de direccionamiento de una instruccin, lleva a emplear una gran variedad de tcnicas. Todas ellas involucran alguna solucin de compromiso entre el rango de direcciones y/o la flexibilidad de direccionamiento con respecto a la cantidad de referencias a la memoria y/o a la complejidad del clculo de la direccin. En sesudos estudios, se ha determinado, que a pesar de la existencia de muchos modos de direccionamiento, los ms utilizados son solo unos pocos, que son los ms sencillos. VI.2.5 - CONCLUSIONES: Si bien durante el desarrollo se han indicado algunas consecuencias de estos estudios, podemos volver a resumir las conclusiones en la siguiente forma:

1 - No es cierto que un conjunto de instrucciones lo ms cercano posible a un lenguaje de alto nivel, permita que los desarrollos sean ms rpidos y eficientes. Los lenguajes de alto nivel son soportados ms eficientemente, optimizando el rendimiento de las caractersticas que consumen ms tiempo. 2 - La cantidad de accesos a memoria puede ser disminuido si se utiliza una mayor cantidad de referencias a registros. Esto adems es ayudado por cuanto la mayora de las variables resultan ser escalares y localmente referenciadas. 3 - La alta proporcin de saltos condicionales y de instrucciones de llamada a subrutinas, sugiere que se debe prestar especial atencin al diseo de sistemas encauzados de instrucciones.
VI.3 - ENCAUZAMIENTO DE INSTRUCCIONES: El encauzamiento es una forma de obtener paralelismo en sistemas de un solo procesador o monoprocesadores, o sea que permite la realizacin simultnea y concurrente de operaciones de alguna unidad de la mquina. En este caso tomaremos solamente lo referente a las instrucciones y a su secuenciamiento. Recordemos que para resolver una instruccin, debamos cumplir con un ciclo de instruccin o de mquina, el cual en principio consta de dos fases o sub-ciclos, uno de bsqueda y otro de ejecucin. En forma simple, se podra graficar como en la figura VI.1.a. Si suponemos que dentro de la unidad de control, la unidad de instrucciones emite la seal para que se busque en memoria el/los operando/s, y una vez hecho esto

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 6

espera la respuesta en forma de seal, que le indica que el/los operando/s han sido trasladados a los registros indicados. Una vez ocurrida esta espera, puede ahora pasar a la parte ejecucin de la instruccin, la cual termina, casi seguramente, con el traslado de un resultado desde la UPC, para lo cual nuevamente se debera hacer un acceso a memoria o, por lo menos a un registro. Es obvio entonces, que hay una serie de estados de espera en dicha resolucin, los que estn indicados, tambin en forma sencilla, en la figura VI.1.b. Recordemos tambin que todo esto es realizado mediante micro rdenes, que se encargan de cada paso cumplido.
Instruccin Bsqueda Instruccin Ejecucin Resultado

a) Vista simplificada. Espera Instruccin Nueva direccin Instruccin Espera

Bsqueda

Ejecucin

Resultado

Descarte b) Vista completa.

Figura VI.1 - Diagrama de un ciclo de instruccin. Dado que el tiempo de ejecucin siempre es mayor que el tiempo de bsqueda, por lo que, y dado que las operaciones se desarrollan en unidades diferentes, es posible tratar de superponerlas, o sea que mientras se realiza la bsqueda de la nueva instruccin, se ejecute la instruccin actual, por lo cual podemos hacer un cauce con dos etapas independientes, una de bsqueda y otra de ejecucin, lo cual es muy parecido a lo indicado en la figura VI.1. Por otra parte, recordemos como es el proceso completo:

1 Bsqueda de la instruccin. (BI) 2 - Decodificacin de la instruccin. (DI) 3 - Calculo de las direcciones de los operandos. (DO) 4 - Bsqueda de los operandos. (BO) 5 - Ejecucin de la instruccin. (EI) 6 - Almacenamiento el resultado. (AR)

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 7

Vemos en esta descomposicin, que existe la posibilidad de construir un cauce de instrucciones de seis etapas, en cada una de las cuales se lleva a cabo uno de los pasos, en la figura VI.2, tenemos un esquema de tiempos-operaciones, que nos indican los varios pasos realizados. AR EI BO DO DI BI TIEMPO I1 I2 I3 I4 I5 I6 6 I2 I3 I4 I5 I6 I7 7 I3 I4 I5 I6 I7 I8 8 I4 I5 I6 I7 I8 I9 9 I5 I6 I7 I8 I9 I10 10 I6 I7 I8 I9 I10 I11 11 I7 I8 I9 I10 I11 I12 12 I8 I9 I10 I11 I12 I13 13

I1 1

I1 I2 2

I1 I2 I3 3

I1 I2 I3 I4 4

I1 I2 I3 I4 I5 5

Figura VI.2 - Diagrama de realizacin de un cauce. Como vemos en la figura VI.2, hay dos partes importantes, la primera es denominada llenado del cauce, que transcurre desde que se comienza con la primera instruccin, hasta que la misma culmina con el almacenamiento del resultado, luego en cada unidad de tiempo, se tiene un resultado, o sea el almacenamiento del resultado. AR EI BO DO DI BI TIEMPO I1 I2 I3 I4 I5 I6 6 I2 I3 I4 I5 I6 I7 7 I3 I4 I5 I6 I7 I8 8 I15 I16 I17 I19 I19 I20 14

I1 1

I1 I2 2

I1 I2 I3 3

I1 I2 I3 I4 4

I1 I2 I3 I4 I5 5

I15
9

I15 I16 10

I15 I16 I17 11

I15 I16 I17 I18 12

I15 I16 I17 I18 I19 13

Figura VI.3 - Efecto de un salto condicionado. Cuando se debe cambiar la secuencia de instrucciones, por ejemplo en un salto condicionado, hay una prdida en la secuencia del cauce. Por ejemplo, supongamos que la Iinstruccin 3 es un salto condicionado a la instruccin I5. Dado que no hemos previsto la secuencia, la Unidad de Control seguir cargando las instrucciones que siguen, hasta que el salto indicado en la 3, corta la secuencia. En este momento se pasa a la bsqueda de la instruccin I5, y se sigue de all en adelante. Esto es lo indicado en la figura VI.3 Como vemos se produce una interrupcin en el flujo de resultados, y se debe esperar que el cauce se llene para proseguir con la misma. En la figura VI.4, se indica la forma para tener en cuenta los saltos y las interrupciones en un sistema encauzado.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 8

BI

DI

DO

SI

salto incondic. ? NO

BO

EI

Actualizar CP

AR

Vaciar Cauce

SI

salto o interrup. ?

NO

Figura VI.4 - Cauce de instrucciones de seis etapas. VI.3.1 - PROCESADO DE LAS BIFURCACIONES. Evidentemente, en un sistema encauzado, las bifurcaciones provocan demoras que a veces se pueden tratar de reducir, para ello, hay bsicamente cinco procedimientos:

1 - Cauces mltiples. 2 - Prebsqueda de blancos. 3 - Buffer de lazo. 4 - Prediccin de bifurcaciones. 5 - Bifurcaciones demoradas.
VI.3.1.1 - CAUCES MLTIPLES:

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 9

Un canal sufre penalizaciones en tiempo, dado que en un momento dado hay una instruccin en la cual se debe hacer la eleccin entre dos instrucciones, la siguiente o alguna otra ubicada en otro lugar del programa. Un remedio "de fuerza bruta" es el de hacer dos canales paralelos, buscar las dos instrucciones que hacen a la bifurcacin, ubicar una en cada canal, y al tomar la eleccin se continua por el adecuado. Algunos de los problemas que se presentan con esta eleccin, son: - Con mltiples cauces, hay mltiples retardos en los accesos a memoria y a los registros. - Antes que se resuelva una bifurcacin, pueden aparecer otras instrucciones similares en el cauce, cada una de ellas necesitara un cauce adicional. A pesar de todo, sta es una estrategia que puede dar buenos resultados. VI.3.1.2 - PREBSQUEDA DEL BLANCO. Cuando se detecta una instruccin de bifurcacin, es posible ubicar inmediatamente el blanco de la misma, o sea la direccin a la cual debe saltar si la condicin se cumple, aparte de la instruccin que sigue a la de bifurcacin. El contenido de esta direccin blanco, es guardado hasta que la instruccin de bifurcacin sea ejecutada, si se debe realizar el salto, ya se tiene ubicado el blanco. VI.3.2.3 - BUFFER DE LAZO: Un buffer de lazo o bucle, es una memoria de muy alta velocidad de acceso, mantenida por la etapa de bsqueda de instruccin del cauce, y contiene las n instrucciones buscadas durante los ltimos n ciclos de instruccin. En caso de tener que realizar un salto, el hardware controla si la instruccin blanco est en el buffer, si as ocurre, se la toma directamente de all. Este sistema trae tres ventajas: 1 - Con el uso de la prebsqueda, el buffer puede contener algunas instrucciones adelantadas con respecto a la que se est ejecutando actualmente, por tanto las mismas sern cargadas en la Unidad de Control sin la demora que implica ir a buscarlas en memoria. 2 - Si ocurre el salto a un blanco ubicado algunas posiciones mas adelante, es muy posible que el mismo se encuentre realmente en el buffer, lo cual es muy usual en instrucciones tipo IF-THEN e IF-THEN-ELSE. 3 - Esta estrategia est bien dispuesta para tratar con lazos (loops), o iteraciones, de aqu el nombre de buffer de lazo. Si este buffer es suficientemente grande, como para contener todas las instrucciones de un loop, luego las mismas no necesitan ser buscadas en memoria, salvo una nica vez, para la primera iteracin. Para las iteraciones siguientes, todas las instrucciones necesarias estn en el buffer.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 10

Este buffer, en principio es similar al uso de una cach dedicada a las instrucciones, la nica diferencia radica en que ste buffer solo retiene instrucciones en una dada secuencia, y es de mucho menor tamao. En la figura VI.5, se indica el funcionamiento de ste concepto.
Direccin de Bifurcacin

BUFFER DE LAZO (256 Bytes)

Instruccin a ser decodificada en caso de impacto

Bits ms significativos de la direccin, usados para determinar un impacto.

Figura VI.5 - Esquema del buffer de lazo. VI.3.2.4 - PREDICCIN DE BIFURCACIONES. Existen varias tcnicas para producir esta prediccin, las ms aplicadas son:

- Prediccin de nunca ocurre. - Prediccin de siempre ocurre. - Prediccin por Cdigo Operativo. - Llave ocurre/no ocurre. - Tabla histrica de las bifurcaciones.
Las primeras tres aproximaciones son estticas, y no dependen de la historia de la ejecucin hasta el momento en que aparece la instruccin de salto condicional. Las ltimas dos son dinmicas, y por tanto dependen de la historia de la ejecucin. Las primeras dos son muy simples, solo suponen que la bifurcacin nunca ocurre, por lo que no se busca la direccin del nuevo blanco, o que siempre ocurre, por tanto siempre se busca la direccin de la instruccin blanco. Los estudios realizados indican que las bifurcaciones condicionales toman ms del 50% del tiempo total, por tanto el costo de la prebsqueda por ambos caminos es casi igual, alguna veces la prebsqueda por la condicin afirmativa es la que da la mejor performance, pero en mquinas con memoria paginada, se pueden tener algunos errores si lo buscado est en diferentes pginas, por lo que a veces se prev un mecanismo para evitar la precarga en estos casos.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 11

Las estrategias dinmicas, tienden a mejorar la precisin de la prediccin, guardando la historia de las instrucciones de salto condicionado de un programa. Por ejemplo, se asocian uno a ms bits a cada instruccin de este tipo, los cuales son referidos a una llave ocurre/no ocurre, que indica al procesador que decisin particular debe tomar con la prxima instruccin de salto que sea encontrada. Tpicamente estos bits de historia, no se encuentran formando la instruccin en memoria, sino que se agregan en un almacn adicional de alta velocidad. Es normal la utilizacin de dos bits, con lo que podemos almacenar los resultados de las dos ltimas instrucciones de salto. En la figura VI.6 se tiene un diagrama de estados para la realizacin de ste tipo de prediccin, con las posibilidades dadas por dos bits de record histrico. Si las ltimas dos bifurcaciones han tomado el mismo camino, lo probable es que la tercera tambin lo tome. Si la prediccin es incorrecta, se quedar en el mismo estado hasta que aparezca otra tambin incorrecta, en la prxima seleccin se elegir el otro camino. Esto hace que para cambiar la prediccin, deban ocurrir dos equivocaciones consecutivas. El uso de bits para almacenar los sucesos histricos, tiene sus defectos, pues cuando se decide efectuar el salto, la instruccin blanco no puede ser buscada hasta que la direccin de la misma, que es un operando de la instruccin de bifurcacin, sea decodificada.
No Si Prediccin Si Si Prediccin Si

Si

No

No Prediccin No Si Prediccin No No

Si: bifurcacin positiva No: bifurcacin negativa.

Figura VI.6 - Diagrama de estados del sistema de prediccin por historia. Es posible tener una eficiencia mayor, si la bsqueda de la instruccin puede ser iniciada tan rpido como se tome la decisin de saltar. Para esto, debe almacenarse mayor cantidad de informacin, es all donde entra la tabla histrica de las bifurcaciones, la cual es una pequea cach, relacionada

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 12

con la fase de bsqueda de instrucciones del cauce. Cada entrada a la tabla consta de tres elementos: la direccin de la instruccin de salto, una cierta cantidad de bits referentes a la historia de las bifurcaciones y la informacin referente a la instruccin blanco. En la figura VI.7, se muestra una comparacin entre la estrategia tomada en primer lugar, la correspondiente al nunca ocurre, y el uso de la tabla histrica de bifurcaciones. En ste esquema, la etapa de bsqueda de instrucciones siempre busca la prxima direccin secuencial, si se produce una bifurcacin, la lgica detecta esta situacin e instruye al buscador para que la prxima instruccin sea obtenida mediante la direccin del blanco, adems de seguir con el flujo en el cauce. La tabla histrica de bifurcaciones, es tratada como una cach, cada pre bsqueda dispara una bsqueda anticipada en la tabla, si no hay acierto en la comparacin, la prxima direccin secuencial es utilizada para la bsqueda. En cambio si hay acierto, la prediccin se realiza en base al estado de la instruccin: y se busca ya sea en la prxima direccin secuencial o en la direccin del blanco. Cuando se ejecuta una instruccin de bifurcacin, la etapa de ejecucin marca el resultado en la tabla histrica de bifurcaciones y se actualiza el estado de la instruccin con el dato que refleja que la prediccin realizada es correcta o incorrecta. Si la prediccin es incorrecta, la lgica de seleccin es orientada a la direccin correcta por la prxima bsqueda. Cuando se encuentra una instruccin de bifurcacin condicional no est en la tabla, se la agrega y una de las entradas existentes se descarta una de las entradas existentes, utilizando los mismos procedimientos que en caso de los reemplazos en las cach. VI.3.2.5 - BIFURCACIN DEMORADA. Es posible mejorar la performance del cauce, redistribuyendo automticamente las instrucciones de un programa, en forma tal que las correspondientes a bifurcaciones ocurran posteriormente a lo inicialmente propuesto. VI.4 - UTILIZACIN DE UNA GRAN CANTIDAD DE REGISTROS. Tal como se indic antes, a fin de acelerar las operaciones, es conveniente reducir los tiempos necesarios para la obtencin de los operandos, a tal fin, es conveniente tenerlos almacenados lo ms cerca posible de la ULA, para lo cual pude disponerse una cierta cantidad de registros de propsitos generales.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 13

Selector

Prxima direccin en la secuencia Manejo de bifurcaciones

Memoria

a) Estrategia con prediccin de nunca ocurre. Prxima direccin secuencial IPFAR Direcc. Instr. de Bifurcac. Direccin Blanco Estado
Selector

Memoria

Anticipar

Sumar nueva entrada

Actualizar estado Redirigir

Lgica THB E

THB = Tabla Histrica de Bifurcaciones IPFAR = Comparador para bsqueda de direccin bifurcacin. b) Estrategia de la tabla histrica de bifurcaciones.

Figura VI.7 - Tratando con las bifurcaciones. Uno de los problemas a resolver al aumentar la cantidad de registros, es como aplicarlos y como direccionarlos. Recordemos que en un programa se hace referencia a dos tipos de variables, las globales y las locales, o dicho de otra forma, a las variables que son utilizadas en distintos procedimientos del programa, y las que son aplicadas en un procedimiento solamente. Cada vez que se pasa de uno a otro procedimiento, se deben salvar en la memoria las variables locales, y cargar las correspondientes al nuevo procedimiento, mientras se mantienen las globales. Evidentemente este acceso doble a memoria, tiende a provocar demoras.

.......

.......

.......

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 14

Por otra parte, si se incrementa la cantidad de registros, el inconveniente es tener capacidad suficiente en la instruccin para direccionarlos. Existe una solucin de compromiso, en la cual se tiene una gran cantidad de registros, pero solo se direccionan unos pocos por vez. VI.4.1 - VENTANA DE REGISTROS. Analizando un poco ms en profundidad, a las variables globales, generalmente se las conoce como parmetros, dado que son los parmetros del problema. Cuando se pasa de un procedimiento a otro, normalmente se le debe entregar parte de los operandos previamente calculados, ms los parmetros, para hacerlo, es posible utilizar un sistema de registros, direccionados dentro de una ventana, y en la cual se superpongan los correspondientes a tres propsitos. En la figura VI.8 se indica cual sera la disposicin. Segn nos muestra la figura, cada vez que se llama a un procedimiento, se pasa del nivel de registros J al de registros J+1, y se solapan el conjunto de los registros temporales de J con los de parmetros del J+1. Cuando hay un retorno, ocurre todo a la inversa, los correspondientes a parmetros se superponen a los temporales. Todo ocurre como si hubiese una ventana que permite ver los registros de un nivel, ms algunos de otro nivel.

Figura VI.8 - Registros solapados. Para verlo mejor, podemos considerar una organizacin de registros en forma circular, donde hay una ventana que permite ver los que contienen los operandos locales, ms una cierta cantidad compartida entre dos niveles. Ello se indica en la figura VI.9, que esquematiza un buffer circular de seis ventanas, donde vemos que los registros bajos de una de ellas se superponen con los altos de la siguiente, siendo el resto los locales. El Puntero de Ventana Corriente (PVC) indica la ventana correspondiente al procedimiento en ejecucin. Las referencias a los registros por las instrucciones de mquina son desplazados por ste puntero a fin de determinar el registro fsico. El Puntero de Ventana Guardada (PVG), apunta a la ventana recientemente guardada en la memoria. Si el procedimiento D llama a un procedimiento E, los argumentos para E se ubican en el registro temporal de D (que es la parte solapada entre w3 y w2) y el PVC se adelanta una ventana.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 15

Si el procedimiento E ahora efecta un llamado al procedimiento F, ello no puede llevarse a cabo con el presente estado del buffer, debido a que la ventana F se solapa con la ventana A. Si F comienza a cargar sus registros temporarios, preparndose para la llamada, deber sobrescribir los registros de parmetros de A (A.In). Entonces cuando PVC sea incrementado (mdulo 6) se hace igual a PVG y hay una interrupcin, guardndose la ventana A. Solo las primeras dos porciones de A (A.In y A.Loc) necesitan ser almacenadas. Y entonces, el PVG es incrementado y el llamado al procedimiento F contina. Una interrupcin similar ocurre en los retornos. Por ejemplo, luego de la activacin de F, cuando B retorna a A, el PVC es decrementado y vuelve a ser igual a PVG, lo que provoca la interrupcin para restaurar la ventana A.

Figura VI.9 - Organizacin circular de registros de ventanas solapadas. Para tener otra forma de ver la distribucin y el funcionamiento del sistema de registros, en la figura VI.10 se los ha dispuesto en forma lineal. VI.4.2 - VARIABLES GLOBALES:

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 16

El esquema circular, provee una eficiente organizacin para las variables locales, pero no tiene en cuenta las variables globales, las cuales deben quedar en memoria, haciendo ineficiente al sistema. Una variante es la indicada en la figura VI.10, en la cual se incorpora un conjunto de registros separados en la CPU, para las variables globales. VI.4.3 - COMPARACION ENTRE GRAN CANTIDAD DE REGISTROS Y MEMORIA CACH. Los registros, organizados en el sistema de ventanas, se comportan casi como una cach, la cuestin es ahora saber cual de los dos mtodos es ms conveniente.

Figura VI.10 - Organizacin lineal de registros de ventanas solapadas. Para ello observemos la tabla siguiente, donde se indican las caractersticas de las dos aproximaciones. GRAN CONJUNTO"DE REGISTROS CACH

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 17

TODAS LAS VARIABLES SON ESCALARES LOCALES VARIABLES INDIVIDUALES VARIABLES GLOBALES ASIGNADAS POR EL COMPILADOR ALMACENAR/RESTAURAR BASADO EN LA PROFUNDIDAD DE ANIDADO DADA POR EL PROCEDIMIENTO DIRECCIONAMIENTO DE REGISTROS

VARIABLES ESCALARES LOCALES RECIENTEMENTE UTILIZADAS BLOQUES DE MEMORIA VARIABLES GLOBALES RECIENTEMENTE UTILIZADAS ALMACENAR/RESTAURAR BASADO EN EL ALGORITMO DE REEMPLAZO DIRECCIONAMIENTO DE MEMORIA

El sistema de registros contiene todas las variables escalares locales del procedimiento en curso (salvo el raro caso donde la cantidad de variables de un procedimiento es superior a la capacidad de la ventana), y las recientes N-1 activaciones de procedimientos. La cach soporta una seleccin de variables escalares recientemente utilizadas. El sistema de registros puede ahorrar tiempo, por retener todas las variables escalares locales. La cach puede hacer un uso mucho ms eficiente del espacio, dado que acta dinmicamente ante una situacin. An ms all, las cach generalmente tratan en forma discriminada las referencias a memoria, incluyendo instrucciones y otros tipos de datos, por lo que es posible almacenar otros tipos de operandos, lo que no ocurre con los registros. Un registro puede hacer un uso muy ineficiente del espacio, desde que no todos los procedimientos pueden necesitar el contenido completo de la ventana. Por el otro lado, la cach tiene otro tipo de ineficiencia, los datos son ledos en bloques, y es posible que muchos de los datos contenidos en l no sean necesarios. La cach puede manejar tanto variables locales como globales, y aunque hay una gran cantidad de escalares globales, solo unos pocos de ellos son utilizados. En consecuencia una cach deber reconocer dinmicamente estos valores (los utilizados) y contenerlos. Si el conjunto de registros de ventana circular es suplementado con ms registros, tambin puede contener variables globales, pero se hace difcil para un compilador determinar cuales de ellas son las ms usadas. En el conjunto de registros, el movimiento de datos entre ellos y la memoria es determinado por la profundidad de anidado de los procedimientos, dado que esta profundidad vara dentro de mrgenes apretados, el uso de la memoria es muy infrecuente. Muchas de las cach son asociativas por conjuntos y con conjuntos de pequeo tamao, lo que hace peligrosa la posibilidad de que otros datos o instrucciones se sobrescriban sobre las variables ms utilizadas. De cualquier manera, la discusin entre uso de cach o conjunto de registros, no tiene un corte neto, dado que hay caractersticas de cada que se acomodan mejor a la resolucin de ciertos problemas. VI.5 - OPTIMIZACIN DEL USO DE REGISTROS.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 18

En aquellos casos donde la cantidad de registros no es suficiente, es necesario aplicar algn mtodo para que ellos alojen las distintas variables en forma tal que estn todo el tiempo ocupados. En el desarrollo de un cierto procedimiento, la utilizacin de registros puede ser como la indicada en la figura VI.11, donde tenemos siete registros y un conjunto de instrucciones que los utiliza, demarcando cuales son estos espacios de uso.

Figura VI.11 - Diagrama de uso de las variables.

Figura VI.12 - Distribucin optimizada de las variables. El hecho de realizar una rutina, por parte del compilador, de identificacin de variables y de su uso, permite distribuirlas mejor en los registros. As si originalmente se usan siete registros, la optimizacin, en este caso, permite economizar tres. Esto no significa tener registros ociosos, sino que son ocupados con otras variables.

VI.6 - ARQUITECTURAS RISC. En general las caractersticas comunes de los desarrollos RISC son: - Operaciones de ciclo nico.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 19

- Diseo Carga/almacenamiento y Registro a Registro. - Unidad de control cableada - Reducida cantidad de instrucciones y de modos de direccionamiento. - Formato fijo de instrucciones - Encauzamiento, tanto para instrucciones como para algunas operaciones. - Maximizacin del uso de registros. VI.6.1 - OPERACIONES DE CICLO NICO. Segn plantearon los primeros investigadores del tema, las instrucciones del RISC deberan ser tan rpida y no ms complicadas que las microinstrucciones de las mquinas con unidad de control microprogramada. Ejecutar una instruccin compleja que necesita de varios ciclos para su ejecucin, requiere la combinacin de cierta lgica y microcdigo. Implementarla significar una ejecucin ms rpida que si la misma fuese llevada a cabo mediante una secuencia de instrucciones primitivas. Ejemplo de tales instrucciones son la multiplicacin y la divisin en coma fija, y las operaciones en coma flotante. La implementacin de una instruccin compleja se justificar siempre que el costo extra asociado se equilibre con la frecuencia de uso de las mismas, por otra parte tambin es importante que esta implementacin no disminuya la velocidad de ejecucin de las instrucciones primitivas. La mayora de los estudios sobre la frecuencia con que aparecen determinadas instrucciones, mostraron un alto uso de instrucciones primitivas tales como: LOAD, STORE, BRANCH, COMPARE, ADD. Si la presencia de un conjunto de instrucciones ms complicado, significa agregar un nivel extra de compuertas, a un ciclo bsico de mquina de 10 niveles, la velocidad de la UCP sufrir una degradacin del 10%. La frecuencia de uso y la mejora en el rendimiento de funciones complejas, debe primero superar esta degradacin del 10% y luego superar el costo adicional. Si esta presencia de funciones complejas resulta en una CPU que excede los lmites del chip o de la plaqueta, la degradacin en rendimiento suele ser peor an.

VI.6.2 - DISEO LOAD/STORE, REGISTRO A REGISTRO. La mayora de las instrucciones de las mquinas RISC son para realizar operaciones entre registros, estando permitidas solo las de LOAD y STORE para accesos a memoria.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 20

Esto permite, por un lado, simplificar el conjunto de instrucciones, y por tanto la lgica de control. Por otro lado, las arquitecturas RISC al incentivar el uso de registros, permiten que los operandos que son accedidos frecuentemente, permanezcan en reas de fcil y rpido acceso. VI.6.3 - INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO: Los sistemas RISC se caracterizan justamente por tener un conjunto de instrucciones reducido y compuesto por aquellas de mayor frecuencia relativa. La pionera en el tema, es la Universidad de Berkeley, en California, USA, que incluye en sus diseos conocidos como RISC I y RISC II, 31 y 39 instrucciones, respectivamente, mientras que una mquina CISC, tal como la VAX 11 incorpora ms de 300 instrucciones, con cuatro de ellas para evaluar polinomios. Al tener pocas instrucciones, se simplifica notablemente la lgica de control, con lo cual se aumenta la velocidad de decodificacin. Con respecto a los modos de direccionamiento, el sistema RISC usa los ms simples, y los ms complejos, de ser necesario, son sintetizados por software. VI.6.4 - FORMATO FIJO DE INSTRUCCIONES. Otra de las caractersticas comunes de los sistemas RISC, es la de tener un formato fijo de instrucciones, lo que ayuda a simplificar la implementacin, permitiendo una decodificacin ms fcil y rpida. Se puede asignar a cada campo de la instruccin una funcin particular, adecuada para un controlador por hardware, evitndose los microcdigos, ganando as en velocidad. Desde los primeros diseos RISC, la longitud de palabra y por ende la de instruccin es de 32 bits, permitiendo un direccionamiento real de 4 Gigabytes de memoria. VI.6.5 - ENCAUZAMIENTO. El encauzamiento es una forma de mejorar el rendimiento de un computador, por lo que es una tcnica empleada en mayor o menor medida en todas las implementaciones RISC. El primer uso del cauce se realiza en la unidad de control, tal cual vimos anteriormente, pero segn veremos en captulos posteriores, el encauzamiento puede llevar a la unidad lgica y aritmtica, especficamente a las operaciones aritmticas que se realizan en base a iteraciones.

VI.7 - CONTROVERSIA RISC-CISC. Durante muchos aos, la tendencia ha sido la construir sistemas ms complejos, ayudados por el abaratamiento de los costos del hardware, esto significa hacer mquinas con mas cantidad de instrucciones diferentes, mayor cantidad de modos de direccionamiento, ms registros especializados, y as andando.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 21

El movimiento RISC representa una ruptura fundamental con la filosofa anterior, y lgicamente, la aparicin de las mquinas RISC y la publicacin de artculos sobre sus bondades, a veces exagerando, ha provocado una reaccin de los sostenedores de la llamada "corriente principal de la arquitectura de computadoras". Los trabajos que han resaltado los mritos del sistema RISC pueden ser agrupados en dos categoras: - Cuantitativos: Intentos para comparar tamaos y velocidad de ejecucin de programas similares en mquinas RISC y CISC de tecnologa comparable. - Cualitativos: Que examinan elementos tales como el soporte de lenguajes de alto nivel y uso ptimo de integrados VLSI. Muchos trabajos cuantitativos han llegado a la conclusin que los sistemas RISC tienen un comportamiento superior a los CISC, sin embargo, los que han analizado cualitativamente el comportamiento, no llegar a definiciones tan drsticas, sino que aparecen como poco convencidos de estas bondades. Hay varios problemas en la realizacin de estas comparaciones: - No hay mquinas RISC y CISC perfectamente comparables en tems tales como: Costos durante la vida til, nivel de tecnologa, complejidad de la lgica, sofisticacin del compilador, soporte del sistema operativo, y asi siguiendo. - No hay sistemas definitivos de prueba de programas, y la performance es variable en funcin del programa. - Es difcil extraer los efectos del hardware de los efectos del compilador. - Muchos de los anlisis del RISC han sido hechos sobre mquinas experimentales, en vez que sobre productos comerciales, y an ms muchas de las mquinas comercializadas como RISC, en realidad poseen muchas de las caractersticas del CISC, lo que dificulta an ms la comparacin. Sin embargo, esta controversia ha ido decayendo, por cuanto ambas tcnicas han ido convergiendo, en forma tal que los equipos CISC se parecen cada vez ms los RISC y viceversa los RISC se parecen cada vez ms a los CISC, por cuanto cada uno ha adoptado en mayor o menor medida las caractersticas del otro.

VI.8 - CARACTERSTICAS DE ALGUNOS EQUIPOS RISC. En la tabla adjunta se indican las principales caractersticas de algunos equipos construidos bajo la tecnologa RISC.

PROCESADOR AMD29000

A 1

B 4

C 1

D no

E no

F 1

G no

H 1

I 8

J 3

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 22

MIPS R2000 SPARC MC88000 HP PA IBM RT/PC IBM RS6000 Intel i860 IBM 3090 Intel 80486 NSC 32016 MC 68040 VAX CLIPPER Intel 80960

1 1 1 1 2 1 1 4 12 21 11 56 4 2

4 4 4 4 4 4 4 8 12 21 22 56 8 8

1 2 3 10 1 4 4 2b 15 23 44 22 9 9

no no no no no no no nob nob si si si no no

no no no no no no no si si si si si no no

1 1 1 1 1 1 1 2 2 2 2 6 1 1

no no no no no si no si si si si si 0 si

1 1 1 1 1 1 1 4 4 4 8 24 2 -

5 5 5 5 4 5 5 4 3 3 4 4 4 5

4 4 4 4 3 5 4 2 3 3 3 0 3 3

El RISC no es compatible con sta caracterstica. b El CISC no es compatible con sta caracterstica. CLAVES: A = Cantidad de tamaos de instruccin. B = Tamao mximo de la instruccin en bytes. C = Cantidad de modos de direccionamiento. D = Direccionamiento indirecto E = Load/Store con aritmtica combinada. F = Cantidad mxima de operandos tomados de la memoria. G = Permite direccionamiento no alineado. H = Cantidad mnima de usos de la Unidad de Manejo de la Memoria.. I = Cantidad de bits del especificador de registros para enteros. J = Cantidad de bits para el especificador de registros para coma flotante . VI.9 - SISTEMAS SUPERESCALARES. La implementacin superescalar de un procesador es aquella en la cual las instrucciones comunes (operaciones en coma fija o flotante, cargas, almacenamientos, y saltos condicionales) pueden ser iniciadas simultneamente y ejecutadas independientemente. Tales diseos hacen uso de complejos cauces para instrucciones. Los diseos superescalares llegan de la mano de la arquitectura RISC, debido principalmente a que sta facilita la aplicacin de las tcnicas superescalares, sin embargo no necesariamente debe ser as, pues tambin la arquitectura CISC permite su aplicacin. VI.9.1 - CONCEPTOS. El trmino "Superescalar" fue acuado en el ao 1987, y se refiere a una mquina diseada para mejorar la performance de la ejecucin de instrucciones escalares. El nombre se ha puesto para que contraste con la denominacin "vectorial" de los desarrollos de avanzada en ese tiempo. Puede decirse que la aproximacin superescalar representa el prximo paso en la evolucin de los procesadores de propsitos generales y elevadas performances.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 23

Los trabajos realizados sobre procesadores "cuasi-superescalares", indican que es posible obtener algn grado de mejora de la performance. VI.9.1.1 - SUPERESCALARES Y SUPERENCAUZADOS: Una alternativa para obtener las mejores performances, se conoce como "sperencauzado", trmino aparecido en 1988. Estos equipos explotan el hecho de que varias etapas encauzadas, son capaces de realizar tareas que requieren menos de medio ciclo de reloj para su ejecucin. En consecuencia, se emplea una velocidad de reloj doble, permite la realizacin de dos tareas en un ciclo normal de reloj. En la figura VI.13, se tiene una comparacin de ambas tecnologas. La primera parte del diagrama ilustra el funcionamiento de un cauce comn, que es utilizado como base para la comparacin, ste realiza una operacin por cada ciclo de reloj. El cauce es solamente de cuatro etapas a fin de hacer la comparacin con mayor sencillez, estas son: (BI) bsqueda de la instruccin, (DM) decodificacin del mando, (EM) ejecucin del mando y (AR) almacenamiento del resultado. La siguiente parte del diagrama, muestra una implementacin sper encauzada, que es capaz de hacer cumplir dos etapas del cauce en cada pulso de reloj, en forma tal que las funciones llevadas a cabo en cada etapa, pueden desdoblarse en dos partes que no se superponen, y que cada una puede ejecutarse en medio ciclo de reloj. Una implementacin de ste tipo es denominada sperencauzada de segundo grado. Finalmente, la parte inferior del diagrama muestra una implementacin superescalar capaz de ejecutar dos instancias de cada etapa en paralelo. Por supuesto que es posible implementar sistemas superescalares y sper encauzados de mayor grado. Ambas implementaciones analizadas tienen el mismo nmero de instrucciones en ejecucin al mismo tiempo en el estado estacionario. El procesador sper encauzado cae por debajo del superescalar en el comienzo del programa y en cada bifurcacin.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 24

I1 I2 I3 I4 I5 I6

BI

DM BI

EM DM BI

AO EM DM BI AO AO EM DM BI AO EM DM BI

MQUINA BASE

EM DM

AO EM AO

I1 I2 I3 I4 I5 I6

BI AO

DM

EM AO EM

BI DM EM AO BI DM EM BI AO DM

MQUINA SUPERENCAUZADA

BI DM EM AO BI DM EM AO

AHORRO EN TIEMPO

I1 I2 I3 I4 I5 I6 0 9

BI AO BI AO

DM DM BI AO BI AO

EM EM DM DM BI AO BI AO 2 3 EM EM DM DM 4 EM EM 5

MQUINA SUPERESCALAR

AHORRO EN TIEMPO

TIEMPO EN CICLOS BSICOS

Figura VI.13 - Comparacin de las implementaciones superescalar y sper encauzada. VI.9.1.2 - LIMITACIONES: La implementacin superescalar depende de la habilidad para la ejecucin de instrucciones en paralelo. El trmino "paralelismo a nivel de instrucciones" se refiere al grado (promedio) en el cual las instrucciones de un programa pueden ser ejecutadas en paralelo. Para maximizar el paralelismo a nivel de instrucciones, es posible emplear una combinacin de tcnicas de hardware y de optimizacin basada en la compilacin. Antes de pasar al examen de las tcnicas de diseo utilizadas en las mquinas superescalares, para aumentar el paralelismo a nivel de instrucciones, es necesario que veamos cuales son las limitaciones fundamentales del paralelismo contra las cuales debe lidiar, estas son:

- Dependencia real de los datos

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 25

- Dependencia de los procedimientos - Conflictos en los recursos - Dependencia de la salida - Antidependencia


VII.9.1.2.1 - DEPENDENCIA REAL DE LOS DATOS. Consideremos la siguiente secuencia: ADD R1,R2 ; equivale a: R1 <-- R1 + R2 MOVE R3,R1 ; equivale a: R3 <-- R1 En sta caso, la segunda instruccin necesita datos producidos en la primera. Esta situacin es indicada como dependencia real del dato (o dependencia del flujo o dependencia de escritura-lectura). La figura VI.14 ilustra esta dependencia en una mquina de grado 2, o sea una mquina que puede resolver dos instrucciones en un mismo ciclo de reloj. Cuando no hay dependencia, dos instrucciones pueden ser buscadas y ejecutadas en paralelo. Si hay dependencia de los datos entre la primera y la segunda instruccin, entonces la segunda debe ser demorada durante tantos ciclos de reloj como sean requeridos para eliminar la dependencia. Por lo general una gran cantidad de instrucciones deben ser demoradas hasta que se produzcan sus datos de entrada. La dependencia de los datos limita la performance de cualquier tipo de cauce. En uno escalar simple, la secuencia de instrucciones no provoca demoras, sin embargo, consideremos lo siguiente: LOAD R1,EF MOVE R3,R1 ; R1 <-- memory (EF) (direccin efectiva de memoria) ; R3 <-- (R1)

Un procesador RISC tpico necesita dos o ms ciclos para concluir con la carga desde memoria, debido al retardo por el acceso a una memoria fuera del chip, o acceso a la cach. Una manera de compensar este retardo es que el compilador reordene las instrucciones en forma tal que una o ms de las subsiguientes no dependan de la carga desde memoria y pueda comenzar a fluir a travs del canal. Este esquema es menos efectivo en caso de cauce escalar. Las instrucciones independientes ejecutadas durante la carga, pueden ser ejecutadas durante el primer ciclo de la carga, dejado al procesador sin nada que hacer hasta que la carga se complete. VI.9.1.2.2 - DEPENDENCIAS PROCEDURALES. La presencia de bifurcaciones en una secuencia de instrucciones, segn vimos, complica la operacin del cauce. Las instrucciones que siguen a una bifurcacin (cumplida o no), tienen una dependencia procedural con la bifurcacin y no puede ser ejecutada hasta que se ejecute el procedimiento. En la figura VI.14 se muestra el efecto de una bifurcacin sobre un cauce superescalar de grado 2.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 26

Este tipo de dependencia procedural, tambin afecta el cauce escalar, pero las consecuencias en un cauce superescalar son ms graves, dado que se pierde una gran cantidad de oportunidades en cada retardo. Si se utilizan instrucciones de longitud variable, hay otro tipo de dependencia procedural. Debido a que no se conoce a priori la longitud de cada instruccin, puede ocurrir que ella sea decodificada solo parcialmente antes de buscar la prxima instruccin, lo cual hace que no haya bsqueda en paralelo, principal caracterstica de los sistemas superescalares. Esta es una de las razones por las cuales la tecnologa superescalar es ms fcilmente aplicable a estructuras RISC, con instrucciones de longitud fija. VI.9.1.2.3 - CONFLICTO EN LOS RECURSOS. Este conflicto es una competencia entre dos o ms instrucciones para controlar un dado recurso al mismo tiempo. Estos recursos pueden ser la memoria, la/s cach/s, buses, puertos a conjuntos de registros, y a unidades funcionales (por ejemplo la unidad de la suma en la ALU). Desde el punto de vista del cauce, este tipo de conflictos, exhibe un comportamiento similar a la dependencia de los datos. Sin embargo, hay algunas diferencias, por un lado estos conflictos pueden ser evitados aumentando la cantidad de recursos, lo cual no pueden hacerse con la dependencia con los datos. Asimismo, cuando una operacin toma un tiempo muy extenso para ser completada, los conflictos debidos a los recursos pueden ser minimizados encauzando la unidad funcional adecuada. Por ejemplo, todas las unidades funcionales en algunos procesadores estn encauzadas. VI.9.2 - POWER PC. El Power PC es de una arquitectura directamente derivada del IBM 801, que es la primera mquina RISC comercial de la historia, cuyo prototipo se puso en marcha en 1975. An ms el Power PC incorpora un diseo superescalar, y su modelo 601 puede ser considerado como el mximo exponente actual de un sistema superescalar basado en RISC. VI.9.2.1 - POWER PC 601: En la figura VI.15 se tiene un diagrama de bloque de la organizacin del Power PC 601, que tal como otras mquinas superescalares, esta formado por una serie de unidades funcionales independientes, a fin de aumentar las posibilidades de realizar una ejecucin solapada. En particular, el ncleo del 601 consiste de tres unidades de ejecucin encauzadas: la entra, la de coma flotante y el procesamiento de bifurcaciones. Conjuntamente estas tres unidades pueden realizar tres instrucciones en paralelo, correspondiendo entonces a un diseo de grado 3. En la figura VI.16, se tiene un diagrama lgico de la arquitectura del 601, enfatizando el flujo de instrucciones entre unidades funcionales. La unidad de bsqueda puede pre buscar hasta ocho instrucciones al mismo tiempo en la cach. La cach es nica para datos e instrucciones, y su control asociado es responsable de alimentar

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 27

instrucciones a las unidades funcionales y datos a los registros. La lgica de arbitraje enva a la cach las direcciones de mayor prioridad.

I1 I2

BI AO BI AO

DM DM

EM EM

SIN DEPENDENCIA SIN DEPENDENCIA

I1 I2

BI AO BI AO

DM DM

EM EM

DEPENDENCIA DE LOS DATOS I2 UTILIZA UN DATO CALCULADO POR I1

I1 I2 I3 I4 I5 I6

BI AO BI AO

DM DM AO AO

EM EM BI BI

DEPENDENCIA DEL PROCEDIMIENTO I2 SOLICITA UNA BIFURCACIN DM DM BI BI EM EM DM DM EM EM AO AO

I1 I2

BI BI AO

DM DM

EM

AO EM

CONFLICTO DE RECURSOS I1 E I2 UTILIZAN LA MISMA UNIDAD FUNCIONAL

TIEMPO EN CICLOS BSICOS

Figura VI.14 - Efecto de las dependencias.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 28

Figura VI.15 - Diagrama de bloques del Power PC 601. VI.9.2.1.1 - UNIDAD DE DESPACHO: Esta unidad toma las instrucciones de la cach y las dispone en la cola de despacho, la que soporta ocho instrucciones a la vez. Ella procesa esta corriente de instrucciones a fin de tener un flujo estable de las mismas en las unidades de coma fija, de coma flotante y de procesamiento de bifurcaciones. La mitad superior de la cola simplemente acta como buffer, para contener las instrucciones hasta que ellas pasen a la mitad inferior. Su propsito es el de asegurar que la unidad de despacho no tenga tiempos de espera debido a las instrucciones que llegan de la cach. En la otra mitad, la inferior, las instrucciones son despachadas de acuerdo al siguiente esquema:

- Unidad de Procesamiento de Bifurcaciones : Maneja todas las


instrucciones de bifurcacin. La instruccin de este tipo que se encuentra ms abajo de la mitad inferior de la cola de despacho, es entregada a sta unidad si ella puede aceptarla.

- Unidad de coma flotante: Maneja todas las instrucciones de coma flotante.


La instruccin de este tipo que se encuentra ms abajo de la mitad inferior de la cola de despacho, es entregada a sta unidad si el cauce de la misma no est lleno. -

Unidad de punto fijo: o unidad de enteros, maneja todas las instrucciones


enteras, de carga y almacenamiento, y de transferencia entre registros, entre registros y la cach y las instrucciones de comparacin. Una instruccin entera es solamente entregada luego que se ha filtrado al fondo de la cola de despacho.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 29

Permitiendo que las instrucciones de bifurcacin y de coma flotante sean entregadas fuera de orden desde la cola de despacho, ayuda a mantener llenos los cauces en las unidades correspondientes, adems de mover la cola tan rpido como sea posible. La unidad de despacho tambin contiene alguna lgica que le permite calcular las direcciones para la prebsqueda. Ella contina buscando instrucciones en forma secuencial, hasta que se presenta una bifurcacin en la mitad inferior de la cola de despacho. Cuando la unidad de procesamiento de bifurcaciones, procesa una instruccin, ella puede actualizar las direcciones de prebsqueda, en forma tal que las sucesivas instrucciones sean buscadas de las nuevas direcciones y sean alimentadas a la cola de despacho. VI.9.2.1.2 - CAUCES DE INSTRUCCIONES. En la figura VI.17 se muestran los cauces de instrucciones para varias unidades. Hay un ciclo de bsqueda comn para todas las instrucciones, lo que ocurre antes de que una instruccin sea despachada a una unidad. El segundo ciclo comienza con el despacho de una instruccin a una unidad particular. Esto se solapa con otras actividades dentro de la unidad. Durante cada ciclo de reloj, la unidad de despacho considera las ltimas cuatro entradas de la cola de instrucciones, y despacha hasta tres instrucciones.

Figura VI.17 - Cauces del Power PC 601.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 30

Figura VI.16 - Estructura de los cauces del Power PC 601.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 31

Para las instrucciones de bifurcacin, el segundo ciclo incluye su decodificacin y ejecucin, y la prediccin de saltos. Esta ltima actividad es la que pasamos a analizar. La unidad de enteros trata con instrucciones que causan una operacin de carga/almacenamiento con la memoria, un movimiento de registro a registro, o una operacin de ALU. En el caso de carga/almacenamiento, hay un ciclo de generacin de direccin, seguido por la remisin de la direccin resultante a la cach y, si es necesario, un ciclo de almacenamiento. Para otras instrucciones, la cach no est involucrada y hay un ciclo de ejecucin seguido por un almacenamiento en un registro. Las instrucciones de coma flotante siguen un cauce similar, pero hay dos ciclos de ejecucin, reflejando la complejidad de las operaciones de este tipo. El registro de condiciones contiene ocho condiciones independientes de cuatro bits cada una. Esto permite la existencia de varios cdigos, lo que reduce la dependencia entre instrucciones. Por ejemplo, el compilador puede transformar de la secuencia:

compare bifurque compare bifurque . . . compare compare . . . bifurque bifurque . . .

A la secuencia:

Dado que cada unidad funcional puede remitir sus cdigos de condicin a diferentes campos del registro de condiciones, es posible evitar el enclavamiento entre instrucciones que es provocado por compartir cdigos de condicin. La presencia de registros para almacenar y restaurar en el procesador de bifurcaciones, permite el manejo de interrupciones por hard y por soft sin el uso de lgica en las otras unidades funcionales. En consecuencia, los simples servicios del sistema operativo son llevados a cabo rpidamente, sin manipulaciones complicadas de estados o de sincronizacin entre ellas. Debido a que el 601 puede entregar instrucciones de bifurcacin y de coma flotante fuera de orden, se necesita algunos controles para asegurar una correcta

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 32

ejecucin. Cuando existe una dependencia (por ejemplo cuando una instruccin necesita la ejecucin de la previa), el cauce de la unidad correspondiente queda en espera. VI.9.2.1.3 - PROCESAMIENTO DE BIFURCACIONES. La clave de la elevada performance de las mquinas RISC y superescalares, es su habilidad para optimizar el uso de los cauces. Normalmente, el elemento ms crtico del diseo es el manejo de las bifurcaciones. En el Power PC, el procesamiento de bifurcaciones es responsabilidad de la unidad correspondiente, la cual es diseada para que, en muchos casos, las bifurcaciones no tienen efecto sobre la ejecucin en otras unidades funcionales, ste tipo de bifurcaciones son conocidas como "bifurcaciones de ciclo-cero", las que pueden ser obtenidas mediante las siguientes estrategias: 1 - Se provee una lgica para barrer el buffer de la unidad de despacho para las bifurcaciones. Las direcciones para el blanco del salto son generadas cuando una bifurcacin aparece en la mitad baja de la cola, y no hay bifurcaciones anteriores pendientes de ejecucin. 2 - Se hace un intento para determinar el resultado de las bifurcaciones condicionales. Si el cdigo de condicin se ha establecido con suficiente anterioridad, ello puede ser determinado. De cualquier manera, tan rpido como se encuentra una instruccin de bifurcacin, la lgica determina si el salto: a - Puede tener lugar, lo cual es el caso de los incondicionales o de los condicionales cuyo cdigo de condicin es conocido e indica que hay salto. b - Puede no tener lugar, lo cual es el caso de los condicionales cuyo cdigo de condicin es conocido e indica que no hay salto. c - No es posible determinar el resultado con anterioridad. En este caso, la bifurcacin es "adivinada" como positiva para saltos hacia atrs (tpico en los bucles) y como negativa para saltos hacia adelante. Las instrucciones secuenciales posteriores al salto, son entregadas a las unidades de ejecucin en un modo condicional. Una vez que la condicin es producida, la unidad de bifurcacin cancela las instrucciones existentes en el cauce, y procede con el blanco buscado si se debe efectuar el salto, o seala que las instrucciones condicionales deben ser ejecutadas. El compilador puede utilizar un cdigo de un bit en el cdigo de las instrucciones para revertir este comportamiento por omisin. No se incorporan estrategias para predecir las bifurcaciones en base a su historia, por cuanto los diseadores prefieren pagar un pequeo precio en aras de la simplicidad. Como ejemplo del efecto de la prediccin de bifurcaciones, consideremos el programa ilustrado en la figura VI.18, y suponga que el procesador de saltos predice que el mismo resulta negativo (el caso por omisin para saltos hacia adelante).

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 33

La figura VI.19.a, muestra el efecto sobre el cauce cuando el salto no se produce. En el primer ciclo la cola de despacho es cargada con ocho instrucciones, las primeras seis son enteras y son despachadas una por ciclo a la unidad de enteros. La instruccin de salto no puede ser despachada antes de que alcance la parte baja de la cola, lo que ocurre en el ciclo 5. La unidad de bifurcaciones, predice que el salto no ser tomado, y en consecuencia la prxima instruccin de la secuencia es despachada condicionalmente (lo que se indica por D'). El salto no puede ser resuelto hasta que la instruccin de comparacin sea ejecutada en el ciclo 8. En este tiempo, el procesador de bifurcaciones confirma que esta prediccin fue correcta, y la ejecucin contina sin retardo y con el cauce lleno. a) Cdigo de Programa:
IF (A > 0) A = A+B+C+D+E ELSE A = A-B-C-D-E

b)

Cdigo ensamblable:
#DIRECCIN INICIAL

D(1) --> A D(2) --> B D(3) --> C D(4) --> D D(5) --> E LOAD D(1) CMPI D(1),0 SI: ACM >0 ENTONCES:GOTO X SI NO: ADD D(1) ADD D(2) ADD D(3) ADD D(4) ADD D(5) STOR GOTO FIN X: SUB D(1) SUB D(2) SUB D(3) SUB D(4) SUB D(5) STOR FIN END

#CARGA A #COMPARA INMEDIATAMENTE #BIFURCA SI EL RESULTADO ES 0

#ALMACENA RESULTADO #SALTO INCONDICIONAL

Figura VI.18 - Ejemplo de cdigo con salto condicional. La figura VI.19.b, muestra el caso en que la prediccin es incorrecta, y debe efectuarse el salto. En ste caso, las tres instrucciones que comienzan en la fase de bsqueda, deben ser demoradas, y su bsqueda se reinicia con la instruccin que comienza en X, como resultado, la etapa de ejecucin del cauce entero, est en reposo durante los ciclos 7 a 10, resultando en una prdida de cuatro ciclos, debido a la prediccin incorrecta.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 34 ETIQ. PULSO DE R. INSTRUCCIN LOAD R(1) LOAD R(2) LOAD R(3) LOAD R(4) LOAD R(5) CMPI R(1),0 SI ACM > 0 GOTO X SI NO ADD R(1) ADD R(2) ADD R(3) ADD R(4) ADD R(5) STOR GOTO FIN X SUB R(1) SUB R(2) SUB R/3) SUB R(4) SUB R(5) STOR FIN END 1 B 2 D B 3 E D B 4 5 6 7 8 9 10 11 12 13 14 15 16

E D B

E D B

E D B

E D B

E D S B

E D B E D B

E D B

E D B

E D B

E D

a) Prediccin correcta, no se realiza la bifurcacin.


ETIQ. PULSO DE R. INSTRUCCIN LOAD R(1) LOAD R(2) LOAD R(3) LOAD R(4) LOAD R(5) CMPI R(1),0 ACM > 0 GOTO X ADD R(1) ADD R(2) ADD R(3) ADD R(4) ADD R(5) STOR GO TO FIN SUB R(1) SUB R(2) SUB R/3) SUB R(4) SUB R(5) STOR END 1 B 2 D B 3 E D B 4 5 6 7 8 9 10 11 12 13 14 15 16

E D B

E D B

E D B

SI: SI NO

E D B

E D S

D B

E D B

E D B

E D B

E D B

E D

FIN

Claves:

b) Prediccin incorrecta: se realiza la bifurcacin. B = Bsqueda; D = Despacho/Decodificacin; E = Ejecucin; S = Salto Figura VI.19 - Prediccin de Bifurcacin Negativa.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 35

VI.9.3 - POWER PC 620. El Power PC 620 es de una arquitectura de 64 bits. En la figura VI.20 se indica su diagrama de bloques, y tiene como hecho ms notable la inclusin de seis unidades de ejecucin independientes:

- Unidad de Instrucciones - Tres Unidades enteras - Una unidad de carga/almacenamiento - Una unidad de coma flotante
Esta organizacin permite que el procesador despache hasta cuatro instrucciones simultneas, tres a las unidades de coma fija y una a la unidad de coma flotante. El 620 emplea una estrategia para predecir bifurcaciones de alta performance, que implica una lgica de prediccin, un conjunto de registros buffer con posibilidades de redenominacin, y estaciones de reserva dentro de las unidades de ejecucin. Cuando se busca una instruccin, se la asigna a un buffer redenominable que mantiene temporalmente los resultados de la instruccin, tal como registros de almacenamiento. Debido al uso de registros redenominables, es posible que el procesador "ejecute especulativamente" las instrucciones basadas en la prediccin de bifurcaciones. Si la prediccin resulta ser incorrecta, los resultados de las instrucciones especulativas pueden ser eliminados sin daar el contenido de los registros. Si el resultado de la prediccin es confirmado, los resultados temporales pueden ser confirmados. Cada unidad tiene dos o mas estaciones de reserva, las que almacenan instrucciones despachadas que deben esperar por los resultados de otras instrucciones. Esta posibilidad permite sacar estas instrucciones de la unidad de instrucciones, permitiendo que ella contine entregando otras instrucciones a otras unidades. El 620 puede ejecutar especulativamente hasta cuatro instrucciones de salto no resueltas (contra una del 601). La prediccin de bifurcaciones funciona en base al uso de la historia de las mismas, con una tabla de 2048 entradas. VI.9.4 - PENTIUM: Aunque el concepto de diseo superescalar, est asociado a los sistemas RISC, los mismos principios pueden ser aplicados a las mquinas CISC. Posiblemente el ejemplo ms notable de esto, sea el procesador Pentium. Comparado con los ms recientes diseos RISC, tales como el Power PC 620, las caractersticas superescalares del Pentium son bastante simples y directas, resultando en una notable mejora de la performance.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 36

Figura VI.20 - Diagrama de Bloques de Power PC 620. El diagrama de bloques general del Pentium se indica en la figura VI.21, mientras que en la figura VI.22 provee mayores detalles y enfoca la atencin sobre aquellas porciones del procesador que son de inters para el estudio del cauce de instrucciones.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 37

cache de instrucciones 8 Kbites 256

predictor de bifurcaciones

buffers de prebusqueda 32 canal u ula enteros 64 32 32 32 canal V ula enteros

unidad de calculo en coma flotante

bus de interface de 64 bits

registros

multiplicador registros para enteros 32 64 sumador

cache de datos de 8 kbytes

divisor

Figura VI.21 - Diagrama de Bloques del Procesador Pentium. Tal como el 80486, el Pentium utiliza un cauce entero de cinco etapas: - Prebsqueda (PB): el procesador anticipa la bsqueda de instrucciones en la cach de instrucciones. Estas instrucciones son de longitud variable, y so almacenadas en un buffer. - Etapa de decodificacin 1 (D1): El procesador decodifica la instruccin para determinar el cdigo operativo y la informacin de direccionamiento. Esta etapa tambin lleva a cabo dos funciones ms: control de apareamiento y prediccin de bifurcaciones. - Etapa de decodificacin 2 (D2): Esta etapa genera direcciones para referencia a memoria. - Ejecucin (EJ): En esta etapa, el procesador o bien accede a la cach de datos o calcALU los resultados en la ALU, desplazador circALUr, o alguna otra unidad funcional. - Almacenamiento(A): Esta etapa actualiza los registros y banderas con los resultados obtenidos.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 38

Desde el punto de vista del encauzamiento de instrucciones, la diferencia ms significativa entre el Pentium y sus predecesor el 486, es que aquel incluye dos unidades de ejecucin de enteros, denominadas U y V. En la figura VI.23, se tiene una comparacin de los dos. VI.9.4.1 - APAREAMIENTO DE INSTRUCCIONES: Las unidades U y V son capaces de ejecutar instrucciones en paralelo. Sin embargo, el procesador debe determinar la existencias de conflictos potenciales en tal ejecucin paralela. El primer requerimiento para que dos instrucciones puedan ser ejecutadas en paralelo, es que ellas sean "simples". Son instrucciones simples las que son resueltas completamente por la parte cableada de la unidad de control, no requiriendo ningn microcdigo de control, y que se ejecuten en un ciclo de reloj. Las excepciones son las instrucciones de la ALU que hacen referencia a memoria, las cuales requieren dos o tres ciclos de reloj, y hacen uso del hardware de secuenciamiento que les permite ser apareadas. En la tabla siguiente se listan las instrucciones que pueden ser apareadas. MOV MOV MOV MOV MOV alu alu alu alu alu shift shift reg,reg reg,mem reg,imm mem,reg mem,imm reg,reg reg,mem reg,imm mem,reg mem,imm reg,1 mem,1 shift shift INC INC DEC DEC Pusit POP LEA JMP CALL jcc NOP reg,imm mem,imm reg mem reg mem reg reg reg,mem near near near

alu = ADD, ADC, AND, OR, XOR, SUB, SBB, CMP, TEST shift = SAL, SAR, SHL, SHR, RCL, RCR, ROL, ROR (RCL y RCR no apareables con inmediatas) En consecuencia, el Pentium puede alcanzar la denominacin de superescalar de grado 2, y los estudios realizados sobre el rendimiento, muestran que puede operar casi al doble de la velocidad del 80486 con cdigos enteros.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 39

VI.9.4.2 - PREDICCIN DE BIFURCACIONES El Pentium utiliza una estrategia de prediccin de bifurcaciones dinmica, basada en la historia de la ejecucin de bifurcaciones anteriores. La figura VI.24 ilustra el flujo general involucrado. Un registro buffer blanco (BTB - Branch Target Buffer) mantiene informacin sobre las instrucciones de salto recientemente encontradas. Toda vez que se encuentra una instruccin de bifurcacin, dentro del flujo de instrucciones, la BTB es controlada. Si existe una entrada en el BTB, la unidad de instrucciones es guiada por la informacin histrica, para la determinacin de en que sentido se resolver la bifurcacin. Si se predice una bifurcacin positiva, la direccin de salto asociada con esta entrada es utilizada para pre buscar su instruccin blanco. Una vez ejecutada la instruccin, la porcin histrica de la entrada apropiada es actualizada a fin de que refleje el resultado de la instruccin de bifurcacin. Si esta instruccin no est representada en el BTB, luego la direccin de esta instruccin es cargada en una entrada al BTB, y de ser necesario, se elimina la entrada anterior ms antigua. Tal como las instrucciones son pre buscadas, son alimentadas en una de las dos colas de instrucciones. Solo una de estas colas esta activa en un dado instante de tiempo, y las instrucciones son entregadas a y extradas de esa cola. Cuando se predice una bifurcacin positiva, la cola activa es congelada y el pre buscador comienza a buscar la instruccin blanco en la otra cola. Si la prediccin es correcta, el secuenciamiento continua utilizando la cola ahora activa. Si la prediccin es incorrecta, ambos cauces son limpiados, y el procesador tiene un retardo de tres o cuatro ciclos mientras se busca la instruccin blanco correcta. El BTB es organizado como una cach asociativa de cuatro vas, con 256 lneas. Cada entrada utiliza la direccin de la instruccin de salto como una etiqueta. La entrada tambin incluye la direccin de destino de la bifurcacin para la ltima vez que esta bifurcacin ha resultado positiva y un campo histrico de dos bits. Ver Figura VI.25. Los cuatro estados posibles de este campo histricos, reflejan la historia reciente de estas instrucciones. Una nueva entrada es almacenad con un campo histrico igual a 11, y la subsiguiente ejecucin sigue el diagrama de estados de la figura VI.24. El procesador predice que la bifurcacin ser positiva hasta que el valor histrico sea 11.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 40

Figura VI.22 - Estructura del cauce entero del Pentium.

Celeste DInca - Arquitectura de Computadoras - Capitulo 8 - Pgina N 41

Figura VI.23 - Cauces en el 80486 y en el Pentium.

Figura VI.24 - Diagrama de estados del buffer de blancos de bifurcaciones.

Figura VI.25 - Entrada al Buffer de Blancos de Bifurcaciones del Pentium.

You might also like