Sunteți pe pagina 1din 19

GUIN DE PRCTICAS

Ingeniera Informtica Arquitectura e Ingeniera de Computadores

Prctica 1

Estudio de arquitecturas con segmentacin de cauce: DLX

Fecha de entrega: Lunes 14 de noviembre de 2011

Curso 20112012

GUIN DE PRCTICAS
El objetivo de estas prcticas es el estudio experimental de un procesador segmentado para ilustrar la mejora de prestaciones que se puede conseguir con un cauce segmentado, analizando las dificultades y las limitaciones existentes para alcanzar dicha mejora. Para realizar el trabajo experimental correspondiente a esta prctica se utilizar el simulador WinDLX. WinDLX ha sido desarrollado en la Universidad de Viena, y permite simular el procesador segmentado DLX en el sistema Windows de Microsoft. Posee una interfaz bastante amigable y permite analizar los problemas que plantea la ejecucin en el cauce segmentado del procesador de un programa escrito en el lenguaje ensamblador DLX. Para ello, el simulador representa las dependencias que existen entre las instrucciones y ofrece informacin acerca del nmero de ciclos que ha necesitado la ejecucin en el procesador, los ciclos que se han perdido por dependencias (de datos, de control, o estructurales) entre instrucciones, etc. En esta introduccin se describir en primer lugar el procesador segmentado DLX, para pasar a describir a continuacin las caractersticas y opciones del simulador. Finalmente, se proporcionarn algunos ejemplos de su utilizacin. 1.1 El procesador segmentado DLX

El procesador DLX implementa un repertorio de instrucciones de tipo RISC, que presenta caractersticas tpicas de los repertorios de procesadores como MIPS, Power PC, PA (Precision Architecture), y SPARC. Posteriormente se proporcionarn algunos detalles del repertorio DLX. En la Figura 1.1 se muestran las cinco etapas que constituyen el cauce del procesador DLX: IF (Captacin de Instruccin, Instruction Fetch). En cada ciclo de reloj se capta una instruccin de memoria que se introduce en el registro de instruccin (IR). El contador de programa (PC) se incrementa de forma que apunte a la siguiente instruccin. ID (Decodificacin de Instruccin, Instruction Decode). Se decodifica la instruccin almacenada en el registro IR. Tambin se accede en esta etapa al banco de registros para cargar en los registros A y B los operandos que se utilizarn en la etapa de ejecucin EX (que se explica a continuacin). En la etapa ID tambin se procesan los saltos para reducir el costo asociado a los riesgos de control.
EX (Ejecucin, Execution). Se ejecuta la operacin correspondiente en la unidad funcional seleccionada. En la etapa EX existen varias unidades funcionales que pueden necesitar ms de un ciclo de reloj para completar su operacin. Las unidades funcionales incluidas en esta etapa son: intEX (realiza las operaciones de aritmtica entera excepto la multiplicacin y la divisin, y tambin realiza el clculo de las direcciones en el acceso a memoria y los saltos), faddEX (implementa la suma y la resta de nmeros en coma flotante en simple o doble precisin), fmulEX (implementa la multiplicacin de nmeros en coma flotante Curso 20112012 2

GUIN DE PRCTICAS
en simple y doble precisin y de enteros, con y sin signo), fdivEX (implementa la divisin de nmeros en coma flotante en simple y doble precisin y de enteros, con y sin signo). El simulador permite fijar el nmero de unidades funcionales faddEX, fmulEX, y fdivEX y el nmero de ciclos que requieren cada una de ellas, pero nosotros vamos a trabajar con la configuracin por defecto que presenta.

MEM (Acceso a Memoria). Slo las instrucciones de carga (load) o escritura en memoria (store) estn activas en esta etapa, en la que se realiza la lectura de los datos de memoria (en el caso de las cargas) o la escritura de los datos en memoria (en el caso de las escrituras). Las direcciones de memoria utilizadas por las instrucciones se calculan en el ciclo previo (en la unidad de ejecucin para enteros intEX). WB (Escritura de Resultados, Write Back). Los resultados, que provienen de la memoria o de la ALU (etapa EX), se escriben en el banco de registros del procesador. Las operaciones correspondientes a esta etapa se realizan en la primera mitad del ciclo de reloj para que la instruccin que se est ejecutando en la etapa ID pueda leer los mismos datos en la segunda mitad del ciclo de reloj en el caso de que los necesitase. De esta manera se evita tener que incluir un camino de bypass para evitar la penalizacin asociada a una posible dependencia de datos de tipo RAW.

Curso 20112012

