martes, 8 de enero de 2013

PRÁCTICA 7 - WinDLXV vol. I


En esta práctica haremos uso del programa WinDLXV, que simula la segmentación dentro de un PC.

Desarrollo de la práctica:

En el apartado de Arquitectura del programa,  modifico la latencia y desactivo las casillas de segmentación de las unidades funcionales señaladas en la práctica. Además, en la pestaña de configuración, desactivo la función de adelantamiento de resultados.

Con estos pasos, ya hemos cambiado las condiciones de partida y ya estamos listos para realizar los ejemplos de la práctica.

Ejemplo 1 : Dependencias de datos tipo RAW

Este tipo de dependencia provoca la creación de burbujas que detienen el flujo de instrucciones tantos ciclos como sea necesario a la espera del dato que necesite la instrucción.

En la pestaña de Herramientas, le damos a Editar y escribimos el programa de este ejemplo:

;*********** WINDLXV *************
;*********** Ejemplo 1 *************
;-----------------------------------------------------------------------------
; Ejemplo para ilustrar dependencias de datos tipo RAW 
;-----------------------------------------------------------------------------
                 .text
main:
                 add           r1,r2,r3         ;almacena un nuevo valor en r1
                 sub           r4,r1,r5          ;usa r1
                 and          r6,r1,r7          ;usa r1
                 or             r8,r1,r9          ;usa r1
                 xor           r10,r1,r11      ;usa r1
                 nop
                 nop
                 nop
                 nop
                add         r1,r2,r3          ;almacena un nuevo valor en r1
                sub         r4,r1,r5          ;usa r1 y almacena un nuevo valor en r4
                and         r6,r4,r7          ;usa r4 y almacena un nuevo valor en r6
                or            r8,r6,r9          ;usa r6 y almacena un nuevo valor en r8
                xor          r10,r8,r11      ;usa r8 y almacena un nuevo valor en r10
Finish:    trap        6

La latencia de emisión son los ciclos que hay entre una instrucción y la siguiente. En este caso, hay 2 ciclos entre una operación aritmético-lógica y la siguiente.

Fijándonos en la ventana de estadísticas aparecen los resultados pedidos:

a) Número total de ciclos de ejecución: 29 ciclos
    Ciclos de reloj por instrucción (CPI): 1933 ciclos

b) En 10 ciclos se han producido detenciones al decodificar las instrucciones (fase ID).

c) Al activar el adelantamiento de resultado se producen los siguiente resultados:
    Número total de ciclos en ejecución: 19 ciclos
    Ciclos de reloj por instrucción (CPI): 1.267 ciclos
    No se producen detenciones
    El aumento de rendimiento se nota en la disminución de ciclos en ejecución y de reloj

Ejemplo 2 : dependencia de datos tipo RAW

Cargo el programa del ejemplo 2:

;*********** WINDLXV*************
;*********** Ejemplo 2 *************
;-----------------------------------------------------------------------------
; Ejemplo para ilustrar dependencias de datos tipo RAW
;-----------------------------------------------------------------------------
              .text
main:
              add         r1,r2,r3
              lw           r4, 0(r1)                    ;carga en r4 usando r1
              sub         r5,r4,r3                     ;usa r4
              sw          14(r2),r5                   ;almacena r5 usando r2
              nop
              nop
              nop 
              nop
              lw           r1, 2(r2)
              sub         r4,r1,r5
              and        r6,r1,r5
              or           r8,r1,r5
Finish:    trap       6
                                                                          
En las ventanas de “Registros” y “Datos” modifico los valores de los registros y de las posiciones de memoria pedidas.

R1: 0x1f
R4: 0x5
R5: 0x1a
R6: 0x1a
R8: 0x1f
Posición de memoria del contenido de R5: 0x1010

En este caso, la latencia de emisión de las instrucciones aritmético-lógicas es de 1 ciclo, mientras que en las instrucciones de carga es de 3 ciclos.

a) Número total de ciclos de ejecución: 25 ciclos
     Ciclos por instrucción (CPI): 1.923 ciclos

b) En 8 ciclos se han producido detenciones al decodificar las instrucciones (fase ID)

