LibroPracticas17 18
LibroPracticas17 18
Computadores
Manual de Laboratorio
Organización de Computadores
c Pedro Javier García García, Francisco José Alfaro Cortés, José Luis Sánchez García, María Teresa
López Bonal 2016
I.S.B.N.: 978-84-697-2041-7
3
Manual de laboratorio - Organización de Computadores
B. Simula3MS 49
B.1. Guía rápida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
B.2. Manual extendido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
B.2.1. Edición del código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
B.2.2. Conguración del camino de datos del simulador . . . . . . . . . . . . . 58
B.3. Ventana de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
B.4. Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
B.4.1. Segmento de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
B.4.2. Segmento de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
B.5. Llamadas al sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
B.6. Punto de ruptura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
B.7. Simulación con el procesador monociclo . . . . . . . . . . . . . . . . . . . . . . 63
B.8. Simulación con el procesador multiciclo . . . . . . . . . . . . . . . . . . . . . . . 66
B.9. Simulación con el procesador segmentado . . . . . . . . . . . . . . . . . . . . . 68
B.9.1. Segmentación básica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
B.9.2. Simulación con planicación dinámica . . . . . . . . . . . . . . . . . . . 69
C. SJM 77
C.1. Guía rápida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
C.1.1. Cargando archivos de accesos a memoria . . . . . . . . . . . . . . . . . . 78
C.1.2. Congurando la jerarquía de memoria . . . . . . . . . . . . . . . . . . . 80
C.1.3. Realizando simulaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
C.1.4. Resultados de la simulación . . . . . . . . . . . . . . . . . . . . . . . . . 88
C.2. Otros detalles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
C.2.1. Rango de valores de los parámetros de conguración . . . . . . . . . . . 89
C.2.2. Manejo de ventanas otantes . . . . . . . . . . . . . . . . . . . . . . . . 90
C.2.3. Ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4
Práctica 1
Unidad de Instrucción Segmentada
Prácticas de Organización de Computadores
2
o curso del Grado en Ingeniería Informática
1.1. Objetivos
Conocer el funcionamiento de la segmentación del procesador MIPS de enteros.
Comparar un cauce monociclo con uno cuya ruta de datos está segmentada.
Comparar un cauce multiciclo sin segmentar con uno cuya ruta de datos está segmentada.
1.2. Desarrollo
A lo largo de toda la práctica deberéis ir anotando los resultados y conclusiones obtenidas
para luego poder completar el examen que se realizará al nal de la sesión de prácticas en el
laboratorio usando la plataforma Moodle.
→
− →
− → −
El siguiente fragmento de código MIPS realiza la operación vectorial Z = a+X + Y y
lo tenéis disponible en el archivo APXPY_MIPS_1v.s en Moodle.
# Z= a + X + Y
# Vector X
.data
x: .word 1
# Vector Y
y: .word 100
# Vector Z:
z: .space 64
# Escalar a
a: .word -10
# El código
.text
.globl main
main:
la $t1, x
addi $t4, $t1, 64
la $t2, y
la $t3, z
la $t5, a
lw $t5, 0($t5)
5
Manual de laboratorio - Organización de Computadores
loop:
lw $t6, 0($t1)
add $t6, $t5, $t6
lw $t7, 0($t2)
add $t7, $t6, $t7
sw $t7, 0($t3)
addi $t1, $t1, 4
addi $t2, $t2, 4
addi $t3, $t3, 4
addi $v0,$0, 10 # Fin del programa
syscall
Como sabéis, la instrucción syscall no es realmente una instrucción MIPS, sino una
llamada al sistema para terminar la ejecución del programa. Por tanto, no deberéis tener
en cuenta esta psudoinstrucción a la hora de calcular las estadísticas de las prácticas.
Utilizando la versión Simula3MSv5.01 del simulador del procesador MIPS Simula3MS ,
1
1. Analiza qué está pasando al ensamblar el programa con las instrucciones la y por qué
pasa eso.
2. Modica la conguración del simulador para que el camino de datos sea monociclo sin
segmentar:
Ejecuta el programa ciclo a ciclo y realiza un cronograma que indique cómo se van
ejecutando las instrucciones en el tiempo.
3. Modica la conguración del simulador para que el camino de datos sea multiciclo
sin segmentar con una unidad de suma, otra de multiplicación y otra de división con
latencias de 4, 7 y 10 ciclos, respectivamente:
Ejecuta el programa ciclo a ciclo, observando cómo se van ejecutando las instruc-
ciones.
Analiza cuántos ciclos tardan en ejecutarse cada uno de los siguientes tipos de
instrucciones: cargas, almacenamientos y aritmético-lógicas.
1
Simula3MS es un proyecto del grupo de Arquitectura de Computadores de la Universidad de La Coruña
(http://simula3ms.des.udc.es/).
6
Práctica 1: Unidad de Instrucción Segmentada
4. Modica la conguración del simulador para que el camino de datos sea segmentado
básico sin adelantamiento y con una unidad sumadora, otra multiplicadora y otra
de división con latencias de 4, 7 y 10 ciclos, respectivamente, estando las dos primeras
unidades segmentadas pero no la de división :
2
Ejecuta el programa ciclo a ciclo, observando cómo se van ejecutando las instruc-
ciones y las detenciones que se ocasionan.
Realiza un cronograma que indique cómo se van ejecutando y solapando las ins-
trucciones en el tiempo.
Comprueba que los números que has obtenido coinciden con las estadísticas que
proporciona el simulador.
2
Es posible que tengas que cerrar la aplicación y volver a iniciarla para que realmente se ejecute el cauce
segmentado.
7
Manual de laboratorio - Organización de Computadores
8
Práctica 2
Riesgos de Datos
Prácticas de Organización de Computadores
2
o curso del Grado en Ingeniería Informática
2.1. Objetivos
Entender la problemática de los riesgos de datos.
2.2. Desarrollo
Al igual que en la práctica anterior, a lo largo de toda la práctica deberéis ir anotando los
resultados y conclusiones obtenidas para luego poder completar el examen que se realizará al
nal de la sesión de prácticas en el laboratorio usando la plataforma Moodle.
→
− →
− → −
El siguiente fragmento de código MIPS realiza la operación vectorial Z = a+X + Y y
lo tenéis disponible en el archivo APXPY_MIPS_1v.s en Moodle.
# Z= a + X + Y
# Vector X
.data
x: .word 1
# Vector Y
y: .word 100
# Vector Z:
z: .space 64
# Escalar a
a: .word -10
# El código
.text
.globl main
main:
la $t1, x
addi $t4, $t1, 64
la $t2, y
la $t3, z
la $t5, a
lw $t5, 0($t5)
9
Manual de laboratorio - Organización de Computadores
loop:
lw $t6, 0($t1)
add $t6, $t5, $t6
lw $t7, 0($t2)
add $t7, $t6, $t7
sw $t7, 0($t3)
addi $t1, $t1, 4
addi $t2, $t2, 4
addi $t3, $t3, 4
addi $v0,$0, 10 # Fin del programa
syscall
Utilizando el simulador del procesador MIPS Simula3MS realiza las siguientes tareas:
1. Modica la conguración del simulador para que el camino de datos sea segmentado
básico SIN adelantamiento y con una unidad sumadora, otra multiplicadora y otra de
división con latencias de 4, 7 y 10 ciclos, respectivamente, estando las dos primeras
unidades segmentadas pero no la de división:
Ejecuta el programa ciclo a ciclo, observando cómo se van ejecutando las instruc-
ciones y las detenciones que se ocasionan.
Comprueba que los números que has obtenido coinciden con las estadísticas que
proporciona el simulador.
2. Manteniendo la misma conguración del simulador, modifícala sólo para que ahora el
camino de datos sea CON adelantamiento:
Ejecuta el programa ciclo a ciclo, observando cómo se van ejecutando las instruc-
ciones y las detenciones que se ocasionan.
Observa los adelantamientos que se van produciendo, entre qué instrucciones son y
qué dato es el que se adelanta.
Clasica los riesgos que ocurran y compáralos con los que obtuvistes con la con-
guración anterior.
10
Práctica 2: Riesgos de Datos
Comprueba que los números que has obtenido coinciden con las estadísticas que
proporciona el simulador.
Compara los resultados obtenidos con los que obtuviste en el caso anterior y analiza
de dónde procede la mejora obtenida.
11
Manual de laboratorio - Organización de Computadores
12
Práctica 3
Riesgos de Control I: Implementación del Salto
Prácticas de Organización de Computadores
o curso del Grado en Ingeniería Informática
2
3.1. Objetivos
Entender la problemática de los riesgos de control.
Comparar la diferencia en la implementación del salto con tres huecos o con un único
hueco en el salto.
3.2. Desarrollo
Al igual que en las prácticas anteriores, a lo largo de toda la práctica deberéis ir anotando
los resultados y conclusiones obtenidas para luego poder completar el examen que se reali-
zará al nal de la sesión de prácticas en el laboratorio usando la plataforma Moodle. Se ha
detectado que en algunas ocasiones los resultados de las estadísticas que muestra el simulador
no son totalmente correctos. Así pues, estudia detalladamente la ejecución y saca tus propias
conclusiones.
→
− →
− → −
El siguiente fragmento de código MIPS realiza la operación vectorial Z = a+X + Y y
lo tenéis disponible en el archivo APXPY_MIPS.s en Moodle.
# Z= a + X + Y
# Vector X
.data
x: .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
# Vector Y
y: .word 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100
# Escalar a
a: .word -10
# El código
.text
.globl main
main:
la $t1, x
addi $t4, $t1, 64
13
Manual de laboratorio - Organización de Computadores
la $t2, y
la $t3, z
la $t5, a
addi $t8, $0, 0
lw $t5, 0($t5)
loop:
lw $t6, 0($t1)
lw $t7, 0($t2)
add $t6, $t5, $t6
add $t7, $t6, $t7
sw $t7, 0($t3)
addi $t1, $t1, 4
addi $t2, $t2, 4
addi $t3, $t3, 4
bne $t4, $t1, loop
addi $v0,$0, 10
addi $t8, $t8, 1
addi $t8, $t8, -1
syscall
Utilizando el simulador del procesador MIPS Simula3MS realiza las siguientes tareas:
1. Modica la conguración del simulador para que el camino de datos sea segmentado bási-
co con adelantamiento y con una unidad sumadora, otra multiplicadora y otra de división
con latencias de 4, 7 y 10 ciclos, respectivamente, estando las dos primeras unidades seg-
mentadas pero no la de división. Fija la estrategia para el salto como predecir-no-tomado
con TRES HUECOS en el salto:
Ejecuta el programa ciclo a ciclo para la primera iteración del bucle, observan-
do cómo se van ejecutando las instrucciones y las detenciones que se ocasionan,
dedicando especial atención al comportamiento del salto condicional.
Comprueba que los números que has obtenido coinciden con las estadísticas que
proporciona el simulador.
2. Modica la conguración del simulador para que el camino de datos sea segmentado bási-
co con adelantamiento y con una unidad sumadora, otra multiplicadora y otra de división
con latencias de 4, 7 y 10 ciclos, respectivamente, estando las dos primeras unidades seg-
mentadas pero no la de división. Fija la estrategia para el salto como predecir-no-tomado
con UN HUECO en el salto:
14
Práctica 3: Riesgos de Control I: Implementación del Salto
Ejecuta el programa ciclo a ciclo para la primera iteración del bucle, observan-
do cómo se van ejecutando las instrucciones y las detenciones que se ocasionan,
dedicando especial atención al comportamiento del salto condicional.
Comprueba que los números que has obtenido coinciden con las estadísticas que
proporciona el simulador.
15
Manual de laboratorio - Organización de Computadores
16
Práctica 4
Riesgos de Control II: Estrategias a Usar en los Saltos
Prácticas de Organización de Computadores
2
o curso del Grado en Ingeniería Informática
4.1. Objetivos
Entender la problemática de los riesgos de control.
4.2. Desarrollo
Al igual que en las prácticas anteriores, a lo largo de toda la práctica deberéis ir anotando
los resultados y conclusiones obtenidas para luego poder completar el examen que se reali-
zará al nal de la sesión de prácticas en el laboratorio usando la plataforma Moodle. Se ha
detectado que en algunas ocasiones los resultados de las estadísticas que muestra el simulador
no son totalmente correctos. Así pues, estudia detalladamente la ejecución y saca tus propias
conclusiones.
→
− →
− → −
El siguiente fragmento de código MIPS realiza la operación vectorial Z = a+X + Y y
lo tenéis disponible en el archivo APXPY_MIPS_1H.s en Moodle.
# Z= a + X + Y
# Vector X
.data
x: .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
# Vector Y
y: .word 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100
# Escalar a
a: .word -10
# El código
.text
.globl main
main:
la $t1, x
addi $t4, $t1, 64
la $t2, y
17
Manual de laboratorio - Organización de Computadores
la $t3, z
la $t5, a
addi $t8, $0, 0
lw $t5, 0($t5)
loop:
lw $t6, 0($t1)
lw $t7, 0($t2)
add $t6, $t5, $t6
add $t7, $t6, $t7
sw $t7, 0($t3)
addi $t1, $t1, 4
addi $t2, $t2, 4
addi $t3, $t3, 4
bne $t4, $t1, loop
addi $v0,$0, 10
syscall
Utilizando el simulador del procesador MIPS Simula3MS realiza las siguientes tareas:
1. Modica la conguración del simulador para que el camino de datos sea segmentado bási-
co con adelantamiento y con una unidad sumadora, otra multiplicadora y otra de división
con latencias de 4, 7 y 10 ciclos, respectivamente, estando las dos primeras unidades seg-
mentadas pero no la de división. Fija la estrategia para el salto como PREDECIR NO
TOMADO con un único hueco en el salto:
Ejecuta el programa ciclo a ciclo para la primera iteración del bucle, observan-
do cómo se van ejecutando las instrucciones y las detenciones que se ocasionan,
dedicando especial atención al comportamiento del salto condicional.
Comprueba que los números que has obtenido coinciden con las estadísticas que
proporciona el simulador.
2. Modica la conguración del simulador para que el camino de datos sea segmentado
básico con adelantamiento y con una unidad sumadora, otra multiplicadora y otra de
división con latencias de 4, 7 y 10 ciclos, respectivamente, estando las dos primeras uni-
dades segmentadas pero no la de división. Fija la estrategia para el salto como SALTO
RETARDADO con un único hueco en el salto:
Ejecuta el programa ciclo a ciclo para la primera iteración del bucle, observan-
do cómo se van ejecutando las instrucciones y las detenciones que se ocasionan,
dedicando especial atención al comportamiento del salto condicional.
18
Práctica 4: Riesgos de Control II: Estrategias a Usar en los Saltos
Estudia qué implicaciones tiene en este caso el uso de la estrategia de salto retar-
dado.
Comprueba que los números que has obtenido coinciden con las estadísticas que
proporciona el simulador.
Estudia qué está pasando con la instrucción que está situada debajo del salto.
¾Podrían mejorarse las prestaciones de este código alterando el orden de las ins-
trucciones? En ese caso modica el código como consideres oportuno siempre que
el resultado nal que realiza el bucle sea el mismo y estudia las estadísticas que
obtengas para la primera iteración y para la ejecución completa.
19
Manual de laboratorio - Organización de Computadores
20
Práctica 5
Unidad de Instrucción Segmentada con
Cauce para Punto Flotante
Prácticas de Organización de Computadores
2
o curso del Grado en Ingeniería Informática
5.1. Objetivos
Manejo y programación de la codicación de los datos en punto otante en el procesador
MIPS.
donde S es el bit de signo y su signicado es: 0=Positivo ; 1=Negativo. Para los números
de precisión simple, el exponente es desplazado en el rango -126 a +127 mediante la suma
de 127 (que se llama Polarización) para obtener un valor en el rango 1 a 254 (que se llama
Característica). Cuando se interpreta el valor en coma otante, el número es desplazado de
nuevo para obtener el exponente real.
Para números normalizados, los más comunes, el número se codica así:
21
Manual de laboratorio - Organización de Computadores
La mantisa es la parte fraccional del número normalizado. Un número en base dos está
normalizado si el exponente está ajustado de forma que el 1 más signicativo de la mantisa
binaria queda justo a la izquierda del punto separador de la parte entera y fraccionaria de la
misma. Además, ese 1 no se almacena (queda implícito) y cuando se producen los cálculos es
restituido.
Ejemplo: Obtener el número decimal representado por esta palabra de coma otante de
simple precisión:
Los 8 bits del exponente son 10000001 y por tanto tienen codicado el valor 129, y al
restarle 127, que previamente se le había sumado, nos da el valor de 2 para el exponente.
La parte fraccionaria comienza con 01 a lo que hay que añadirle la parte entera, lo cual
nos da 1,01.
Juntandolo todo nos da:
Para los números de doble precisión, el exponente es desplazado en el rango -1022 a +1023
mediante la suma de 1023 para obtener un valor en el rango 1 a 2046. Al igual que en el caso
de precisión simple, cuando se interpreta el valor en coma otante, el número es desplazado
de nuevo para obtener el exponente real.
Ejemplo: Obtener el número decimal representado por esta palabra de coma otante de
doble precisión:
Los 11 bits del exponente son 10000000011 y por tanto tienen codicado el valor 1027,
y al restarle 1023, que previamente se le había sumado, nos da el valor de 4 para el
exponente.
La parte fraccionaria comienza con 1001 a lo que hay que añadirle la parte entera, lo
cual nos da 1,1001.
Juntandolo todo nos da:
22
Práctica 5: Unidad de Instrucción Segmentada para Punto Flotante
5.3. Desarrollo
Vamos a dividir el desarrollo de esta práctica en dos partes distintas. En todos los casos
hay que congurar el procesador para que utilice adelantamiento y resuelva el salto con
un único hueco.
5.3.1. Parte 1
Utilizando las opciones apropiadas del simulador Simula3MS dene un computador MIPS
donde el salto se trata con la estrategia de predecir no tomado y que tiene las siguientes
unidades funcionales:
→
− →
− →
− →
− →− →
−
a× X + Y
El programa Practica5_Parte1.s hace la operación Z = b , donde Z, X e Y
son vectores de cien elementos de doble precisión y a y b son constantes de simple precisión.
Tenéis disponible el chero en Moodle y su código es:
#los datos
.data
a: .float 10
b: .float 5
#vector x
x: .double 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
x1: .double 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
x2: .double 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
x3: .double 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
x4: .double 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
#vector y
y: .double 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
y1: .double 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
y2: .double 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
y3: .double 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
y4: .double 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
#vector z
z: .space 800
23
Manual de laboratorio - Organización de Computadores
→
− →
− →
−
a× X + Y
1. Comprueba que el código realiza la operación Z = b , y anota los valores para
→
−
el vector Z. Realiza la conversión de punto otante a decimal de algunos de los valores
almacenados en memoria.
4. Trata de planicar el bucle para minimizar las detenciones que se producen (sin alterar
los desplazamientos en las instrucciones de los accesos a memoria), y evalúa el CPI de
esta nueva versión, así como la ganancia que se consigue respecto a la versión original.
5. Ahora dene un computador MIPS con 2 unidades funcionales de cada tipo y con las
mismas latencias que antes. Ejecuta el programa realizado en la primera parte de la
práctica y cuantica la reducción en el tiempo de ejecución, así como la mejora obtenida
en rendimientos. Encuentra explicación a los resultados que has obtenido.
24
Práctica 5: Unidad de Instrucción Segmentada para Punto Flotante
5.3.2. Parte 2
Utilizando las opciones apropiadas del simulador Simula3MS dene un computador MIPS
con adelantamiento hardware, donde el salto se resuelve con un hueco y se aplica la estrategia
de salto retardado y que tiene las siguientes unidades funcionales:
→
− →
− →
− →
− →
−
El programa Practica5_parte2.s realiza la operación Z = a× A +b× B +c× C +d× D
→
− → − → − → − → −
donde a, b, c y d son constantes de simple precisión y A , B , C , D y Z son vectores de doble
precisión de longitud 10. Tenéis disponible el chero en Moodle y su código es:
#los datos
.data
a: .float 1
b: .float 2
c: .float 3
d: .float 4
va: .double 1,2,3,4,5,6,7,8,9,10
vb: .double 11,12,13,14,15,16,17,18,19,20
vc: .double 21,22,23,24,25,26,27,28,29,30
vd: .double 31,32,33,34,35,36,37,38,39,40
z: .space 80
#el código
.text
.globl main
main:
la $t1, va #carga la dir vector va en $t1
la $t7, vb #carga la dir vector vb en $t7 para comprobar fin bucle
la $t2, vb #carga la dir vector vb en $t2
la $t3, vc #carga la dir vector vc en $t3
la $t4, vd #carga la dir vector vd en $t4
la $t5, z #carga la dir vector z en $t5
la $t6, a #carga la dir de "a" en $t6
lwc1 $f1, 0($t6) #carga "a" en f0
cvt.d.s $f0, $f1 #convertimos "a" en DP y lo guardamos en $f0:$f1
la $t6, b #carga la dir de "b" en $t6
lwc1 $f3, 0($t6) #carga "b" en f3
cvt.d.s $f2, $f3 #convertimos "b" en DP y lo guardamos en $f2:$f3
la $t6, c #carga la dir de "c" en $t6
lwc1 $f5, 0($t6) #carga "c" en f5
cvt.d.s $f4, $f5 #convertimos "c" en DP y lo guardamos en $f4:$f5
la $t6, d #carga la dir de "d" en $t6
25
Manual de laboratorio - Organización de Computadores
loop:
lwc1 $f8, 0($t1) #f8=va[i]
lwc1 $f9, 4($t1) #f8=va[i]
lwc1 $f10,0($t2) #f10=vb[i]
lwc1 $f11,4($t2) #f10=vb[i]
lwc1 $f12,0($t3) #f12=vc[i]
lwc1 $f13,4($t3) #f12=vc[i]
lwc1 $f14,0($t4) #f14=vd[i]
lwc1 $f15,4($t4) #f14=vd[i]
mul.d $f8,$f8,$f0 #f8=a*va[i]
mul.d $f10,$f10,$f2 #f10=b*vb[i]
mul.d $f12,$f12,$f4 #f12=c*vc[i]
mul.d $f14,$f14,$f6 #f14=d*vd[i]
addi $t1,$t1,8 #actualizamos todos los indices
addi $t2,$t2,8
addi $t3,$t3,8
addi $t4,$t4,8
addi $t5,$t5,8
add.d $f16,$f8,$f10 #f16 = a*va[i] + b*vb[i]
add.d $f18,$f12,$f14 #f18 = c*vc[i] + d*vd[i]
add.d $f20,$f16,$f18 #f20 = a*va[i] + b*vb[i] + c*vc[i] + d*vd[i]
swc1 $f20, -8($t5) #almacenamos la parte baja del resultado z[i]
bne $t1, $t7, loop #comprobamos si hemos terminado el bucle
swc1 $f21, -4($t5) #almacenamos la parte alta del resultado z[i]
addi $v0, $0, 10 #llamada para salir del programa
syscall
Podemos comprobar como el programa que realiza esta operación hace uso de las dos
unidades funcionales sumadoras y de las dos unidades funcionales multiplicadoras. Lo que se
pide para este código es:
→
− →
− →
− →
− →
−
1. Comprueba que el código realiza la operación Z = a × A + b × B + c × C + d × D, y
→
−
anota los valores para el vector Z.
2. Ejecuta el programa paso a paso hasta el nal de la primera iteración del bucle y anota
las detenciones que se producen y decide de qué tipo es cada detención.
3. Ejecuta el programa hasta el nal y cuantica el tiempo total de simulación, los ciclos
de detención y las instrucciones ejecutadas. Calcula el CPI obtenido.
4. Compara los resultados con los que se obtienen al tener una única unidad sumadora y
multiplicadora sin segmentar.
5. ¾Cómo variarán los resultados de ambas opciones si las unidades funcionales sumadoras
y multiplicadoras están segmentadas o no?
26
Práctica 5: Unidad de Instrucción Segmentada para Punto Flotante
6. Con las mismas latencias que en los apartados anteriores, incrementa el número de
unidades funcionales de punto otante al valor mínimo que consideres necesario para
conseguir evitar las detenciones sin reorganizar el código. ¾Qué CPI se obtiene en este
caso? ¾Cuántas detenciones hay y de qué tipo son?
7. ¾Cuántas unidades funcionales de punto otante serían necesarias para conseguir las
mismas prestaciones que en el apartado anterior si la unidad funcional sumadora sólo
tuviera 2 ciclos de latencia y la de multiplicación 4 ciclos? ¾Cuál es el número total de
ciclos de ejecución y el número de detenciones en este caso?
27
Manual de laboratorio - Organización de Computadores
28
Práctica 6
Introducción a la Evaluación de Jerarquías de Memoria
Prácticas de Organización de Computadores
2
◦ curso del Grado en Ingeniería Informática
6.1. Objetivos
Aprender a manejar el simulador SJM
6.2. Desarrollo
Para el desarrollo de esta práctica (y las siguientes) se empleará el simulador SJM, que
permite modelar de forma intuitiva distintas jerarquías de memoria, congurar las caracterís-
ticas de sus elementos y obtener medidas de sus prestaciones para evaluar su eciencia. Antes
de comenzar con el desarrollo de la práctica se explicará el manejo básico de esta herramienta.
Tanto el simulador SJM como un breve manual de usuario del mismo están disponibles en el
espacio Moodle de la asignatura. También pueden encontrarse en el mismo espacio las trazas
de memoria que deben usarse durante la práctica.
Al igual que en las prácticas anteriores, a lo largo de toda la práctica deberéis ir anotando
los resultados y conclusiones obtenidas para luego poder completar el cuestionario de evalua-
ción que se realizará al nal de la sesión de prácticas en el laboratorio usando la plataforma
Moodle.
1. Analiza a qué direcciones se accede en los accesos a instrucción que se realizan entre
los accesos 20 y 59. ¾Puede decirse que existe localidad en los accesos a instrucción
en ese intervalo? ¾Por qué?
29
Manual de laboratorio - Organización de Computadores
Compara estos resultados con los datos del cálculo teórico realizado en la parte 2. ¾Coin-
ciden los resultados?
Sin cambiar la conguración de la jerarquía (es decir, sigue usando la Jerarquía 1),
carga la traza 2 (contenida en el chero traza2 ) y realiza una simulación paso a
paso hasta el nal. Observa en cada paso la ventana detallada de estado de caché.
Responde a las siguientes cuestiones:
3. Observando cómo se llenan los bloques de caché, ¾podría decirse que esta traza
presenta localidad para esta jerarquía?
3. Compara estos resultados con los obtenidos previamente para la traza 1 con la
Jerarquía 1. ¾Mejora la Jerarquía 2 las prestaciones de la jerarquía respecto a
la Jerarquía 1? ¾Por qué?
30
Práctica 7
Análisis de la Inuencia de los Parámetros
de Diseño de la Caché en su Rendimiento
Prácticas de Organización de Computadores
2
◦ curso del Grado en Ingeniería Informática
7.1. Objetivos
Aanzar el manejo del simulador SJM
7.2. Desarrollo
En esta práctica se estudiará cómo afecta al rendimiento de una memoria caché la modi-
cación de distintos parámetros. Concretamente, se evaluará cómo el rendimiento de la memoria
caché se ve afectado cuando varía el tipo de correspondencia, el tamaño de la memoria caché o
el tamaño del bloque. Para ello, se modelará en el simulador una jerarquía de memoria sencilla,
compuesta sólo por una caché unicada y la memoria principal. A continuación, se evaluarán
dos casos de estudio mediante diversas simulaciones en las que se variará el valor de ciertos
parámetros de la caché y se mantendrá jo el valor de otros (los parámetros jos y variables
dependen del caso de estudio y se indican más adelante). La idea es que, al simular distintas
combinaciones de valores de parámetros, se podrá evaluar el impacto de la variación de dichos
parámetros. De todas las métricas que ofrece el simulador SJM para evaluar la jerarquía, en
cada simulación nos quedaremos con la tasa de fallos de caché como indicador del rendimiento
de la conguración de caché simulada. Los resultados de todas las simulaciones se recogerán
en tablas, de modo que pueda comprobarse en ellas fácilmente cómo la modicación del valor
de los parámetros condiciona la tasa de fallos de la caché.
Al igual que en las prácticas anteriores, a lo largo de toda la práctica deberéis ir anotando
los resultados y conclusiones obtenidas para luego poder completar el cuestionario de evalua-
ción que se realizará al nal de la sesión de prácticas en el laboratorio usando la plataforma
Moodle.
Teniendo en cuenta este planteamiento, a continuación se indican algunas instrucciones
más detalladas para el desarrollo de la práctica:
Conguraciones de la jerarquía:
Como se ha mencionado, la jerarquía constará simplemente de un nivel de memoria caché
unicada y la memoria principal. Respecto a los valores de los parámetros de memoria
principal, se dejarán jos los que vienen por defecto. En cuanto a los valores de los
parámetros de caché, unos serán jos y otros variables dependiendo del caso de estudio
a evaluar. Concretamente, se realizarán dos estudios: en el primero de ellos vamos a
variar el tipo de correspondencia en la caché y su tamaño, y en el segundo vamos a
variar el tamaño de caché y el tamaño del bloque. Para cada uno de los estudios los
valores concretos de los parámetros de caché serán (los valores de los parámetros de
caché que no se indican deben dejarse a su valor por defecto):
31
Manual de laboratorio - Organización de Computadores
Estudio 1
1. Tamaño de bloque (jo): 16B
Estudio 2
1. Política de correspondencia (ja): directa
Para cada conguración de caché, se anotará la tasa de fallos como medida de su ren-
dimiento (anota al menos 3 dígitos decimales). Para facilitar la recogida de resultados
puedes utilizar las tablas que aparecen abajo, o utilizar una tabla Excel en el ordenador
(en este último caso, podrás gracar los resultados, lo que puede ayudarte a apreciar
mejor el impacto de variar el valor de los parámetros de caché).
Tabla Estudio 1
Tamaño de caché
256B 512B 1K 2K
Correspondencia directa
Asociativa 2 vías
Asociativa 4 vías
Totalmente Asociativa
Tabla Estudio 2
Tamaño de bloque
8B 16B 32B 64B
Caché 256B
Caché 512B
Caché 1K
Caché 2K
32
Práctica 8
Evaluación de Cachés Multinivel y Separadas
Prácticas de Organización de Computadores
2
◦ curso del Grado en Ingeniería Informática
8.1. Objetivos
Reforzar los conceptos de cachés multinivel y separadas
8.2. Desarrollo
Con esta práctica se pretende, por una parte, que los estudiantes aancen sus conocimientos
sobre varios tipos de conguraciones de caché, concretamente, cachés multinivel y cachés
separadas (para instrucciones y datos). Para ello, se evaluará mediante el simulador SJM el
comportamiento de dichas conguraciones, y se comparará, respectivamente, con el que tienen
las cachés mononivel y las cachés unicadas. Por otra parte, se pretende aanzar el dominio
de los estudiantes sobre la relación entre las direcciones de los accesos a memoria y la política
de correspondencia en caché. Para ello, deben analizarse las trazas con las que evaluarán las
conguraciones indicadas, de cara a encontrar las razones por las que los resultados son los
obtenidos. Teniendo en cuenta este planteamiento, en las siguientes secciones se indican qué
conguraciones deben evaluarse y compararse, las trazas a emplear en las simulaciones, y qué
resultados concretos deben analizarse.
Al igual que en las prácticas anteriores, a lo largo de toda la práctica deberéis ir anotando
los resultados y conclusiones obtenidas para luego poder completar el cuestionario de evalua-
ción que se realizará al nal de la sesión de prácticas en el laboratorio usando la plataforma
Moodle.
33
Manual de laboratorio - Organización de Computadores
Nótese que, para que la comparativa sea justa, la suma del tamaño de las cachés de ins-
trucciones y datos es el mismo que el de la caché unicada. La caché unicada y la caché
separada se simularán cada una empleando dos trazas (esto es, cada conguración se si-
mulará dos veces, cada vez con una traza distinta). Concretamente, las trazas a emplear
en las simulaciones son TrazaU (diseñada para que la caché unicada ofrezca mejores
prestaciones que la separada) y TrazaS (diseñada para que la caché separada ofrezca
mejores prestaciones que la unicada). A partir de los resultados de estas simulaciones,
contesta a las siguientes cuestiones:
34
Práctica 9
Evaluación de Jerarquías de Memoria Virtual
Prácticas de Organización de Computadores
2
◦ curso del Grado en Ingeniería Informática
9.1. Objetivos
Reforzar el dominio de la relación entre direcciones virtuales y físicas
9.2. Desarrollo
Con esta práctica se pretende que el alumno aance sus conocimientos sobre memoria
virtual en general, y más concretamente, sobre el funcionamiento de tablas de páginas y
TLBs y sobre la correspondencia entre direcciones virtuales y físicas. Para ello, se evaluará
mediante el simulador SJM el rendimiento de conguraciones de jerarquía de memoria que
usan memoria virtual paginada (SJM no permite otro tipo de gestión del espacio de direcciones
virtuales), con y sin TLB. Esta evaluación se realizará mediante el análisis, teórico y simulado,
de conguraciones de la jerarquía concretas con una traza dada.
Al igual que en las prácticas anteriores, a lo largo de toda la práctica deberéis ir anotando
los resultados y conclusiones obtenidas para luego poder completar el cuestionario de evalua-
ción que se realizará al nal de la sesión de prácticas en el laboratorio usando la plataforma
Moodle. IMPORTANTE: para esta práctica debe usarse la versión antigua (anterior a 2011)
del simulador SJM.
Teniendo en cuenta este planteamiento, a continuación se indican qué conguraciones de
jerarquías de memoria deben analizarse, y los resultados que deben obtenerse en cada caso.
Recordemos que con esta conguración (caché física) todas las direcciones virtuales
deben traducirse antes de acceder a caché, por lo que el tiempo medio de acceso a
memoria puede calcularse como:
35
Manual de laboratorio - Organización de Computadores
2. Teniendo en cuenta el resultado anterior, calcula teóricamente (es decir, sin usar el
simulador SJM) cuál debe ser el tiempo medio de traducción para que el tiempo
medio de acceso a memoria sea de 359.778 ciclos.
3. Teniendo en cuenta el resultado anterior, calcula teóricamente (es decir, sin usar el
simulador SJM) cuál debe ser la tasa de fallos en la tabla de páginas para obtener
ese tiempo medio de traducción.
2. Teniendo en cuenta lo anterior, intenta adivinar (es decir, sin usar el simulador
SJM) cuál sería ahora la tasa de fallos de la tabla de páginas.
3. Teniendo en cuenta las estimaciones anteriores, calcula teóricamente (es decir, sin
usar el simulador SJM) cuál sería ahora el nuevo tiempo medio de traducción y el
nuevo tiempo medio de acceso a memoria.
A continuación, y una vez congurada en SJM la jerarquía con el TLB, realiza una
simulación paso a paso hasta el nal usando la traza 4. Observa en cada paso la ventana
detallada de estado del TLB. Una vez completa la simulación, accede a la ventana de
estadísticas y contesta a las siguientes cuestiones:
36
Apéndice A
Lenguaje ensamblador del procesador MIPS
A.1. La arquitectura
Con el nombre de MIPS (siglas de Microprocessor without Interlocked Pipeline Stages ) se
conoce a toda una familia de microprocesadores de arquitectura RISC desarrollados por MIPS
Technologies. Debido a que los diseñadores crearon un conjunto de instrucciones tan claro, los
cursos sobre arquitectura de computadores en universidades y escuelas técnicas a menudo se
basan en la arquitectura MIPS. El diseño de la familia de CPU's MIPS inuiría de manera
importante en otras arquitecturas RISC posteriores como los DEC Alpha.
En 1981, un equipo liderado por John L. Hennessy en la Universidad de Stanford comenzó
a trabajar en lo que se convertiría en el primer procesador MIPS. La idea básica era mejorar
drásticamente el rendimiento mediante el uso de la segmentación, una técnica que ya era en-
tonces muy conocida pero también difícil de implementar. Su funcionamiento puede resumirse
en que la ejecución de una instrucción es dividida en varias etapas, comenzando la etapa 1
de una instrucción antes de que haya nalizado la ejecución de la instrucción anterior. En
contraste, los diseños tradicionales esperaban la nalización por completo de una instrucción
antes de pasar a la siguiente, de modo que grandes áreas de la CPU permanecían inactivas
mientras el proceso continuaba. Además, la frecuencia de reloj de toda la CPU venía dictada
por la latencia del ciclo completo, en lugar de por el llamado camino crítico, latencia de la
etapa de segmentación que más tarda en completarse.
En 1984 Hennessy se convenció del futuro potencial comercial del diseño, dejando Stanford
para formar MIPS Computer Systems. La empresa presentó su primer diseño, el R2000, en
1985, siendo mejorado con el R3000 de 1988. En 1991 MIPS presentó su primer procesador de
64 bits, el R4000. Desde entonces la empresa ha continuado sacando evoluciones muy utilizadas
en sistemas empotrados y como núcleos de otros sistemas más complejos.
La principales características de la arquitectura MIPS se resumen en la gura A.1 y son:
37
Manual de laboratorio - Organización de Computadores
A.2. Registros
El procesador MIPS tiene 32 registros de propósito general de tamaño una palabra (32
bits). En la gura A.2 se recogen los registros que incorpora el procesador MIPS.
La arquitectura MIPS soporta el estándar IEEE 754 que dene los formatos de simple
y doble precisión para números en coma otante.
La unidad de coma otante contiene sus propios registros, que se enumeran como f 0,f1,
f 2, ...,f31.
Como estos registros son de 32 bits, se necesitan dos de ellos para almacenar un valor
de 64 bits.
Para simplicar el diseño de la unidad, las instrucciones que operan sobre variables en
coma otante sólo pueden utilizar registros pares, incluyendo tanto instrucciones que
operan sobre números en doble precisión como en simple precisión.
38
Lenguaje ensamblador del procesador MIPS
A.4. La memoria
En el procesador MIPS la memoria está estructurada según el gráco mostrado en la gura
A.3. Las principales características son:
Los procesadores deben numerar los bytes dentro de una palabra. Existen dos posibli-
lidades: little endian (asignar la dirección más baja al byte de más a la derecha) o big
endian.
La arquitectura MIPS puede operar en cualquiera de los dos modos anteriores, depen-
diendo de la máquina en que se incluya el procesador.
39
Manual de laboratorio - Organización de Computadores
40
Lenguaje ensamblador del procesador MIPS
Casi todas las instrucciones de carga/almacenamiento operan sólo sobre datos alineados .
1
Directiva Descripción
.align n Alinea el siguiente dato sobre un límite de 2n byte (.align 2, .align 0.,..)
.ascii str Almacena la cadena str en memoria, pero no la termina con el caracter nulo.
.asciiz str Almacena la cadena str en memoria, y la termina con el caracter nulo.
.byte/half/word Almacena los n valores de 8/16/32 bits en bytes/medias palabras/palabras
b1, ..., bn consecutivas de memoria.
.double/oat Almacena los n números de punto otante de doble/simple precisión en
f1,....,fn posiciones consecutivas de memoria.
.data Los elementos siguientes son almacenados en el segmento de datos.
.kdata Los elementos siguientes son almacenados en el segmento de datos del núcleo.
.text Los elementos siguientes son almacenados en el segmento de texto. Estos
elementos sólo pueden ser instrucciones o palabras.
.ktext Los elementos siguientes son almacenados en el segmento de texto del núcleo.
Estos elementos sólo pueden ser instrucciones o palabras.
.space n Asigna n bytes de espacio en el segmento actual (debe ser seg. datos en SPIM)
Declara que el dato almacenado en sym ocupa size bytes y es un
.extern sym size global. El ensamblador lo pone en parte del segmento de datos
fácilmente accesible vía $gp
.globl sym Declara sym como global: se puede referenciar desde otros archivos.
1
Alineación: Una cantidad está alineada si su dirección de memoria es múltiplo de su tamaño en bytes.
41
Manual de laboratorio - Organización de Computadores
42
Lenguaje ensamblador del procesador MIPS
43
Manual de laboratorio - Organización de Computadores
44
Lenguaje ensamblador del procesador MIPS
2. Escribir los parámetros en los registros $4..$7 ($f2 si se usa coma otante)
li $v0, 10
syscall # exit
.data
str: .asciiz "Hello World!!!"
45
Manual de laboratorio - Organización de Computadores
Hacer una correspondencia entre los parámetros (registros) que tienen la información
que queremos utilizar y los parámetros formales que por convención utilicemos en este
mecanismo.
La información que describe el estado de una función durante su ejecución (los parámetros
que tenga en ese momento incluido la dirección del programa desde la que fue llamada, los
valores de sus variables locales, el puntero a la instrucción que se ejecuta en ese momento,
etc.) conforman lo que llamaremos el entorno de la función. En un programa de ensamblador
MIPS el entorno de una función viene dado por el valor de todos los registros a los que se hace
referencia en la función.
De forma genérica, justo antes de que una función A llame a una función B, ésta vuelca
todo su entorno en la pila y luego ya salta a la función B. Cuando la función B termina y
devuelve el control a la función A, ésta última recupera su entorno extrayéndolo de la pila.
Si bien las funciones de los procesadores MIPS pueden ejecutarse con cualquier registro,
los programadores y desarrolladores han llegado a una especie de convenio implícito para el
uso de los registros, de modo que el código que escriban sea compatible y respetuoso con el
de los demás en entornos de programación funcional con o sin sistema operativo. En la tabla
de la gura A.5 se recogen dichos convenios.
Siendo conservadores en la arquitectura de los procesadores MIPS esto puede realizarse
atendiendo a estas reglas:
• Pone los parámetros en los registros a0, a1, a2 y a3. Si hubiera más de tres pará-
metros, éstos se colocarían en la pila.
• Ejecutar jal (o jalr ) para llamar a la función (esta función se encarga de guardar
la posición del contador de programa en el registro 31 ra ).
2
Además, en aquella época se programaba casi todo en lenguajes de muy bajo nivel (ensabladores) depen-
dientes de la maquina y su arquitectura. De modo que la falta de lenguajes protables hacía que fuera necesario
reescribir todo el código cada vez que se cambiaba/actualizaba el hardware.
46
Lenguaje ensamblador del procesador MIPS
Figura A.5: Listado de registros en la arquitectura MIPS y la convención que se suele aplicar
a la hora de programar con subrutinas.
3
La función llamada , debe antes de ejecutar su código:
• Crear un marco de pila, restando el tamaño del marco de la posición del puntero
a pila (sp ). Date cuenta que el tamaño mínimo de marco en la arquitectura MIPS
es de 32 bytes, por tanto aún cuando el espacio de memoria que vayamos a utilizar
sea menor, deberíamos utilizar este tamaño.
• Guardar en la pila cualquiera de los registros que se deben preservar según la tabla
de arriba (s0 s7, fp y ra ), para evitar efectos colaterales con la función (o serie
de funciones) que ha/n dado lugar a la llamada. Preservar ra es especialmente
importante en funciones que se llaman a sí mismas (recursivas).
• Colocar el puntero de marco en la posición del puntero de pila más el tamaño del
mismo.
Antes de devolver el control y volver a la función que la llamó, la función invocada debe:
3
En el enunciado de esta práctica no se distingue entre el concepto de función y procedimiento, aunque la
distinción implique ciertas diferencias.
47
Manual de laboratorio - Organización de Computadores
48
Apéndice B
Simula3MS
En este manual se explica como utilizar Simula3MS. En la sección B.1 se enumeran los
pasos básicos para usar la herramienta. A continuación se describen de forma más detallada
la edición de programas en lenguaje ensamblador para este procesador, los distintos elementos
del simulador: el segmento de texto, el segmento de datos, los registros, etc. así como las
distintas conguraciones.
2. Una vez editado o cargado el chero, el siguiente paso es ensamblarlo, para ello hay que
pulsar el botón Ensamblar. A partir de aquí hay dos posibles resultados:
3. El paso siguiente, previo a ejecutar, será escoger la conguración del simulador sobre la
que queremos que se ejecute el código. Para ello, en el menú Conguración tenemos tres
posibles opciones: Entrada/Salida, Camino de datos y Técnicas de salto. Por defecto la
opción activada es el camino de datos Monociclo con la Entrada/Salida deshabilitada.
49
Manual de laboratorio - Organización de Computadores
Los comentarios empiezan por el símbolo #, todo lo que aparezca en la misma línea a
continuación de este símbolo es ignorado.
• .text: sección obligatoria en todos los programas, contiene el conjunto de las ins-
trucciones del programa.
Características de .text
La sección .text es obligatoria en todos los programas, contiene el conjunto de instrucciones
del programa. Los elementos siguientes se guardan en el segmento de texto.
Las primeras líneas de la sección .text, obligatorias ya que indican al simulador donde debe
empezar la ejecución del programa, son:
.globl main
.main:
A continuación se escribe el código del programa, siguiendo estas reglas:
Las etiquetas van seguidas por dos puntos (:). Una etiqueta válida es una secuencia de
caracteres alfanuméricos, subrayados (_) y puntos (.).
50
Simula3MS
51
Manual de laboratorio - Organización de Computadores
Los registros enteros pueden indicarse por su número de orden o por su nombre, por
ejemplo $t1=$9. Las equivalencias se muestran en el cuadro B.9. En el caso de los regis-
tros de punto otante, también se permiten ambas nomenclaturas pero la equivalencia
se limita a suprimir la f. Ejemplo: $f6=$6.
Se pueden incluir llamadas al sistema operativo (syscall ), para solicitar algún servicio
como impresión por pantalla, ver sección B.5.
Con el objetivo de ayudar al usuario a cargar variables, Simula3MS tiene también im-
plementadas las pseudoinstrucciones la y li. Por ejemplo:
la $1, variable
carga en el registro $1 la dirección de memoria donde está almacenada la variable. La
ejecución de está pseudoinstrucción se divide en dos instrucciones:
lui $1, 0x1001 (representa los 16 bits de mayor peso de la dirección de memoria)
Características de .data
La sección .data contiene la declaración de las variables del programa. Los elementos
siguientes se guardan en el segmento de datos, en concreto en la memoria. Esta sección es
opcional.
La declaración de las variables del programa se ajusta a las siguientes reglas:
Los números se consideran en base 10 por defecto. Si van precedidos del prejo 0x se
interpretan en hexadecimal.
Ensamblar
Una vez editado o cargado el código del programa es necesario ensamblarlo, para ello
se utiliza el botón Ensamblar. Si el código es sintácticamente correcto se activará el botón
Ejecutar y se puede avanzar a la simulación del programa, si no es necesario corregir el
código teniendo en cuenta los errores. Para facilitar esta tarea podemos ayudarnos del botón
ErrorSiguiente que, como su nombre indica, avanza al siguiente error de forma cómoda.
52
Simula3MS
53
Manual de laboratorio - Organización de Computadores
la constante
andi El registro $1 tiene el resultado de una operación AND entre $2 andi $1, $2, constante
y la constante
ori El registro $1 tiene el resultado de una operación OR entre $2 y ori $1, $2, constante
la constante
slti Almacena en $1 un 1 si el valor registro $2 es menor que el de la slti $1, $2, constante
lui Carga la constante en los 16 bits más signicativos del registro $1 lui $1, constante
en $1.
beq Si el valor de $1 y $2 es igual se modica el valor del PC para beq $1, $2, etiqueta.
bne Si el valor de $1 y $2 no es igual se modica el valor del PC para bne $1, $2, etiqueta.
jal Modica el valor del PC por aquel al que apun- jal etiqueta
PC en $ra
54
Simula3MS
55
Manual de laboratorio - Organización de Computadores
56
Simula3MS
57
Manual de laboratorio - Organización de Computadores
Registros especiales:
• PC es el contador del programa (program couter ). Este registro se inicializa por el
sistema operativo apuntando a la dirección de la primera instrucción del programa
en memoria. Al cargar cualquier instrucción de memoria el PC se incrementa de
forma que la CPU tendrá el valor de la dirección de la siguiente instrucción que va
a ser cargada.
• EPC, Cause, Status y BadVaddr son registros utilizados para el manejo de instruc-
ciones e interrupciones.
58
Simula3MS
◦ El registro Status se usa como condición de salto en las instrucciones bc1t y bc1f.
En la Entrada/Salida con interrupciones almacena la máscara de interrupciones
y los bits de autorización.
Registros de punto otante: La arquitectura MIPS R2000 (que simula esta herra-
mienta) no dispone de unidad de punto otante incluida en el microprocesador si no que
implementa estas funciones en coprocesadores separados. La arquitectura MIPS tiene
en cada coprocesador 32 registros de 32 bits para punto otante ($f0-$f31), que pueden
ser organizados en 16 registros de doble precisión, con 64 bits (para ello se toman las
designaciones par de los registros).
60
Simula3MS
B.4. Memoria
Simula3MS divide la memoria en cuatro partes.
• Inmediatamente después de los datos estáticos están los datos dinámicos. Como su
nombre indica, estos datos son reservados por el programa durante su ejecución.
Como el compilador no puede predecir cuánta memoria va a reservar un programa
el sistema operativo extiende el área de datos dinámicos para satisfacer la demanda.
La tercera parte, la pila del programa reside en el extremo superior del espacio de
direcciones virtual, situado en la dirección 0x70000000. El tamaño máximo de la pila
que usará un programa no se puede conocer previamente, por lo tanto es necesario que
el usuario desplace el puntero de pila hacia abajo antes de insertar nuevos elementos.
Esta división de la memoria no es la única posible. De todos modos, tiene como caracte-
rística más importante que la pila y la memoria están lo más alejadas posibles, de forma que
la pila puede crecer hasta ocupar el espacio de direcciones del programa por entero.
61
Manual de laboratorio - Organización de Computadores
62
Simula3MS
devuelven valores ponen sus resultados en el registro $v0 (o $f0 para resultados de punto
otante).
Existen llamadas al sistema para salida de datos:
print_double hace lo mismo que print_oat pero permite un rango más amplio de
números en punto otante.
También hay llamadas al sistema para entrada de datos, estos datos se solicitan al usuario
a través de diálogos. Son:
Otra llamada al sistema muy utilizada es exit utilizada para indicar al procesador que se
ha terminado la ejecución del programa.
63
Manual de laboratorio - Organización de Computadores
64
Simula3MS
La mayoría de las instrucciones de punto otante usan un camino de datos que substituye
la ALU por una FPU (Floating Point Unit) y los registros enteros por los de punto otante.
Este modelo incluye además la representación del registro especial Status (ver gura B.4).
Por último, existe un modelo híbrido de los dos. Se trata de un camino de datos con una
ALU y un banco de registros enteros, pero incluyendo el registro Status (con sus líneas de
control correspondientes) y unas líneas que nos indican cuando leer o escribir en un registro
65
Manual de laboratorio - Organización de Computadores
de punto otante. Este modelo (gura B.5) es necesario en instrucciones de punto otan-
te que operen con ambos tipos de registros, como pueden ser las instrucciones de carga o
almacenamiento de punto otante.
El funcionamiento de los botones de esta herramienta es el siguiente:
Volver al editor. En el caso de que se produzca algún error en ejecución será el único botón
que permanecerá activado.
Ejecutar. Ejecuta la totalidad del código, a menos que se haya insertado un punto de ruptura
en cuyo caso se ejecutará hasta ese punto.
Breakpoint. Si el botón de selección correspondiente está activado se despliega una lista con
los PCs comprendidos entre el de la instrucción que en ese momento se está ejecutando
y el último. La identicación de las instrucciones por medio de su PC correspondiente
no resulta complicado, ya que en el segmento de texto ambos aparecen relacionados.
Ciclos Contador del número de ciclos que ha consumido la ejecución de las instrucciones
hasta ese momento.
Paso siguiente. Sitúa la ejecución en el último ciclo de la instrucción actual. Si ésta instruc-
ción está en el último ciclo avanza hasta el último de la instrucción siguiente.
66
Simula3MS
Los riesgos WAW se gestionan con la técnica de detección. Si una instrucción va a alcanzar
la etapa WB antes que otra instrucción previa que tiene el mismo registro destino, se
detiene la primera en la última etapa de EX hasta que la anterior avance a la etapa
MEM.
Los riesgos de postescritura aparecen cuando dos instrucciones en punto otante al-
canzan la etapa WB en el mismo ciclo de reloj. Para gestionarlos, cuando dos o más
instrucciones en punto otante alcanzan la última etapa de ejecución en el mismo ciclo
de reloj son detenidas, a excepción de aquélla que está en la unidad funcional de mayor
latencia.
Antes de realizar una llamada al sistema el procesador espera a que el cauce se vacíe. Se
ha considerado que la ejecución de una llamada al sistema consume un ciclo de reloj y
no se contabilizan los ciclos que consume el SO al realizar el servicio requerido. Después
de una llamada al sistema se sigue ejecutando el resto del código secuencialmente.
68
Simula3MS
Se usa este tipo de diagrama para mostrar con más detalle que está ocurriendo en
el procesador durante cada ciclo del reloj, ver gura B.7.
• Diagrama multiciclo (gura B.9): se utiliza para dar una perspectiva general de
diferentes situaciones dentro de la segmentación. Muestra la evolución de todas las
instrucciones que están en ese momento en el cauce hasta el ciclo actual de ejecución.
Se considera que el tiempo avanza de izquierda a derecha y las instrucciones se
colocan siguiendo el orden de las etapas del cauce.
Los saltos enteros se deciden en la segunda etapa, pero los saltos en punto otante se
deciden en la etapa de ejecución correspondiente a cada una de las técnicas. La ejecución
de un salto en punto otante supone la detención de todo el procesador hasta que éste se
haya resuelto, mientras que la ejecución de un salto entero sólo detendrá el co-procesador
otante.
69
Manual de laboratorio - Organización de Computadores
Figura B.7: Diagrama ”camino de datos” para un solo ciclo de ejecución en procesador seg-
mentado
70
Simula3MS
71
Figura B.8: Diagrama monociclo de la ejecución en procesador segmentado
Manual de laboratorio - Organización de Computadores
72
Figura B.9: Diagrama que muestra multiples ciclos en un procesador segmentado
Simula3MS
Informe
Estas técnicas ofrecen la posibilidad de generar un informe (ver Figura B.10) que resume
las características más relevantes de la ejecución de ese código.
Técnica de Marcador
La representación especíca de la técnica de Marcador consta de tres tablas, como se puede
ver en la Figura B.11. En la primera de ellas es la tabla de las instrucciones y se muestra la
etapa en la que se encuentra actualmente cada una de las instrucciones.
73
Manual de laboratorio - Organización de Computadores
La última tabla es una representación de los registros en punto otante e indica si alguno
de ellos va a ser escrito por una instrucción que se encuentre actualmente en ejecución.
Técnica de Tomasulo
Al igual que la técnica de Marcador, ésta también se representa con tres tablas (ver Figura
B.12). A pesar de que la implementación del algoritmo de Tomasulo no incluye la representa-
ción de la información en tablas, aquí se añade de todas formas debido a que la información
que muestran sobre el estado actual de cada una de las instrucciones, las estaciones de reserva
y registros resultado es muy útil para seguir la ejecución de un código. La primera tabla es
la tabla de instrucciones, similar a la que se usa en el caso del Marcador, con la excepcion de
que en este caso hay sólo tres pasos en la ejecución.
La segunda tabla se corresponde con las estaciones de reserva. Aquí se incluyen también
los buers de carga y almacenamiento, ya que aunque su funcionamiento no es igual que el de
las estaciones de reserva, es bastante similar.
Al igual que las unidades funcionales su estado variará en función de la instrucción que
está ocupándola. La principal diferencia con las unidades funcionales de Marcador, es que aquí
sólo puede estar en ejecución una estación de reserva de cada tipo.
Las tablas de los registros indica cuales de ellos son el registro destino de alguna estación
74
Simula3MS
de reserva.
Por último, destacar que aunque en el informe asociado a esta técnica no aparecen nunca
reejados riesgos WAW, ya que sólo se producen cuando existen problemas de accesos ambiguos
a memoria (varios registros diferentes apuntan a la misma dirección), estos si están controlados
y se producirán detenciones en las estaciones de reservas correspondientes cuando se detecte
alguno.
75
Manual de laboratorio - Organización de Computadores
76
Apéndice C
SJM
77
Manual de laboratorio - Organización de Computadores
Ésta será la ventana que controlará la simulación, así como en la que se irá mostrando
el progreso de la misma. Ahora bien, en el momento de ejecutar el simulador, esta ventana
aparece deshabilitada, de forma que no se puede tener acceso a ninguno de sus elementos.
Para realizar una simulación, y por tanto para que se habiliten los elementos de la ventana
principal, son imprescindibles dos pasos previos (que pueden realizarse en cualquier orden):
En las subsecciones C.1.1 y C.1.2 se indica respectivamente cómo realizar estos pasos
previos, y a continuación se indica cómo lanzar las simulaciones (subsección C.1.3) y cómo se
reejan los resultados de las mismas (subsección C.1.4).
El simulador SJM no permite denir desde dentro la traza de memoria que se modelará
para una simulación, sino que es necesario cargar un archivo que contenga la traza (el formato
de estos archivos se indica más adelante). Para cargar un archivo de accesos, se emplea la
opción Abrir chero de accesos a memoria en el menú Archivo (gura C.2).
Si se selecciona esta opción en el menú, se mostrará una ventana contextual que permitirá
seleccionar un archivo de entrada de la forma habitual en los exploradores de archivos. Una
vez cargada la traza, cada uno de los accesos a memoria se mostrará en el panel de accesos
de memoria de la ventana principal (gura C.3), y esta parte de la ventana principal quedará
habilitada.
Más en detalle, esta tabla nos informa sobre el tipo de acceso (instrucción, lectura de datos
o escritura) y la dirección correspondiente a cada acceso. Durante la simulación, esta tabla
informa sobre el próximo acceso que se va a realizar.
78
SJM
tipo-acceso1 dirección-acceso1
tipo-acceso2 dirección-acceso2
tipo-acceso3 dirección-acceso3
...... ......
tipo-acceson−1 dirección-acceson−1
tipo-acceson dirección-acceson
En cada línea, el tipo de acceso debe indicarse mediante un número del 0 al 2, de acuerdo
con la siguiente codicación:
0 Lectura de datos.
1 Escritura de datos.
2 Extracción de instrucción.
79
Manual de laboratorio - Organización de Computadores
Una vez escogida dicha opción en el menú, aparece la ventana de conguración. En ella
siempre se muestra un círculo rojo con una P en su interior, que representa al procesador, y
un rectángulo amarillo que representa a la memoria principal. Se pueden añadir elementos a
la jerarquía pulsando sobre los botones que hay a la derecha. De esta forma se pueden añadir
hasta 4 niveles de memoria caché, un TLB, que podrá ser unicado, de datos o instrucciones,
y una tabla de páginas. La inclusión de ciertos elementos hace obligatoria la inserción de otros
(por ejemplo un TLB necesita una tabla de páginas), aunque hay ciertas combinaciones que
son opcionales.
La representación gráca de la jerarquía en esta ventana dependerá de la conguración
escogida. A continuación se muestran dos conguraciones de jerarquía de memoria. La primera
de ellas (gura C.5) es la más sencilla: existe una única caché unicada y no hay memoria
virtual. La segunda (gura C.6) es más compleja e incluye dos niveles de caché (separado el
primero para instrucciones y datos), tabla de páginas y TLB.
Pulsando sobre cualquier elemento de la ventana de conguración, excepto en el procesador,
se puede acceder a una ventana contextual que permite congurar ciertos parámetros, según el
elemento. La gura C.7 muestra la ventana de parámetros de la caché. Dentro de esta ventana
se pueden congurar todos los datos para una caché: asociatividad, algoritmos, políticas de
búsqueda, políticas de escritura, tiempo de acceso y tipo de caché.
La opción de conguración de tipo de caché sólo aparece en la conguración de caché de
nivel 1 (como es el caso de la gura C.7). Esta opción determina la forma en que se va a
acceder a la caché: caché física, caché virtualmente indexada y físicamente etiquetada, ó caché
virtual. Según este tipo de acceso la forma de mostrar la jerarquía en esta ventana cambiará.
80
SJM
81
Manual de laboratorio - Organización de Computadores
Figura C.8: Ventana de conguración para una caché separada y con distintos tipos de acceso.
82
SJM
Además, en el caso de una caché separada (datos e instrucciones) con distintos tipos
de acceso en las dos partes, se mostrarán ambos tipos de acceso mediante una opción que
aparecerá en la ventana de conguración (gura C.8).
Un TLB necesita (gura C.10), además del tiempo de acceso, el número de entradas y
determinar su tipo, esto es, si se accede de forma separada para datos e instrucciones o si
se considera un único TLB tanto para datos como instrucciones. Si se selecciona la primera
opción, la ventana cambia (gura C.11), permitiendo congurar separadamente el tiempo de
acceso y el número de entradas.
83
Manual de laboratorio - Organización de Computadores
84
SJM
(a) (b)
85
Manual de laboratorio - Organización de Computadores
Seleccionando con el ratón cualquiera de las cachés aparecerá una ventana otante que
muestra, de forma más detallada, su estado en cada momento (gura C.15). Nótese que en
esta ventana detallada se muestra el formato de dirección para operar con la caché, esto es,
se indica cuáles son los campos etiqueta, índice y desplazamiento (gura C.16).
Por su parte, el TLB (gura C.17) y la tabla de páginas (gura C.18) se muestran en
forma de tabla en la zona central de la ventana principal. En dichas tablas, además de la
correspondencia entre página virtual y física, se indica el valor de los bits de validez y suciedad
y el valor del contador mediante el que se implementa el algoritmo de reemplazo LRU.
86
SJM
Las direcciones física (gura C.19) y virtual (gura C.20) con las que se está trabajando en
un momento dado se muestran (en formato página + desplazamiento) respectivamente bajo el
panel de tabla de páginas y sobre el panel TLB. En el caso de que no se use memoria virtual,
la parte de la dirección correspondiente a las páginas aparecerá en blanco. Esta vista también
recoge en todo momento los ciclos de simulación consumidos (gura C.21).
87
Manual de laboratorio - Organización de Computadores
En esta ventana, para cada elemento de la jerarquía de memoria se muestran las métricas
habitualmente empleadas: tasa de aciertos y fallos, tiempos medios de acceso, etc. Nótese que
la información sobre aciertos y fallos aparece desglosada según los tipos de accesos de la traza
(fallos de lecturas, escrituras, etc.).
Además, desde la ventana de estadísticas se permite guardar o imprimir el informe completo
de estadísticas. Para estas opciones existen sendos iconos dentro de la propia ventana de
estadísticas.
88
SJM
físicamente etiquetada
Tabla C.2: Parámetros que permite manipular SJM y rango de valores de los mismos.
89
Manual de laboratorio - Organización de Computadores
C.2.3. Ayuda
Por último, cabe mencionar que, para facilitar el manejo del simulador, se dispone de un
menú Ayuda, además de la existencia de ventanas contextuales de ayuda, de forma que el
usuario pueda resolver rápidamente sus dudas.
90