GUIN DE PRCTICAS
1.1.1 Procesador sin segmentar de referencia
Para establecer comparaciones con los resultados que se obtendran al ejecutar un programa DLX en un procesador no segmentado, pero que utilizase una tecnologa similar (frecuencias de reloj y ciclos en las unidades funcionales de la ALU, as como etapas EX similares), se definir un procesador que denominaremos procesador DLX sin segmentar de referencia (ssrDLX). En este procesador cada instruccin va pasando por distintas fases que se suceden una tras otra segn sea necesario utilizarlas. As, una instruccin que no accede a memoria no tiene que pasar por la fase de acceso a memoria (MEM). De esta forma las instrucciones tienen distinto tiempo de ejecucin segn sean de un tipo u otro. En el procesador ssrDLX, consideraremos que las distintas fases tienen los siguientes tiempos: IF, intEX, y MEM duran un ciclo de reloj cada una (con esto se est despreciando el retardo asociado a los registros de desacoplo en el procesador segmentado). ID y WB duran un 80% del tiempo de ciclo de reloj. faddEX, fmulEX, y fdivEX duran el mismo nmero de ciclos que en el caso del procesador segmentado. De esta forma, una instruccin de suma de enteros (operandos y resultado en el banco de registros) necesitar 3.6 ciclos en el procesador sin segmentar, ya que pasa por las fases de captacin (IF), decodificacin y lectura de operandos (ID), ejecucin en la unidad de enteros (intEX) y escritura del resultado en el banco de registros (WB). En cambio, en el caso del procesador segmentado necesitar 5 ciclos puesto que tiene que pasar por todas las etapas (IF, ID, intEX, MEM, WB), y todas duran un ciclo en el cauce segmentado. 1.2 El Simulador WinDLX

En esta seccin se indicarn las posibilidades que ofrece el simulador WinDLX y la forma de acceder a las mismas. En general, el simulador WinDLX permite simular (por completo o paso a paso) programas escritos en el ensamblador DLX, visualizando la forma en que las instrucciones se estn ejecutando en las distintas etapas del cauce y las dependencias entre instrucciones. Mediante WinDLX es posible cambiar algunas de las caractersticas de alguna de las etapas del cauce, y tener informacin de prestaciones ya que proporciona el nmero de ciclos que ha tardado la ejecucin del programa, los ciclos que se han perdido por dependencias entre instrucciones (stalls), etc. Al ejecutar el simulador aparece el Men Principal de WinDLX, en la lnea superior de la ventana, y una serie de iconos correspondientes a subventanas minimizadas

Curso 20112012

GUIN DE PRCTICAS
dentro de la propia ventana principal. El Men Principal ofrece las siguientes opciones: File. Permite borrar e inicializar simulaciones (opciones Reset DLX y Reset All), cargar los ficheros con los programas en ensamblador y datos (opcin Load Code or Data) y salir del programa (Quit WINDLX). En WinDLX se pueden cargar varios ficheros con programas en ensamblador, que se sitan en memoria por orden alfabtico. No obstante, el lenguaje ensamblador DLX proporciona una serie de directivas que afectan a la forma de cargar los programas en memoria. Window. Permite abrir y modificar las subventanas, que tambin se pueden abrir haciendo doble clic en los correspondientes iconos de la ventana principal. Execution. Permite controlar la ejecucin de los programas por parte del simulador y mostrar la ventana de E/S de WinDLX donde aparecen los mensajes correspondientes a la simulacin (opcin Display DLX-I/O). Los programas se pueden ejecutar hasta el final (opcin Run), hasta un Breakpoint que se haya insertado (opcin Run to), ciclo a ciclo (opcin Single Cycle), o un nmero de ciclos prefijado (opcin Multiple Cycles). WinDLX permite insertar hasta 20 breakpoints en el cdigo que se ejecuta para poder controlar la ejecucin del programa. Memory. Permite crear hasta 10 ventanas para visualizar el contenido de distintas partes de la memoria (opcin Display), ver y cambiar el contenido de posiciones de memoria (opcin Change) y manipular las etiquetas (opcin Symbols).
Configuration. Permite cambiar ciertas caractersticas del cauce, concretamente: o El nmero de unidades funcionales y sus latencias (opcin Floating Point Stages) o La posibilidad de utilizar caminos de bypass o no (opcin Enable Forwarding) o El tamao de la memoria (opcin Memory Size) o La utilizacin de etiquetas en la visualizacin de la memoria (opcin Symbolic Addresses) o La utilizacin de tiempos absolutos o relativos al ciclo de reloj actual (opcin Absolute Cycle Count) o El almacenamiento de las caractersticas de la configuracin en un fichero con la extensin por defecto .wdc - (opcin Store), o la carga de una configuracin almacenada en un fichero (opcin Load).

Help. Permite acceder a una ayuda en ingls bastante completa del simulador WinDLX con informacin sobre las caractersticas del cauce, el repertorio de instrucciones, etc.

Curso 20112012

GUIN DE PRCTICAS

FIGURA 1.2. VENTANA PRINCIPAL DE WINDLX CON SUBVENTANAS ABIERTAS

En la ventana principal existen una serie de iconos que permiten abrir una serie de subventanas con informacin acerca de diversos aspectos de la simulacin. A continuacin se describen estas subventanas: Ventana de Registros (Register). Permite ver los contenidos de los registros del procesador. Ms adelante se describen los registros que tiene el procesador DLX y su utilidad. Ventana de Cdigo (Code). Permite ver las instrucciones del programa DLX que se ha cargado en memoria. Ms adelante se resume el repertorio de instrucciones de DLX, las directivas del ensamblador, etc. Ventana de Cauce (Pipeline). Visualiza las etapas del cauce con la instruccin que se est ejecutando en cada una (si la ventana se abre con el suficiente tamao). Ventana de Ciclos de Reloj (Clock Cycle Diagram). Permite comprobar lo que se est realizando en cada ciclo y en cada etapa de ejecucin de las instrucciones. Tambin muestra las dependencias entre instrucciones

