PRÁCTICAS
CON WinDLXV
Para cada uno de los siguientes ejemplos, las
condiciones de partida será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
- Adelantamiento de resultados: desactivado
- Ejemplo 1: dependencias de datos tipo RAW
Ejecute el programa ciclo a ciclo y observe las
detenciones que se producen en el cauce debido a las dependencias.
¿Cuál es en este cauce la latencia de emisión de
las instrucciones aritmético-lógicas?
Suma/Resta = 3
Multiplicación = 6
División = 20
¿La escritura y la lectura de los operandos en
el banco de registros se realizan en el mismo o en distinto ciclo?
Si, una en el flaco de subida
y otra en el flaco de bajada
Una vez ejecutado el programa completo, indicar:
a) Número total de
ciclos de ejecución y CPI:
29 ciclos y 1,933 ciclos por instrucción
b) Número (de ciclos)
y distribución de las detenciones (stalls):
10 RAW (Cuando pide un dato antes de que se haya calculado)
0 WAW
0 WAR
0 Estructurales
c) Número total de ciclos de ejecución, CPI,
número (de ciclos) y distribución de las detenciones y ganancia del rendimiento
al emplear adelantamiento de resultados (data forwarding):
19 ciclos, 1,267 CPI, 0 RAW, 0 WAW, 0 WAR y 0 Estructurales.
La ganancia es que al usar adelantamiento es 10 ciclos menos de ejecución y no
tener ninguna detención.
;*********** 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
- Ejemplo 2: dependencias de datos tipo RAW
Inicialice los registros r2 y r3 con los valores
0x1002 y 0x6, respectivamente. Igualmente, inicialice las posiciones de memoria
0x1004 y 0x1008 con los valores 0x1f y 0x20, respectivamente.
Sin ejecutar el programa en el simulador,
determine los valores que almacenarán los registros r1, r4, r5, r6 y r8 al
finalizar su ejecución. Indique también la dirección de memoria en la que se
almacenará el contenido del registro r5. Una vez ejecutado el programa en el
simulador compruebe estos resultados.
R1 = R2 + R3 = 4098 + 6 = 4104
R4 = R1 desplazado 0 veces =
4104
R5
= R4 – R3 = 4104 – 6 = 4098
R8
= R1 or R5 = 100000001000 or 1000000000010 = 1000000000000 = 4096
Ejecute el programa ciclo a ciclo y observe las
detenciones que se producen en el cauce debido a las dependencias.
¿Cuál es en este cauce la latencia de emisión de
las instrucciones aritmético-lógicas?
-Suma/resta: 3 Latencia
-Multiplicación: 6 Latencia
-División: 20 Latencia
¿Y para las instrucciones de carga?
-Suma/resta: 7 Latencia
-Multiplicación: 8 Latencia
-División: 21 Latencia
-Carga Vectorial: 13 Latencia
Una vez ejecutado el programa completo, indicar:
a) Número total de
ciclos de ejecución y CPI
25 ciclos y hay 1,923 CPI
b) Número (de
ciclos) y distribución de las detenciones
8 RAW, 0 WAW, 0 WAR y 0 Estructurales
c) Número total de
ciclos de ejecución, CPI, número (de ciclos) y distribución de las detenciones
y ganancia del rendimiento al emplear adelantamiento de resultados
19 Ciclos, 1,462 CPI, 2 RAW, 0 WAW, 0
WAR, 0 Estructurales. Las ganancias de usar adelantamiento son 7 ciclos menos y
menos detenciones, 6 RAW menos.
d) Al emplear adelantamiento de resultados,
¿cuáles serían las latencias de emisión para las instrucciones
aritmético-lógicas y para las instrucciones de carga?
Instrucciones Aritmético-lógicas:
-Suma/resta: 3 Latencia
-Multiplicación: 6 Latencia
-División: 20 Latencia
Instrucciones de carga:
-Suma/resta: 7 Latencia
-Multiplicación: 8 Latencia
-División: 21 Latencia
-Carga Vectorial: 13 Latencia
;*********** 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
- Ejemplo 3: dependencias de tipo estructural
Ejecute el programa ciclo a ciclo y observe las
detenciones que se producen en el cauce debido a las dependencias.
Una vez ejecutado el programa completo, indicar:
a) Número total de
ciclos de ejecución y CPI
18
Ciclos y 3 ciclos por instrucción
b) Número (de
ciclos) y distribución de las detenciones
0 RAW, 0 WAW, 0 WAR y 0 Estructurales
c) Ganancia del rendimiento al segmentar las
unidades funcionales de punto flotante**
15 ciclos frente a 18 ciclos sin segmentar. La ganancia es de
3 ciclos, aunque se producen 3 detenciones; 1 RAW y 2 Estructurales.
;*********** 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 6
- Ejemplo 4: reordenación de datos
Para este ejemplo considere una latencia de 3
ciclos para la suma y la multiplicación y de 9 ciclos para la división.
Unidades funcionales sin segmentar y adelantamiento de resultados desactivado.
Determinar:
a) Número total de
ciclos de ejecución y CPI del programa inicial
86
Ciclos y 7.167 ciclos por instrucción
b) Número de ciclos
perdidos por dependencias tipo RAW en el programa inicial
35
Ciclos
c) Ganancia del rendimiento al reordenar las
instrucciones
73 ciclos frente a 86 ciclos,
y solo perdemos 17 ciclos por dependencia tipo RAW en vez de 35.
;***********
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
No hay comentarios:
Publicar un comentario