BoletinPractica2 Febrero2022
BoletinPractica2 Febrero2022
BoletinPractica2 Febrero2022
Facultad de Informática
T ÍTULO DE G RADO EN
I NGENIERÍA I NFORMÁTICA
Ampliación de Estructura de
Computadores
Práctica 2: Análisis de prestaciones de un cauce de instrucciones segmentado
Convocatoria de Febrero de 2023
C URSO 2022/23
Boletines de prácticas
B2.1.3. Desarrollo
El siguiente fragmento de código DLX realiza la siguiente operación vectorial: ~Z = a + ~X +~Y
; z = a + x + y
; Tamaño de los vectores: 16 palabras
; Vector x
.data
x: .word 0,1,2,3,4,5,6,7,8,9
.word 10,11,12,13,14,15
; Vector y
y: .word 100,100,100,100,100,100,100,100
.word 100,100,100,100,100,100,100,100
; Vector z
; 16 elementos son 64 bytes.
z: .space 64
; escalar a
a: .word -10
.text
start:
add r1,r0,x
add r4,r1,#64 ; 16*4
add r2,r0,y
add r3,r0,z
lw r10,a(r0)
1
Tema 2: Segmentación básica Ampliación de Estructura de Computadores
loop:
lw r12,0(r1)
add r12,r10,r12
lw r14,0(r2)
add r14,r12,r14
sw 0(r3),r14
add r1,r1,#4
add r2,r2,#4
add r3,r3,#4
seq r5,r4,r1
beqz r5,loop
trap #0 ; Fin de programa
El código fuente de este programa se encuentra en el mismo directorio del simulador, con el nombre
apxpy.s.
Paso 1: Ejecutad el simulador DLXide con lo que nos aparecerá la ventana principal del programa.
Para configurar el simulador, debemos acceder al menú “Simulador”, opción “Configuración DLX”. El
programa abrirá una ventana de diálogo mostrando las estrategias disponibles para resolver los riesgos
de datos y de control. Por defecto, se insertan ciclos de parada en ambos casos.
Paso 2: Cargad el fichero apxpy.s. Para ello, acceded al menú “Archivos”, opción “Abrir”, y se-
leccionad el fichero. Tras cargar un código fuente, éste debe ensamblarse (menú “Simulador”, opción
“Ensamblar” ó F8). En el caso de que hubiese errores, se mostrarían en la parte inferior de la venta-
na del programa. Tras corregirlos hay que volver a ensamblarlo. Cuando el programa se ensambla sin
errores, se almacena en la memoria de la máquina simulada, informando al usuario. Comprobad que el
código cargado corresponde al bucle mostrado anteriormente.
Paso 3: Cread la ventana de simulación para ejecutar el programa (menú “Simulador”, opción “Eje-
cutar”). Se abrirá una nueva ventana en la que se mostrará el estado interno de la máquina DLX así
como el cronograma de ejecución. Si además se pulsa en el botón “Ver CPU” se mostrará el camino de
datos de la arquitectura simulada.
El simulador permite la ejecución del programa ciclo a ciclo, avanzar varios ciclos o ejecutar-
lo completamente (hasta encontrar una instrucción trap #0). Tras cada ciclo de reloj se actualiza el
cronograma. Cuando se inserta un ciclo de parada, las fases en las que se mantienen las mismas ins-
trucciones se reflejan en cursiva. También se actualiza la ruta de datos de la máquina. Cada nueva
instrucción buscada recibe un color que se utiliza durante todo su recorrido por el cauce. Cuando en
una de las etapas no hay ninguna instrucción, se visualiza el texto -NOP-1 . En la parte inferior de la
ruta de datos aparecen también algunas señales de control que se activan para insertar ciclos de parada,
abortar instrucciones en curso o son indicativas de que se está aplicando la técnica de forwarding:
IF.stall: Mantiene la instrucción que está en la fase IF en la misma fase durante el próximo ciclo
de reloj, pasando a la fase ID el equivalente a una instrucción nop (burbuja).
ID.stall: Mantiene la instrucción que está en la fase ID en la misma fase durante el próximo ciclo
de reloj, pasando a la fase EX el equivalente a una instrucción nop (burbuja).
2
Tema 2: Segmentación básica Ampliación de Estructura de Computadores
El objetivo de este paso 3 consiste en ejecutar el programa ciclo a ciclo para la primera iteración
del bucle, observando el avance de las instrucciones a lo largo de la unidad segmentada, así como la
inserción de ciclos de parada cuando se detectan riesgos. En concreto, se pide especificar detallada-
mente aquellas instrucciones que insertan ciclos de parada en el procesador, así como el número de
instrucciones ejecutadas y el número de ciclos de parada totales para la primera iteración del bucle.
¿Coinciden los resultados con los que se han calculado manualmente anteriormente? Calculad el
CPI obtenido.
Paso 4: El objetivo de este paso es hacer cambios en el código de manera que, manteniendo la co-
rrección del programa, se reduzca en lo posible el número de ciclos de parada. Para ello tendrás que
3
Tema 2: Segmentación básica Ampliación de Estructura de Computadores
reordernar las instrucciones de manera que las instrucciones con dependencias se alejen las unas de las
otras lo suficiente para no introducir ciclos de parada. En concreto, se pide especificar detalladamente
el código del bucle del programa apxpy.s, determinar las instrucciones que insertan ciclos de para-
da en el procesador, así como el número de instrucciones ejecutadas y el número de ciclos de parada
totales para la primera iteración del bucle.