Curso 20112012

GUIN DE PRCTICAS
mediante flechas; las que ocasionan detenciones (stalls) se indican con flechas rojas, y el resto con flechas verdes. Ventana de Estadsticas (Statistics). Proporciona los datos de la ejecucin del programa: nmero de ciclos, configuracin del cauce con la que se ha hecho la simulacin, ciclos perdidos y las causas de esas detenciones (stalls), saltos, etc. Ventana de Breakpoints (Breakpoints). Permite insertar, borrar, o ver los Breakpoints. 1.3 Ejemplo de programa DLX A continuacin, se muestra y se analiza un programa de ejemplo escrito en ensamblador DLX:
PROGRAMA EJEMPLO (INIC1.S) EN ENSAMBLADOR DE DLX .data 0 .global a a: .double 3.14159265358979 .global x x: .double 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 .double 17,18,19,20,21,22,23 .global xtop xtop: .double 24 .text 256 start:ld f2,a add r1,r0,xtop loop: ld f0,0(r1) multd f4,f0,f2 sd 0(r1),f4 ld f6,-8(r1) multd f8,f6,f2 sd -8(r1),f8 ld f10,-16(r1) multd f12,f10,f2 sd -16(r1),f12 ld f14,-24(r1) multd f16,f14,f2 sd -24(r1),f16 sub r1,r1,#32 bnez r1,loop nop trap #0 ;(1) ;(2) ;(3) ;(4) ;(5) ;(6) ;(7) ;(8) ;(9) ;(10) ;(11) ;(12) ;(13) ;(14) ;(15) ;(16) ;(17) ;(18)

Anlisis del cdigo de inic1 La primitiva .data 0 indica que los datos se almacenarn en memoria a partir de la posicin 0x0. Estos datos consisten en:

Curso 20112012

GUIN DE PRCTICAS
o Un valor de tipo double (64 bits = 8 bytes a partir de la posicin 0x0). Su direccin de memoria se etiqueta como a (al utilizar .global se declara la etiqueta con mbito global). A partir de la posicin a se almacena el nmero pi como un nmero en coma flotante de doble precisin (ocupando 8 bytes). o 23 nmeros de tipo double, de valores 1, 2, 323. Estos valores estn situados justo a continuacin del valor de pi. La etiqueta x hace referencia a la posicin de memoria en la que se encuentran estos valores. La lista de valores ocupa 184 bytes (8*23); si a esto le sumamos los 8 bytes del nmero pi, la zona de datos ocupa, por ahora 192 bytes. o Otro nmero de tipo double, de valor 24. La etiqueta xtop se asocia a la posicin de memoria 192, que es el byte a partir del cual se almacena este valor. Tenemos por tanto 200 bytes de datos. Los 8 primeros bytes estn ocupados por el nmero pi, que empieza en la direccin cuya etiqueta es a. Luego se tiene una lista de 24 nmeros, tambin de 8 bytes cada uno, y en la que la etiqueta x corresponde a la direccin del primer nmero, y la etiqueta xtop a la del ltimo de la lista. Despus est la directiva .text con la direccin 256 (0x100). Por tanto el cdigo del programa se situar en memoria a partir de esa direccin. La instruccin (1) carga el par de registros (f2,f3) con los 8 bytes (ld es una instruccin de carga de un valor de tipo double desde memoria) que estn almacenados a partir de la direccin de memoria cuya etiqueta es a. Por lo tanto en (f2,f3) se almacena el nmero pi. Despus, la instruccin (2), que es una instruccin de suma de registro y dato inmediato, suma la direccin etiquetada como xtop al contenido del registro r0, que siempre es cero. Por lo tanto, el efecto de esta instruccin es cargar en r1 el valor xtop, y con ello hacer que r1 guarde la direccin donde empieza el ltimo nmero de la lista. La instruccin (3) est marcada con la etiqueta loop. A partir de aqu empieza un bucle que se extiende hasta la instruccin (16), la cual comprueba si el valor del registro r1 es igual a 0. Mientras r1 no sea igual a 0 se producir un salto a la etiqueta loop, y se realizar otra iteracin del bucle. Dentro del bucle hay 4 secuencias de tres instrucciones consecutivas ((3)(4)(5); (6)(7)(8); (9)(10)(11); (12)(13)(14)), cada una de las cuales hace lo mismo: o La instruccin (3) carga en (f0,f1) el dato al que apunta r1; la (6) carga en (f6,f7) el dato al que apunta r1-8 (el dato anterior en la lista); la (9) carga en (f10,f11) el dato al que apunta r1-16 (el dato anterior en la lista); y la (12) carga en (f14,f15) el dato al que apunta r1-24 (el dato anterior en la lista). o Despus de cada una de las anteriores, respectivamente, la instruccin (4) multiplica el dato de la lista que ha ledo por el nmero pi, almacenado en (f2,f3) y pone el resultado en (f4,f5), y las instrucciones (7), (10) y (13) hacen lo mismo, pero guardando los resultados en (f8,f9), (f12,f13), y (f16,f17), respectivamente.

