Práctica 8



PRÁCTICA 8: WINDLX (2)

- Por Ángel Manuel Gamaza Domínguez - 


La arquitectura DLX es una arquitectura RISC de carga/almacenamiento bastante sencilla que proporciona un pipelining (Diseño de segmentación) eficiente.

Contiene un amplio número de operaciones de memoria y varios tipos de instrucciones.

Esta octava práctica se centró en el uso del programa “WinDLX”, un simulador que permite, tras introducir un código en ensamblador, mostrar cómo van ejecutándose las distintas instrucciones de éste.


*Captura de WinDLX

A continuación, vamos a ver los ejercicios de la práctica:


El siguiente programa (pract2v1.s) se encarga de multiplicar todos los números de la lista almacenada por el número pi, dejando los resultados almacenados en las mismas posiciones.



Considerar inicialmente las siguientes opciones de configuración:
- Unidad de suma: latencia 2 ciclos
- Unidad de multiplicación: latencia 5 ciclos
- Unidad de división: latencia 19 ciclos
- Unidades funcionales sin segmentar
- Saltos: predicción de no tomar
- Adelantamiento de resultados: desactivado

1. a) Simular el programa y determinar la ganancia de velocidad que se obtiene si se permiten caminos de bypass (opción adelantamiento de resultados activada).

Sin adelantamiento de resultados: 318 ciclos
Con adelantamiento de resultados: 416 ciclos

La ganancia de velocidad de de 98 ciclos.

b) Partiendo de la configuración inicial, considere que se efectúa una mejora en la unidad de multiplicación, reduciendo su retardo a 3 ciclos. Esta mejora supone un incremento del coste del 15%. Determine si, para este programa, compensa realizar dicha mejora desde el punto de vista de la relación coste/prestaciones.

Sin adelantamiento de resultados: 368 ciclos antes y 416 ciclos después de la mejora.
Mejora de 48 ciclos, mejoría del 11,54%.
Relación coste/prestaciones = 15% / 11,54% = 1,3%

Con adelantamiento de resultados: 270 ciclos antes y 318 ciclos después de la mejora.
Mejora de 48 ciclos, mejoría del 15.09%.
Relación coste/prestaciones = 15% / 15,09% = 0,99%

Con lo visto anteriormente, merece la pena realizar la mejora.

c) Considere que la mejora consiste en reducir el retardo de la unidad de multiplicación a 2 ciclos, con un incremento del coste del 18%. ¿Compensa la mejora?

Sin adelantamiento de resultados: 344 ciclos antes y 416 ciclos después de la mejora.
La mejora es de 72 ciclos, mejoría del 17,31%.
Relación coste/prestaciones = 18% / 17,31% = 1,04%

Con adelantamiento de resultados: 246 ciclos antes y 318 ciclos después de la mejora.
La mejora es de 72 ciclos, mejoría del 22,64%.
Relación coste/prestaciones = 18% / 22,64% = 0,795%

Con lo visto, merece la pena realizar la mejora.

d) ¿Tendría interés mejorar la latencia de la unidad de suma?

No, ya que no se realizan sumas, solo podría reducirse una unidad y no merecería la pena.


2. Seleccione la opción “salto retardado” y ejecute el programa. ¿Qué ocurre? ¿Cuál es la causa? ¿Cuál sería la solución?

El número de ciclos se reduce a 25, debido a que se puede acceder a la información antes. 
Una posible solución sería no activar esta opción, para que así se comprueben estos saltos sin pasar a los siguientes.

3. La siguiente figura (pract2v2.s) muestra una versión modificada del código inicial, que se ha transformado aplicando una técnica que recibe el nombre de desenrollado de bucle. Esta técnica consiste en realizar los cálculos de varias iteraciones en una única iteración para reducir así el número de instrucciones de salto que se tienen que ejecutar, con lo que además se evitan riesgos de control.

Determinar la ganancia de velocidad que se obtiene con respecto a la versión inicial del programa.



