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