Curso 20112012

GUIN DE PRCTICAS
o A continuacin, las instrucciones (8), (11), y (14) almacenan los contenidos de los registros que tienen los resultados obtenidos por sus respectivas predecesoras. Cada resultado se almacena en la posicin de memoria de la que se haba ledo el dato utilizado en la multiplicacin: r1, r1-8, r1-16, y r1-24. Despus la instruccin (15) carga r1 con r1-32 para que en la siguiente iteracin almacene la direccin del nmero anterior al ltimo que se ha multiplicado en la iteracin previa: en cada iteracin se multiplican 4 datos de 8 bytes (4x8=32 bytes). Cuando r1 se haga 0, despus de completar 6 iteraciones (6x4=24 datos), la instruccin (16) no dar lugar a un salto y el programa termina. La instruccin (17) es una instruccin que no hace ninguna operacin (veremos su utilidad posteriormente) y la instruccin (18) es la excepcin que pasa el control al sistema y se utiliza para terminar los programas. Por tanto el programa se encarga de multiplicar todos los nmeros de la lista almacenada por el nmero pi, dejando los resultados almacenados en las mismas posiciones. 1.4 Tcnicas de optimizacin de cdigo 1.4.1 Desenrollado de Bucles Esta tcnica consiste en reducir el nmero de iteraciones de un bucle aumentando el nmero de instrucciones que se realizan en cada iteracin. La mejora en el tiempo de ejecucin que se consigue con esta tcnica se debe a las siguientes razones: Se reduce el nmero de instrucciones de actualizacin del ndice del bucle, de comprobacin de final del bucle, y de salto condicional. En procesadores segmentados, la reduccin de las instrucciones de salto condicional reduce los riesgos de control y evita las posibles penalizaciones que estas instrucciones ocasionan en un procesador segmentado si no se predice bien el resultado del salto. En algunos procesadores siempre que hay una instruccin de salto se pierde un ciclo, ya que siempre se aborta la instruccin que se capta a continuacin de la de salto (debe ser una instruccin que no tenga efecto en el programa: por ejemplo, una instruccin nop). Al aumentar el nmero de instrucciones en cada iteracin del bucle, se facilita la aplicacin de tcnicas de reorganizacin del cdigo para evitar dependencias.
Ejemplo:

// Bucle sin desenrollar for (i=1; i<=N; i++) { A[i] = A[i] + B[i]; }

// Bucle desenrollado for (i=1; i<=N; i+4) { A[i] = A[i] + B[i] A[i+1] = A[i+1] + B[i+1]; A[i+2] = A[i+2] + B[i+2]; A[i+3] = A[i+3] + B[i+3]; }

Curso 20112012

GUIN DE PRCTICAS

1.4.2 Reorganizacin de Cdigo Esta tcnica permite reducir el nmero de ciclos de espera en el cauce (atascos o stalls) debido a dependencias de datos, saltos, o dependencias estructurales. Consiste en cambiar el orden en que las instrucciones aparecen en el cdigo del programa, y por tanto el orden en que se ejecutan en el procesador segmentado, sin afectar a los resultados que proporciona dicho programa. 1.4.3. Segmentacin Software Esta tcnica persigue eliminar las dependencias entre las instrucciones que se ejecutan en las iteraciones de un bucle. Para ello se reorganizan las instrucciones del bucle de forma que las secuencias de instrucciones: carga (i) / operacin (i) / almacenamiento (i) (con dependencias RAW) que existan en una iteracin i, se distribuyen en iteraciones distintas. Por ejemplo, en la iteracin i se producira el almacenamiento, y la operacin y la carga en iteraciones sucesivas: almacenamiento (i) / operacin (i+1) / carga (i+2) El efecto de las dependencias se evita, por tanto, reordenando la situacin de las instrucciones en el cdigo para introducir instrucciones entre las que presenten dependencias. A continuacin se muestra un ejemplo ms explcito de como funcionara la tcnica, a partir del cdigo:
bucle: ld f0,0(r1) addd f4,f0,f2 sd 0(r1),f4 subi r1,r1,#8 bnez r1, bucle

El cdigo reordenado resultante es el siguiente:


ld f0,0(r1) addd f4,f0,f2 ld f0,-8(r1) bucle: sd 0(r1),f4 addd f4,f0,f2 ld f0,-16(r1) subi r1,r1,#8 bnez r1, bucle

Iteracin i Iteracin i+1

Iteracin i+2

Curso 20112012

10

GUIN DE PRCTICAS
Como se puede observar, en la iteracin i del bucle resultante se almacena el valor del registro f4 en la posicin a la que apunta r1; se realiza la suma de los registros f0 y f2 en f4, teniendo en cuenta que en la iteracin anterior (i-1) se haba cargado el registro f0 con el valor correspondiente a dos iteraciones posteriores (es decir: i-1+2= i+1). El valor de r1 se sigue decrementando de 8 en 8 igual que en el cdigo original. Como se puede ver, en el cdigo final no hay riesgos de dependencias de datos de tipo RAW. Obviamente, para que el programa funcione correctamente, hay que aadir las operaciones que quedaran fuera de las iteraciones del bucle, correspondientes a las primeras iteraciones.

