Arquitectura de Computadoras Práctica 3. Simulador MIPS
Enviado por h672262 • 5 de Mayo de 2018 • Tarea • 868 Palabras (4 Páginas) • 229 Visitas
Arquitectura de Computadoras
Práctica 3. Simulador MIPS
Objetivos
Visualizar, a través del simulador WinMIPS, el funcionamiento de una arquitectura pipeline relativamente simple.
Identificar el impacto que tienen los saltos y saltos condicionales sobre la ejecución del procesador.
Introducción
Con un editor convencional (por ejemplo, notepad), edite el siguiente programa y guárdelo como prueba1.s
; Arquitectura de computadoras
; Programa de demostración.
.data
i: .word32 0
j: .word32 0
.text
daddi R2,R0,0;
daddi r3, R0, 0;
daddi r5,R0,10 ;
WHIL: slt R6, R2, R5
beqz R6, ENDW
daddi r3, r3, 5
sw R3, j(r0)
daddi r2,r2,1
sw r2,i(r0)
j WHIL
ENDW: nop
halt
Este programa corresponde al programa en C:
int main() {
int i= 0; int j= 0;
while ( i < 10 ) {
j = j+5;
i = i +1;
}
}
Abra una ventana de comandos y compruebe que el programa es sintácticamente correcto mediante la instrucción:
C:> asm prueba1.s
Ejecute el simulador. Desde el menú file, cargue el programa prueba1.s y córralo paso a paso (F7)
Primera parte
- ¿Qué registros se utilizan para almacenar las variables i, j?
- ¿Para qué se utiliza la instrucción slt R6, R2, R5? ¿Qué ocurre si se intercambian los últimos dos registros de la instrucción?
- ¿Qué valores tienen i y j al final de la ejecución del programa?
- Modifique el programa anterior para que las variables y el código se almacenen a partir de las direcciones 100 y 200 de sus respectivos segmentos de datos y código
Segunda parte
Escriba un programa que almacene las primeras 10 potencias de 2 en un arreglo de 10 elementos. El tamaño de los elementos es de 32 bits.
- Utilice un algoritmo para calcular las potencias de 2 mediante multiplicación
- Ahora utilice un algoritmo basado en corrimientos a la izquierda
- Compare los tiempos de ejecución para cada caso. ¿Cuál es la principal fuente de la diferencia en los tiempos de ejecución¡
Tercera parte – Loop unrolling
Considere el siguiente programa:
LOOP: lw r10,0(r1); Leer un elemento de un vector
daddi r10,r10,4 ; Sumar 4 al elemento
sw r10,0(r1); Escribir el nuevo valor
daddi r1,r1,-4 ; Actualizar la var. índice
bne r1,r0,LOOP ; Fin de vector?
El cual corresponde al código:
FOR I := N DOWNTO 1 DO
A[I] := A[I]+4;
END
Existen tres dependencias de datos (RAW) que no permiten ninguna reordenación del código (por parte del compilador) para evitar las paradas que aparecerán en el pipeline durante su ejecución.
...