sábado, 12 de enero de 2013

Practica 8: WinDLX(2)


En esta práctica seguiremos profundizando en el uso del programa WinDLXV desde el cual observaremos el funcionamiento del pipeline de un procesador, así como los efectos que podemos conseguir modificando nuestro código.

Condiciones iniciales:

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


  • Ejercicio 1:

aa)    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 salto:
416 Ciclos
123 Instrucciones
3,382 Ciclos de reloj por instrucción (CPI)
Con adelantamiento de salto:
318 Ciclos
123 Instrucciones
2,585 Ciclos de reloj por instrucción (CPI)

Ganancia de velocidad: 23,55%

bb)    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 el este programa, compensa realizar dicha mejora desde el punto de vista de la relación coste/prestaciones. 
Reduciendo el retardo a 3 ciclos en la multiplicación:

270 Ciclos
123 Instrucciones
2,195 Ciclos de reloj por instrucción (CPI)

Ganancia de velocidad: 15%.
Compensa realizar la mejora.

cc)    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?
Reduciendo el retardo a 2 ciclos en la multiplicación:

246 Ciclos
123 Instrucciones
2 Ciclos de reloj por instrucción (CPI)

Ganancia de velocidad: 22,6%.
La mejora compensa el coste.

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

No. No se está realizando ninguna operación de suma, por tanto aunque se mejore la latencia de la unidad de suma, no influirá en nada.

  • Seleccione la opción “salto retardado” y ejecute el programa. ¿Qué ocurre? ¿Cuál es la causa? ¿Cuál sería la solución?
                    
Datos con el salto retardado activado:
16 Ciclos
8 Instrucciones
2000 Ciclos de reloj por instrucción (CPI)


El programa se ejecuta de manera más rápida a causa de que se ejecutan menos instrucciones, el motivo de esta reducción de instrucciones es que con esa opción no se comprueba si el salto ha sido o no efectivo, simplemente se ejecuta la siguiente instrucción.
La solución más obvia es no activar el salto retardado para que sean evaluados.



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

Datos versión modificada:
326 Ciclos
87 Instrucciones
3,747 Ciclos de reloj por instrucción (CPI)

Ganancia de velocidad: 21,63%.


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

El nuevo programa sería el siguiente:

.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
ld f18,-32(r1)
multd f20,f18,f2
sd -32(r1),f20
ld f22,-40(r1)
multd f24,f22,f2
sd -40(r1),f24
ld f26,-48(r1)
multd f28,f26,f2
sd -48(r1),f28
ld f30,-56(r1)
multd f8,f30,f2
sd -56(r1),f8
subi r1,r1,32
bnez r1,loop
trap 6

Las líneas destacadas en azul marcan los cambios añadidos.
Datos del nuevo programa:
Ciclos: 573
Instrucciones: 147
Ciclos de reloj por instrucción (CPI): 3,898


No existe ganancia, el programa empeora.



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

Programa reorganizado:

Agrupamos las instrucciones de tipo ld, sd y multd para evitar utilizar un registro en el que el dato aún no se ha cargado.
.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)
ld f6,-8(r1)
ld f10,-16(r1)
ld f14,-24(r1)
multd f4,f0,f2
multd f8,f6,f2
multd f12,f10,f2
multd f16,f14,f2
sd 0(r1),f4
sd -8(r1),f8
sd -16(r1),f12
sd -24(r1),f16
subi r1,r1,32
bnez r1,loop
trap 6
Datos del programa reorganizado:
Ciclos: 224
Instrucciones: 87
Ciclos de reloj por instrucción (CPI): 2,575

Ganancia de velocidad: 31,29%

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.