Arquitectura del procesador DLX


Conjunto de Registros. DLX tiene una serie de registros que son visibles para el programador y otros registros internos que no lo son. A continuacin se enumeran todos los registros y se explica su uso. Registros visibles a los programas: GPRs (R0..R31): Registros (32) de 32 bits de propsito general. R0=0 siempre. FPRs (F0..F31): Registros de 32 bits para datos en coma flotante de simple precisin. Se pueden utilizar por parejas (par-impar) para almacenar datos de coma flotante en doble precisin: D0 D15 (16 registros de 64 bits) con D0 = (F0-F1), D1=(F2-F3), ... FPSR: Registro de estado para las operaciones en coma flotante. Se utiliza en las comparaciones y en las excepciones de coma flotante. Todos los movimientos a y desde el registro FPSR se realizan a travs de los registros GPRs. PC: Contador de Programa que contiene la direccin de la siguiente instruccin a ser captada (se incremente de 4 en 4 ya que tiene 32 bits = 4 bytes).
Registros internos: IMAR: Registro inicializado con el contenido del contador de programa de la instruccin en la etapa IF. IR: Registro en la etapa IF que se carga con la direccin de la siguiente instruccin a captar. A, B: Registros que se cargan en la etapa ID con los contenidos de los registros que se operan. Estos registros constituyen las entradas a la ALU. En las operaciones con nmeros de doble precisin se utilizan dos registros adicionales llamados AHI y BHI que almacenan los 32 bits ms significativos de los operandos.

Curso 20112012

11

GUIN DE PRCTICAS
BTA: En este registro se escribe la direccin de salto en las instrucciones branch y jump. Esta direccin se calcula en la etapa ID, y si se produce el salto, el contenido de BTA se carga en PC. ALU: Registro de 32 bits donde se cargan los resultados de la ALU. En las operaciones con nmeros de doble precisin se utiliza un registro adicional llamado ALUHI que contiene los 32 bits ms significativos del resultado. DMAR: Registro donde se carga la direccin de memoria para un acceso a la misma para una carga o almacenamiento en la etapa MEM. SDR: Registro que contiene el dato que se va a escribir en memoria en un almacenamiento (store). En las operaciones que implican trabajo con nmeros de doble precisin se utiliza un registro adicional llamado SDRHI para almacenar los 32 bits ms significativos. LDR: Registro donde se almacena el dato leido de memoria en una carga (load). En las operaciones que implican trabajo con nmeros de doble precisin se utiliza un registro adicional llamado LDRHI para almacenar los 32 bits ms significativos.

Ensamblador DLX. A continuacin se describe brevemente la sintaxis de las expresiones en ensamblador para DLX, y se enumeran las directivas junto con su significado. La sintaxis de las expresiones es similar a la de C, debiendo estar el valor de una expresin definido en el rango apropiado para el tipo de expresin: Bytes: -128 .. +255 (8 Bit) Halfwords: -32768 .. +65535 (16-Bit) Words: -2147483648 ..+2147483647 o inferior a 0xffffffff (32-Bit) El ensamblador acepta nmeros en notacin decimal, hexadecimal (los dos primeros caracteres del nmero son 0x), u octal (el primer carcter del nmero es 0). El modo de direccionamiento ms utilizado en DLX es de la forma base+offset. Esto es: cada direccin se indica a partir de una direccin de referencia indicada entre parntesis, a la que se suma un desplazamiento; por ejemplo: la direccin 8(r1) se obtiene sumando 8 al valor almacenado en el registro r1. Los desplazamientos pueden ser negativos o positivos. Tambin se puede indicar un valor nico, sin desplazamiento. La forma ms sencilla de expresar la direccin base y el desplazamiento es utilizando nmeros. No obstante, se pueden utilizar etiquetas para indicar direcciones (estas etiquetas deben estar definidas en el fichero ensamblador que se carga). Los operadores *. /, +, -, <<, >>, &, |, y ^ tienen el mismo significado que en C y las reglas de agrupacin y parntesis son tambin las mismas que en C. Las cadenas de caracteres deben indicarse entre comillas dobles ( ). El programa se carga en a partir de la direccin etiquetada como text (inicialmente es 0x100) y los datos a partir de la posicin etiquetada como data (inicialmente en 0x1000). Cuando el simulador est procesando un fichero, los datos y las instrucciones que va ensamblando se sitan en memoria utilizando un puntero a texto (cdigo) o a

Curso 20112012

12

