COMPUTADORES SEGMENTADOS (DLX) PRACTICA 1

Anuncio
LABORATIORIO DE
ARQUITECTURA DE COMPUTADORES
INGENIERIA INFORMATICA
PRACTICA 1
COMPUTADORES SEGMENTADOS
(DLX)
Eduardo Moriana Delgado
2007/08
1.Introducción ...................................................................................................................................... 3
2.Ejercicios ........................................................................................................................................... 3
1. Introducción
En la primera práctica vamos a realizar cuatro ejercicios para un computador segmentado. Para
poder realizarlo vamos a utilizar el simulador Vsim. Estos ejercicios nos permitirán observar el
cauce de ejecución y como le afectan los parones cuando realizamos tareas iterativas.
2. Ejercicios
2.1 Ejercicio 1
2.1.1 Enunciado:
Realizar un programa para el DLX que sume dos vectores de 10 componentes, sin usar bucles.
Analizar los resultados estadísticos y las dependencias que producen detenciones en el cauce.
2.1.2 Código:
.data
vector1: .word 1,2,3,4,5,6,7,8,9,10
vector2: .word 0,1,2,3,2,1,0,1,2,3
vdestino: .word 0,0,0,0,0,0,0,0,0,0
lw r4,16(r1)
lw r5,16(r2)
add r6,r4,r5
sw 16(r3),r6
.text
ini:
lw r4,20(r1)
lw r5,20(r2)
add r6,r4,r5
sw 20(r3),r6
addi r1,r0,vector1
addi r2,r0,vector2
addi r3,r0,vdestino
lw r4,0(r1)
lw r5,0(r2)
add r6,r4,r5
sw 0(r3),r6
lw r4,4(r1)
lw r5,4(r2)
add r6,r4,r5
sw 4(r3),r6
lw r4,8(r1)
lw r5,8(r2)
add r6,r4,r5
sw 8(r3),r6
lw r4,12(r1)
lw r5,12(r2)
add r6,r4,r5
sw 12(r3),r6
2.1.3 Resultados obtenidos
Tamaño de memoria: 65536 bytes. Distribuida en 16 bancos.
lw r4,24(r1)
lw r5,24(r2)
add r6,r4,r5
sw 24(r3),r6
lw r4,28(r1)
lw r5,28(r2)
add r6,r4,r5
sw 28(r3),r6
lw r4,32(r1)
lw r5,32(r2)
add r6,r4,r5
sw 32(r3),r6
lw r4,36(r1)
lw r5,36(r2)
add r6,r4,r5
sw 36(r3),r6
trap #6
Configuración de unidades escalares en Coma Flotante
1 Unidad(es) de suma/resta,
latencia = 2 ciclos
1 Unidad(es) de división,
latencia = 19 ciclos
1 Unidad(es) de multiplicación, latencia = 5 ciclos
Configuración de unidades vectoriales
1 Unidad(es) de suma/resta,
latencia = 6 ciclos
1 Unidad(es) de división,
latencia = 20 ciclos
1 Unidad(es) de multiplicación, latencia = 7 ciclos
1 Unidad(es) de carga/almac.,
latencia = 12 ciclos
1 Unidad(es) logica(s),
latencia = 1 ciclos
2/1 puertos de lectura/escritura en los regs. vectoriales
)
Ciclos de parada por dependencia tras Cargas Escalares = 10
Ciclos de parada por dependencia de operaciones Escalares = 0
Ciclos de parada por dependencia de operaciones Vectoriales = 0
Ciclos consumidos por el programa = 54
No se han ejecutado instrucciones de salto.
Operaciones Pendientes:
ninguna.
2.1.4 Comentarios:
En el primer a desarrollar un programa que sume dos vectores sin el uso de un bucle.
Simplemente vamos sumando cada elemento de los dos vectores y lo guardamos en un tercero, para
a continuación almacenarlo en memoria.
En los resultados obtenidos podemos observar que hemos sufrido 10 parones de dependencias
RAW, al no estar preparado el elemento a sumar después de traerlo desde memoria a uno de los
registros.
2.2 Ejercico 2
2.2.1 Enunciado
Modificar el programa anterior para evitar las detenciones, comprobar los resultados.
2.2.2 codigo
.data
vector1: .word 1,2,3,4,5,6,7,8,9,10
vector2: .word 0,1,2,3,2,1,0,1,2,3
vdestino: .word 0,0,0,0,0,0,0,0,0,0
.text
ini:
addi r1,r0,vector1
addi r2,r0,vector2
addi r3,r0,vdestino
lw r4,0(r1)
lw r5,0(r2)
lw r7,4(r1)
lw r8,4(r2)
add r6,r4,r5
sw 0(r3),r6
add r6,r7,r8
sw 4(r3),r6
lw r4,8(r1)
lw r5,8(r2)
lw r6,12(r1)
lw r7,12(r2)
add r6,r4,r5
sw 8(r3),r6
add r6,r7,r8
sw 12(r3),r6
lw r4,16(r1)
lw r5,16(r2)
lw r6,20(r1)
lw r7,20(r2)
add r6,r4,r5
sw 16(r3),r6
add r6,r7,r8
sw 20(r3),r6
lw r4,24(r1)
lw r5,24(r2)
lw r6,28(r1)
lw r7,28(r2)
add r6,r4,r5
sw 24(r3),r6
add r6,r7,r8
sw 28(r3),r6
lw r5,32(r2)
lw r6,36(r1)
lw r7,36(r2)
add r6,r4,r5
sw 32(r3),r6
add r6,r7,r8
sw 36(r3),r6
trap #6
lw r4,32(r1)
2.2.3 Resultados
Tamaño de memoria: 65536 bytes. Distribuida en 16 bancos.
Configuración de unidades escalares en Coma Flotante
1 Unidad(es) de suma/resta,
latencia = 2 ciclos
1 Unidad(es) de división,
latencia = 19 ciclos
1 Unidad(es) de multiplicación, latencia = 5 ciclos
Configuración de unidades vectoriales
1 Unidad(es) de suma/resta,
latencia = 6 ciclos
1 Unidad(es) de división,
latencia = 20 ciclos
1 Unidad(es) de multiplicación, latencia = 7 ciclos
1 Unidad(es) de carga/almac.,
latencia = 12 ciclos
1 Unidad(es) logica(s),
latencia = 1 ciclos
2/1 puertos de lectura/escritura en los regs. vectoriales
)
Ciclos de parada por dependencia tras Cargas Escalares = 0
Ciclos de parada por dependencia de operaciones Escalares = 0
Ciclos de parada por dependencia de operaciones Vectoriales = 0
Ciclos consumidos por el programa = 44
No se han ejecutado instrucciones de salto.
Operaciones Pendientes:
ninguna.
2.2.4 comentarios
La finalidad de este ejercicio, consiste en tratar de eliminar las paradas del cauce por dependencias.
Como las paradas del cauce se deben a que los datos de memoria no están disponibles para realizar
la suma, vamos a traer desde memoria otro par de elementos de la suma siguiente, dando así el
tiempo necesario para que al iniciar las suma dos ciclos mas tarde, ya se encuentren disponibles los
datos de memoria. De este modo logramos suprimir todas las paradas realizando las sumas cada dos
parejas de datos.
2.3Ejercico 3
2.3.1 Enunciado
Repetir la operación usando un bucle para la suma de componentes.
2.3.2 codigo
.data
vector1: .word 1,2,3,4,5,6,7,8,9,10
vector2: .word 1,2,3,4,5,6,7,8,9,10
vector:
.word 0,0,0,0,0,0,0,0,0,0
.text
start:
addi r1,r0,#0
addi r2,r0, #10
bucle:
lw r3,vector1(r1)
lw r4,vector2(r1)
add r5,r3,r4
sw vector(r1),r5
addi r1,r1, #4
subi r2, r2, #1
bnez r2,bucle
nop
jijiji
trap #6
2.3.3 Estadísticas
Tamaño de memoria: 65536 bytes. Distribuida en 16 bancos.
Configuración de unidades escalares en Coma Flotante
1 Unidad(es) de suma/resta,
latencia = 2 ciclos
1 Unidad(es) de división,
latencia = 19 ciclos
1 Unidad(es) de multiplicación,
latencia = 5 ciclos
Configuración de unidades vectoriales
1 Unidad(es) de suma/resta,
latencia = 6 ciclos
1 Unidad(es) de división,
latencia = 20 ciclos
1 Unidad(es) de multiplicación,
latencia = 7 ciclos
1 Unidad(es) de carga/almac.,
latencia = 12 ciclos
1 Unidad(es) logica(s),
latencia = 1 ciclos
2/1 puertos de lectura/escritura en los regs. vectoriales
)
Ciclos de parada por dependencia tras Cargas Escalares = 10
Ciclos de parada por dependencia de operaciones Escalares = 0
Ciclos de parada por dependencia de operaciones Vectoriales = 0
Ciclos consumidos por el programa = 93
Saltos: total 10, tomados 9 (90.00%), no tomados 1 (10.00%)
Operaciones Pendientes:
ninguna.
2.3.4 comentarios
En este ejercicio hemos utilizado las instrucciones de salto, para implementar un bucle que realice
la suma de los dos vectores. Como podemos ver en las estadísticas tenemos 10 paradas por
dependencia de datos, una en cada operación de suma.
2.4 Ejercico 4
2.4.1 Enunciado
4.- Optimizar el programa del apartado anterior, comprobar resultados.
.data
vector1: .word 1,2,3,4,5,6,7,8,9,10
vector2: .word 1,2,3,4,5,6,7,8,9,10
vector:
.word 0,0,0,0,0,0,0,0,0,0
.text
start:
addi r1,r0,#0
addi r2,r0,#4
addi r3,r0, #4
bucle:
lw r4,vector1(r1)
lw r5,vector2(r1)
lw r6,vector1(r2)
lw r7,vector2(r2)
add r8,r4,r5
add r9,r6,r7
sw vector(r1),r8
sw vector(r2),r9
addi r1,r1, #8
addi r2,r2, #8
bnez r3,bucle
subi r3, r3, #1
trap #6
2.4.2 estadisticas
Tamaño de memoria: 65536 bytes. Distribuida en 16 bancos.
Configuración de unidades escalares en Coma Flotante
1 Unidad(es) de suma/resta,
latencia = 2 ciclos
1 Unidad(es) de división,
latencia = 19 ciclos
1 Unidad(es) de multiplicación,
latencia = 5 ciclos
Configuración de unidades vectoriales
1 Unidad(es) de suma/resta,
latencia = 6 ciclos
1 Unidad(es) de división,
latencia = 20 ciclos
1 Unidad(es) de multiplicación,
latencia = 7 ciclos
1 Unidad(es) de carga/almac.,
latencia = 12 ciclos
1 Unidad(es) logica(s),
latencia = 1 ciclos
2/1 puertos de lectura/escritura en los regs. vectoriales
)
Ciclos de parada por dependencia tras Cargas Escalares = 0
Ciclos de parada por dependencia de operaciones Escalares = 0
Ciclos de parada por dependencia de operaciones Vectoriales = 0
Ciclos consumidos por el programa = 64
Saltos: total 5, tomados 4 (80.00%), no tomados 1 (20.00%)
Operaciones Pendientes:
ninguna.
2.4.3 comentarios
La finalidad de este ejercicio consiste en optimizar lo posible el bucle, y para ello aparte de hacer
uso del hueco de retardo que perdemos después del salto, hemos desenrollado el bucle de tal modo
que hemos coneguido eliminar todas las paradas en el cauce. Se podría actualziar mas
desenrollando el bucle para ahorrar los ciclos para el control del bucle, pero no aplica a esta
práctica.
Documentos relacionados
Descargar