Sin adelantamiento de resultados: 416 ciclos en la versión anterior y 326 en la versión modificada.
La ganancia de velocidad es 90 ciclos.

Con adelantamiento de resultados: 368 ciclos en la versión anterior y 246 en la versión modificada.
La ganancia de velocidad es 122 ciclos.

4. Para el programa del apartado anterior, pract2v2.s, determinar la ganancia de velocidad que se obtiene con respecto a un procesador DLX sin segmentar de referencia, que denominaremos DLXssr.
En el procesador DLXssr cada instrucción va pasando por distintas fases que se suceden según sean utilizadas por la correspondiente instrucción, de forma que las instrucciones tendrán distinto tiempo de ejecución según del tipo que sean.
Consideraremos que en DLXssr las fases IF, ID, intEX, MEM y WB tienen un ciclo de reloj cada una. Las fases faddEX, fmultEX y fdivEX tendrán el mismo número de ciclos que en el caso del procesador segmentado.
Para estimar el tiempo de ejecución del programa en DLXssr hay que tener en cuenta el tiempo que tardaría cada una de sus instrucciones. El tiempo de una instrucción se puede determinar a partir del número de etapas por las que pasa. Así, por ejemplo, una instrucción de carga (ld) pasaría por todas las etapas (duración 5 ciclos de reloj) mientras que una instrucción de almacenamiento (sd) no pasaría por WB (duración 4 ciclos de reloj) ya que no tiene que almacenar nada en los registros del procesador. Las instrucciones aritmético-lógicas no pasarían por la etapa MEM. Hay que tener en cuenta que la duración de la etapa EX depende del tipo de instrucción: si la operación es con enteros, se utilizará intEX y la duración será de un ciclo; si es en coma flotante, se utilizará faddEX, fmulEX o fdivEX y la duración será la asignada a la correspondiente unidad.
Para las instrucciones de salto condicional considere una duración de 3 ciclos (en la etapa de ejecución se comprueba la condición y se carga en el PC la nueva dirección, si fuese el caso). Para el trap considere 2 ciclos (hasta la etapa de decodificación).

5. Modificar el programa del apartado 3 (pract2v3.s) de forma que incluya 8 iteraciones en el bucle. Determinar la ganancia de velocidad que se obtiene con respecto a las versiones anteriores.

             .data 0
a:          .double 3.14159265358979

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

xtop:       .double 24
                 .text 256

start:      ld f2,a           
               addi 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    
               subi r1,r1,32     
               bnez r1,loop      
               trap 6            

La ganancia de velocidad es del 2% con respecto a la versión anterior.

6. Partiendo de la versión del apartado 3, reorganizar las instrucciones (pract2v4.s) para reducir el efecto de las dependencias entre ellas. Simular la versión realizada y determinar la ganancia de velocidad obtenida.


             .data 0

a:          .double 3.14159265358979

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

xtop:       .double 24

                .text 256

start:      addi r1,r0,xtop
                ld f2,a

loop:       ld f0,0(r1)
               multd f4,f0,f2
               ld f6,-8(r1)
               sd 0(r1),f4
               multd f8,f6,f2
               ld f10,-16(r1)
               sd -8(r1),f8
               multd f12,f10,f2
               ld f14,-24(r1)
               sd -16(r1),f12
               multd f16,f14,f2
               sd -24(r1),f16
               subi r1,r1,32
               bnez r1,loop
               trap 6

La ganancia de velocidad es del 17% frente a la versión anterior.


Desde mi punto de vista, fue una práctica bastante compleja, ya que WinDLX, es un programa un poco complicado de usar y me resultó un poco difícil entenderlo. Por lo demás, creo que la práctica presentaba unos enunciados claros y concisos, y WinDLX traía un manual muy completo para su aprendizaje.


Como comentario de mejora, diría que el programa que se pide realizar y ejecutar viniera adjunto con los archivos de WinDLX, ya que facilitaría bastante el trabajo.

No hay comentarios:

Publicar un comentario