GUIN DE PRCTICAS
datos. El puntero que se utiliza no depende del tipo de informacin (instrucciones o datos) sino en si la directiva ms reciente en el fichero ha sido .data o .text. A continuacin se describe el conjunto de directivas disponible: .align n Hace que el siguiente dato o la siguiente instruccin se cargue en la siguiente direccin de memoria con los n bits menos significativos iguales a 0 (por ejemplo . align 2 carga los datos X...XXXX00. indicando alineacin a 4 bytes 32 bits -). .ascii string1,.. Almacena en memoria las cadenas indicadas en la lnea como una lista de caracteres. Las cadenas no terminan con un byte igual a 0 .asciiz string1,.. Igual que .ascii excepto que cada cadena termina con un byte igual a 0 .byte byte1,byte2, Almacena los bytes indicados en la directiva secuencialmente en memoria. .data [direccin] Hace que el cdigo o los datos que la siguen se almacenen en el rea de datos: si se indica una direccin, la carga empieza por esa direccin, y si no se indica direccin se utiliza el ltimo valor del puntero de datos. Si posteriormente se quiere almacenar informacin en la parte de cdigo, es preciso utilizar la directiva .text .double nmero1, Almacena en memoria de manera secuencial los nmeros indicados como nmeros en coma flotante de doble precisin. .global etiqueta Da a la etiqueta que se indica mbito global. .space tamao Mueve hacia direcciones superiores el puntero actual utilizado para almacenar (datos o cdigo). El nmero de bytes que se dejan vacos por esta directiva es igual a tamao. .text [direccin] Hace que las siguientes instrucciones o datos se almacenen en el rea de texto (cdigo): si se indica una direccin la carga se produce a partir de ella, y si no se indica se utiliza el ltimo valor del puntero de texto. Si posteriormente se quiere almacenar informacin en la parte de datos, es preciso utilizar la directiva .data .word palabra1, palabra2,... Almacena secuencialmente en memoria las palabras indicadas en la lnea de la directiva Repertorio de Instrucciones. El repertorio de instrucciones DLX corresponde a un modelo de ejecucin registro-registro en el que las operaciones se ejecutan sobre datos en registros y almacenan los resultados en registros. El acceso a memoria se produce slo a travs de instrucciones de carga (load) y almacenamiento (store). A continuacin se proporciona el repertorio de instrucciones con sus correspondientes significados. INSTRUCCIONES DE TRANSFERENCIA DE DATOS LB Rd,Adr Cargar un byte (con extensin para signo) en Rd LBU Rd,Adr Cargar un byte (sin signo) LH Rd,Adr Cargar media palabra (con extensin para signo) LHU Rd,Adr Cargar media palabra (sin signo) LW Rd,Adr Cargar una palabra

Curso 20112012

13

GUIN DE PRCTICAS
LF Fd,Adr Cargar dato en coma flotante y simple precisin LD Dd,Adr Cargar dato en coma flotante y doble precisin SB Adr,Rs Almacenar un byte SH Adr,Rs Almacenar media palabra SW Adr,Rs Almacenar una palabra SF Adr,Fs Almacenar dato en coma flotante y simple precisin SD Adr,Fs Almacenar dato en coma flotante y doble precisin MOVI2FP Fd,Rs Mover 32 bits desde uno de los registros enteros (Rs) a uno de los registros en coma flotante (Fd) MOVFP2I Rd,Fs Mover 32 bits desde un registro de coma flotante (Fs) a un registros entero (Rd) MOVF Fd,Fs Mover desde un registro en coma flotante a otro registro en coma flotante MOVD Dd,Ds Mover desde un dato de doble precisin desde un par de registros a otro par MOVI2S SR,Rs Mover desde un registro a un registro especial (no est implementada en el simulador) MOVS2I Rs,SR Mover desde un registro especial a otro registro GPR (no est implementada en el simulador)

INSTRUCCIONES ARITMTICAS Y LGICAS ADD Rd,Ra,Rb Suma con signo de Ra y Rb; almacena el resultado en Rd ADDI Rd,Ra,Imm Suma de Ra con un dato inmediato (todos los datos inmediatos son de 16 bits). ADDU Rd,Ra,Rb Suma sin signo ADDUI Rd,Ra,Imm Suma sin signo de un registro y un dato inmediato. SUB Rd,Ra,Rb Resta con signo (Ra menos Rb y el resultado se guarda en Rd) SUBI Rd,Ra,Imm Resta con signo de un dato inmediato SUBU Rd,Ra,Rb Resta sin signo de registros SUBUI Rd,Ra,Imm Resta sin signo de un dato inmediato MULT Rd,Ra,Rb Multiplicacin con signo de Ra y Rb con resultado en Rd MULTU Rd,Ra,Rb Multiplicacin sin signo de registros DIV Rd,Ra,Rb Divisin con signo de Ra entre Rb con el resultado en Rd DIVU Rd,Ra,Rb Divisin sin signo AND Rd,Ra,Rb And bit a bit de Ra y Rb con el resultado en Rd ANDI Rd,Ra,Imm And bit a bit con un dato inmediato OR Rd,Ra,Rb Or bit a bit de Ra con Rb y el resultado en Rd ORI Rd,Ra,Imm Or bit a bit con un dato inmediato XOR Rd,Ra,Rb Xor bit a bit de Ra y Rb con el resultado en Rd XORI Rd,Ra,Imm Xor bit a bit con un dato inmediato LHI Rd,Imm Carga de un dato inmediato (16 bits) en la mitad superior (ms significativa) de un registro (32 bits) SLL Rd,Rs,Rc Desplazamiento lgico a la izquierda de un dato en Rs, el nmero de bits indicado en Rc, y con el resultado en Rd