c) Con adelantamiento de resultado:
           Número total de ciclos de ejecución: 19 ciclos
           Ciclos por instrucción (CPI):  1.462 ciclos
           En 2 ciclos se han producido detenciones al ejecutar las instrucciones (fase EX)

      d) Con adelantamiento de resultados, la latencia de emisión para las instrucciones aritmético-lógicas es de 1 ciclo, mientras que para las instrucciones de carga es de 2 ciclos.

Ejemplo 3 : Dependencias de tipo estructural

;*********** WINDLXV *************
;*********** Ejemplo 3 *************
;-----------------------------------------------------------------------------
; Ejemplo para ilustrar dependencias de tipo estructural
;-----------------------------------------------------------------------------
              .text
main:
              addf          f1,f2,f3
              multf        f2,f4,f5
              addf          f3,f3,f4
              multf        f6,f6,f6
              addf          f1,f3,f5
              addf          f2,f3,f4
Finish:     trap          
              
 a) Número total de ciclos de ejecución: 18 ciclos
     Ciclos por instrucción (CPI): 3 ciclos

b) No hay detenciones

c) Con unidades funcionales de punto flotante segmentadas:
15 ciclos de ejecución
2.5 ciclos de reloj por instrucción (CPI)
El rendimiento es mayor ya que ha disminuido el número de ciclos de ejecución y el número de ciclos de reloj por instrucción.

Ejemplo 4 : Reordenación de datos

Para este ejemplo, modifico la latencia en las unidades funcionales señaladas en Arquitectura.

;*********** WINDLXV *************
;*********** Ejemplo 4 *************
;------------------------------------------------------------------------------------------------------
; Ejemplo para ilustrar la reordenación de instrucciones – PROGRAMA ORIGINAL
;------------------------------------------------------------------------------------------------------
               .data
ONE:      .word 1
               .text
main:
                lf                              f1,ONE                 ;convierte divf en move al almacenar
                cvti2f                      f7,f1                      ; 1 en f7 en formato de punto flotante
                nop
                divf                         f1,f8,f7                  ;mueve Y=(f8) a f1
                divf                         f2,f9,f7                  ;mueve Z=(f9) a f2
                addf                        f3,f1,f2
                divf                         f10,f3,f7                ;mueve f3 a X=(f10)
                divf                         f4,f11,f7                ;mueve B=(f11) a f4
                divf                         f5,f12,f7                ;mueve C=(f12) a f5
                multf                      f6,f4,f5
                divf                         f13,f6,f7                ;mueve f6 a A=(f13)
Finish:      trap                        6
                

;*********** WINDLXV *************
;*********** Ejemplo 4 *************
;------------------------------------------------------------------------------------------------------------
; Ejemplo para ilustrar la reordenación de instrucciones – PROGRAMA REORDENADO
;------------------------------------------------------------------------------------------------------------
               .data
ONE:      .word                       1
               .text
main:
               lf                               f1,ONE                   ;convierte divf en move al almacenar
               cvti2f                       f7,f1                        ; 1 en f7 en formato de punto flotante
               nop
               divf                          f1,f8,f7                    ;mueve Y=(f8) a f1
               divf                          f2,f9,f7                    ;mueve Z=(f9) a f2
               divf                          f4,f11,f7                  ;mueve B=(f11) a f4
               divf                          f5,f12,f7                  ;mueve C=(f12) a f5
               addf                         f3,f1,f2
               multf                       f6,f4,f5
               divf                          f10,f3,f7                  ;mueve f3 a X=(f10)
               divf                          f13,f6,f7                  ;mueve f6 a A=(f13)
Finish:     trap                         6
               
a) Número total de ciclos de ejecución: 86 ciclos
    Ciclos por instrucción (CPI): 7.167 ciclos

b) Número de ciclos perdidos por dependencia RAW: 35 ciclos

c) Se produce un aumento del rendimiento al reordenar las instrucciones ya que se reduce el número de ciclos de ejecución(de 86 a 73 ciclos), el número de ciclos por instrucción (de 7.167 a 6.083 ciclos) y el número de detenciones (de 35 a 17).

Mejoras/Errores:

La latencia que se indica en el apartado de “Arquitectura” es una unidad menor que la latencia que se visualiza en la ventana de “Estadísticas”.
He tenido muchas dudas con el programa que con el manual, que aunque es extenso, no las pude resolver.

Adjunto Pdf original para su consulta offline.

No hay comentarios:

Publicar un comentario