Curso 20112012

14

GUIN DE PRCTICAS
SRL Rd,Rs,Rc Desplazamiento lgico a la derecha SRA Rd,Rs,Rc Desplazamiento aritmtico a la derecha SLLI Rd,Rs,Imm Desplazamiento lgico a la izquierda con el nmero de bits indicado en un dato inmediato SRLI Rd,Rs,Imm Desplazamiento lgico a la derecha con el nmero de bits indicado en un dato inmediato SRAI Rd,Rs,Imm Desplazamiento aritmtico a la derecha con el nmero de bits indicado en un dato inmediato S__ Rd,Ra,Rb Pone Rd a 1 si entre Ra y Rb se cumple la condicin indicada en "__", que puede ser: EQ, NE, LT, GT, LE o GE S__I Rd,Ra,Imm Pone a Rd a 1 si entre Ra y un dato inmediato se cumple la condicin indicada en "__", que puede ser: EQ, NE, LT, GT, LE o GE S__U Rd,Ra,Rb Pone Rd a 1 si entre Ra y Rb (sin signo) se cumple la condicin indicada en "__", que puede ser: EQ, NE, LT, GT, LE o GE S__UI Rd,Ra,Imm Pone a Rd a 1 si entre Ra y un dato inmediato (sin signo) se cumple la condicin indicada en "__", que puede ser: EQ, NE, LT, GT, LE o GE NOP No operar

INSTRUCCIONES DE CONTROL BEQZ Rt,Dest Salta si el registro Rt es igual a cero. El desplazamiento del salto (desde PC) se indica en Dest como un dato de 16 bit. BNEZ Rt,Dest Salta si el registro Rt (del conjunto GPR) no es igual a cero. El desplazamiento del salto (desde PC) se indica en Dest como un dato de 16 bit. BFPT Dest Comprueba si el bit de comparacin en el registro de estado para coma flotante (FPSR) est a 1 y salta en ese caso. El desplazamiento del salto (desde PC) se indica en Dest como un dato de 16 bit. BFPF Dest Comprueba si el bit de comparacin en el registro de estado para coma flotante (FPSR) est a 0 y salta en ese caso. El desplazamiento del salto (desde PC) se indica en Dest como un dato de 16 bit. J Dest Salta a una direccin obtenida sumando a PC un desplazamiento de 26 bits dado en Dest. JR Rx Salta a una direccin de destino dada en Rx JAL Dest Salta a una direccin obtenida sumando a PC el desplazamiento dado en Dest y almacena en R31 el contenido de PC+4. JALR Rx Salta a una direccin contenida en Rx y almacena en R31 el contenido de PC+4. TRAP Imm Transfiere el control al sistema operativo, a una direccin vectorizada proporcionada como dato inmediato (ver la seccin correspondiente a Excepciones - TRAPs -). RFE Dest Retorno al cdigo de usuario (y al modo de usuario) tras una excepcin (no est implementada en el simulador).

Curso 20112012

15

GUIN DE PRCTICAS
INSTRUCCIONES DE COMA FLOTANTE ADDD Dd,Da,Db Suma de nmeros en doble precisin almacenados en los pares de registros Da y Db y almacena el resultado en el par de registros Dd ADDF Fd,Fa,Fb Suma nmeros en simple precisin almacenados en Fa y Fb y almacena el resultado en Fd SUBD Dd,Da,Db Resta nmeros en doble precisin (Da menos Db con el resultado en Dd) SUBF Fd,Fa,Fb Resta nmeros en simple precisin MULTD Dd,Da,Db Multiplica nmeros en doble precisin contenidos en los pares de registros Da y Db y pone el resultado en el par de registros Dd MULTF Fd,Fa,Fb Multiplica nmeros en simple precisin. DIVD Dd,Da,Db Divide nmeros en doble precisin (el par de registros Da entre el par de registros Db y pone el resultado en Db). DIVF Fd,Fa,Fb Divide nmeros en simple precisin CVTF2D Dd,Fs Convierte un nmero de simple precisin (contenido en Fs) a doble precisin (en el par de registros Dd) CVTD2F Fd,Ds Convierte un nmero en doble precisin a simple precisin CVTF2I Fd,Fs Convierte un nmero de simple precisin a entero CVTI2F Fd,Fs Convierte un nmero entero a nmero en simple precisin CVTD2I Fd,Ds Convierte un nmero en doble precisin a nmero entero CVTI2D Dd,Fs Convierte un nmero entero a nmero en doble precisin. __D Da,Db Comparacin de doble precisin, que pone a 1 el bit de comparacin del registro de estado de coma flotante (FPSR) si se verifica la condicin indicada en "__": EQ, NE, LT, GT, LE o GE __F Fa,Fb Comparacin de doble precisin, que pone a 1 el bit de comparacin del registro de estado de coma flotante (FPSR) si no se verifica la condicin indicada en "__": EQ, NE, LT, GT, LE o GE
Excepciones (TRAPs). Trap #0: Fin de Programa Trap #1: Abrir fichero Trap #2: Cerrar fichero Trap #3: Leer un bloque del fichero Trap #4: Escribir un bloque en el fichero Trap #5: Salida formateada a travs de la salida estndar.

Tipos de Instrucciones. Todas las instrucciones del repertorio DLX tienen 32 bits en los que 6 bits corresponden al cdigo de operacin (primario). Atendiendo a las distintas formas de codificacin, las instrucciones se clasifican en tres tipos cuyas estructuras se muestran en la Figura A1.1.1. TIPO I Codifica las siguientes instrucciones: Cargas (loads) y Almacenamientos (stores): Rd <- Mem[Rs+Inmediato] Operaciones con Datos Inmediatos: Rd <- Rs op Immediato

Curso 20112012

16

GUIN DE PRCTICAS
Salto condicional: Rs es el registro usado en la instruccin, Rd no se usa JR (salto con registro) y JALR (salto y enlace con registro): Rd=0, Rs=Rx, Inmediato=0 TIPO R Codifica las siguientes instrucciones: Operaciones con la ALU registro-registro: Rd <- Ra op Rb Instrucciones MOVxxx: Rd <- Ra TIPO J Codifica las instrucciones: J (Salto, Jump) y JAL (Salto y Enlace) TRAP RFE (Retorno de una excepcin)

Curso 20112012

17

GUIN DE PRCTICAS
CUESTIONES A RESOLVER

P rogram a
1) Implementar un programa sencillo que se denominar prbase.s y su funcin consiste en calcular el mnimo de un vector de nmeros doubls. Directrices: Debe de haber un comentario por cada lnea de cdigo Para la ejecucin del programa se fijar un vector de datos propuesto por el alumno, el tamao de dicho vector debe de ser mltiplo de 3 y de 4 a la vez. 2) Calcule el tiempo de ejecucin y nmero de ciclos del programa en un procesador sin segmentar. 3) Calcule el tiempo de ejecucin y el nmero de ciclos en un procesador segmentado y la ganancia obtenida comparndolo con el procesador sin segmentar.

Clculo de ganancias y Optim izacin de Cdigo


4) Genere para la versin del prbase.s una versin del programa aplicando la tcnica de optimizacin de cdigo reordenacin de cdigo que se denominar pr2Reord.s Para dicho programa calcule el nmero de ciclos. Analice los distintos tipos de riesgos a nivel de instruccin. 5) Para el programa denominado pr2Reord.s calcule el tiempo de ejecucin y el nmero de ciclos, as como la ganancia obtenida comparndolo con los programas desarrollados anteriormente (prbase.s sin segmentar - prbase.s). Muestre una grfica con los resultados obtenidos. 6) Genere para la versin del prbase.s dos versiones del programa aplicando la tcnica de optimizacin de cdigo desenrollado de bucles que se denominarn prbucle3.s y prbucle4.s En la primera versin, prbucle3.s, cada vuelta del bucle realizar 3 iteraciones. En la segunda versin, prbucle4.s, cada vuelta del bucle realizar 4 iteraciones. Optativo: Realizar otros tipos de desenrollado de bucles, utilizando otro nmero de iteraciones por vuelta del bucle. Para las distintas versiones calcule el tiempo de ciclo y la ganancia obtenida entre ellos. Analice los distintos tipos de riesgos a nivel de instruccin. 7) Para el mejor programa de los implementados en el ejercicio 6, calcule la ganancia obtenida comparndolo con los programas desarrollados

Curso 20112012

18

GUIN DE PRCTICAS
anteriormente (procesador sin segmentar procesador segmentado optimizacin con reordenamiento). Muestre una grfica con los resultados 8) Busque una versin del programa prbase.s utilizando en combinacin las tcnicas de reordenacin de cdigo y desenrollado de bucles que est ms optimiza. La versin de los distintos programas se denominaran sucesivamente prcomb1.s, prcomb2.s Analice los distintos tipos de riesgos a nivel de instruccin Optativo: Generar una versin utilizando la Segmentacin Software y describir el proceso. 9) Para la mejor versin de los programas implementados en el ejercicio 8, calcule la ganancia obtenida comparndolo con los programas desarrollados anteriormente (procesador sin segmentar procesador segmentado optimizacin con reordenamiento mejor versin de desenrollado). Muestre una grfica con los resultados 10) Elabore una conclusin final de las distintas versiones realizadas y las ganancias obtenidas.

Considere un tiempo de ciclo genrico para el clculo del tiempo de ejecucin de un programa T C

Nota:

CONTENIDO DE LA DOCUMENTACIN A ENTREGAR:


o o Cuestiones resueltas: resultados experimentales obtenidos en la ejecucin de los problemas. Explicacin de la resolucin de cada apartado de la prctica: Comentarios en los que se razonen los resultados obtenidos y se comenten las modificaciones realizadas sobre los distintos programas DLX as como sus efectos. Cdigo fuente impreso.

Curso 20112012

19

S-ar putea să vă placă și