Examen: 2025_06_17:GISAM - myTeachingURJC/Arq-computadores-01 GitHub Wiki
Examen convocatoria Extraordinaria: 2025-06-17. GISAM
- Tiempo: 2h
- Tipo de examen: Presencial. Realizado a través de Aula Virtual. Acceso a la wiki (internet)
- Objetivo:
- Resolver el problema de examen de la convocatoria extraordinaria, con fecha 2025/Junio/17
Contenido
Enunciado
El examen se ha realizado a través de Aula virtual
Problema 1 (2.5 ptos): Rendimiento
Una empresa quiere mejorar el rendimiento de una aplicación robótica, que se ejecuta en un computador empotrado con procesador RISCV que funciona a la frecuencia de 1Ghz.
Por especificaciones de la empresa, el computador no se puede cambiar. Por tanto, habrá que mejorar el rendimiento cambiando el compilador. Para ello vamos a evaluar los compiladores A y B
El fabricante del procesador nos proporciona información sobre los CPIs de las instrucciones, que se dividen en 3 grupos: Instrucciones de tipo 1, 2 y 3
Instrucción | CPI |
---|---|
Tipo 1 | 1.2 |
Tipo 2 | 2 |
Tipo 3 | 1 |
La aplicación se compila con ambos compiladoras A y B. En esta tabla se resume el resultado de los programas ejecutables generados con cada compilador, desglosados en sus tipos de instrucciones
Compilador | Instrucciones totales | Tipo 1 | Tipo 2 | Tipo 3 |
---|---|---|---|---|
A | 5000 | 1500 | 1500 | 2000 |
B | 6000 | 1200 | 1800 | 3000 |
Se pide:
a) (0.5 pto). ¿Cuantos ciclos tarda en ejecutarse la aplicación cuando se usa el compilador A? b) (0.5 pto). ¿Cuanto tiempo tarda la aplicación cuando se usa el compilador A? c) (0.5 pto). ¿Cuantos ciclos tarda en ejecutarse la aplicación cuando se usa el compilador B? d) (0.5 pto). ¿Cuanto tiempo tarda la aplicación cuando se usa el compilador B? e) (0.5 pto). Calcula el rendimiento rel
Problema 2 (2.5 ptos): Ordenacion/alineaiento/direccionamiento
Tenemos un computador de 32-bits que dispone de 8 registros de propósito general (a0-a7). La anchura de la memoria es de 32-bits. La ordenación que usa es Little-endian. Para acceder a los datos de la memoria utiliza un direccionamiento directo. Puede acceder tanto a datos alineados como no alineados. Estas son algunas de las instrucciones disponibles:
lb rd, dir
: Leer el byte que hay en la dirección dir y guardarlo en el registro rdlh rd, dir
: Leer la media palabra que hay en la dirección dir y guardarla en el registro rdlw rd, dir
: Leer la palabra que hay en la dirección dir y guardarla en el registro rd
Este es el contenido de la memoria, a partir de la dirección 0xF000F000. Todos los valores están en hexadecimal
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0xF000F000 | 10 | 21 | 32 | 43 | 54 | 65 | 76 | 87 | 98 | A9 | BA | CB | DC | ED | FE | 0F |
0xF000F010 | 50 | 60 | 70 | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 | 00 | 20 | 30 | 40 | 50 |
Resuelve los siguientes apartados, calculando el resultado y justificando cómo lo has obtenido
a) (0.5 ptos) Indica el valor de los registros a1 y a2 al ejecutar estas instrucciones
lb a1, 0xF000F00A
lb a2, 0xF000F01A
b) (0.5 ptos) Indica el valor de los registros a3 y a4 al ejecutar estas instrucciones
lh a3, 0xF0000F000
lh a4, 0xF0000F010
c) (0.5 ptos) Indica el valor de los registros a5 y a6 al ejecutar estas instrucciones
lw a5, 0xF0000F000
lw a6, 0xF0000F00E
d) (0.5 ptos) Indica el número de accesos a memoria de esta instrucción para leer el dato
lb a1, 0xF000F00A
e) (0.5 ptos) Indica el número de accesos a memoria de esta instrucción para leer el dato
lw a6, 0xF0000F00E
Pregunta 3 (2.5 Puntos): Circuitos lógicos
Tenemos el siguiente circuito digital
Responde a las siguientes preguntas:
a) (0.5 ptos) Indica cuál es la parte combinacional de este circuito y qué retardo tiene
b) (0.5 ptos) Indica cuál es la parte secuencial de este circuito y qué retardo tiene
c) (0.5 ptos) Indica el retardo total del circuito completo
d) (0.5 ptos) Calcula la frecuencia máxima de funcionamiento de este circuito
e) (0.5 ptos) Si inicialmente el registro tiene un valor de 3, y la señal write
tiene un valor de 1 (ciclo 0), indica el valor de la señal Q
durante los 3 siguientes ciclos de reloj (ciclos 1, 2 y 3)
Problema 4 (2.5 ptos): Computador nanoRiscV
Tenemos un computador nano-RISCV como el mostrado en la siguiente figura
El cable de bus Addr que conecta con la memoria RAM añade un retardo de 2ns, debido a un defecto en su fabricación. En el esquemático se ha indicado con el componente rojo R. Los retardos introducidos por el resto de componentes se describen a continuación:
- Memoria ROM: 20ns
- Memoria RAM: 8ns de lectura, y 7ns de escritura
- Fase de decodificación: Retardo de 6ns
- Fase de ejecución: 10ns
- Fase de Write-back: 0 ns
El resto de retardos se consideran despreciables (0 ns)
Se pide:
a) (0.5 pto) Calcula el retardo de la fase de Fetch
b) (0.5 pto) Calcula el tiempo que tarda la instrucción and t0,t1,t2
c) (0.5 pto) Calcula el tiempo que tarda la instrucción ld a5,0(zero)
d) (0.5 pto) Calcula la frecuencia máxima de funcionamiento de este computador
e) (0.5 pto) Si ahora arreglamos el error del cable de manera que no introduzca ningún retraso, ¿Cual sería la nueva frecuencia de funcionamiento?
Solución al examen
Problema 1 (2.5 ptos): Rendimiento
a) (0.5 pto). ¿Cuantos ciclos tarda en ejecutarse la aplicación cuando se usa el compilador A?
Cada grupo de instrucción de un tipo dado tardará en total: I * CPI ciclos. Sumando todos los ciclos obtenemos el total:
Ciclos totales = ciclos instrucciones tipo 1 + ciclos instrucciones tipo 2 + ciclos instrucciones tipo 3 =
I1 * CPI1 + I2 * CPI2 + I3 * CPI3 = 1500 * 1.2 + 1500 * 2 + 2000 * 1 = 6800 Ciclos
La aplicación tarda 6800 ciclos cuando se usa el compilador A
b) (0.5 pto). ¿Cuanto tiempo tarda la aplicación cuando se usa el compilador A?
La frecuencia del procesador es F = 1Ghz
El tiempo será: Tcpu = Ciclos / F = 6800 / 1Ghz = 6800 ns = 6.8µs
La aplicación tarda 6.8µs en ejecutarse cuando se usa el compilador A
c) (0.5 pto). ¿Cuantos ciclos tarda en ejecutarse la aplicación cuando se usa el compilador B?
El cálculo es el mismo que para el apartado 1:
Ciclos totales = 1200 * 1.2 + 1800 * 2 + 3000 * 1 = 8040 Ciclos
La aplicación tarda 8040 ciclos cuando se usa el compilador B
d) (0.5 pto). ¿Cuanto tiempo tarda la aplicación cuando se usa el compilador B?
Tcpu = Ciclos / F = 8040 / 1 Ghz = 8040 ns = 8.04µs
e) (0.5 pto). Calcula el rendimiento relativo. ¿Qué compilador elegirías?
Rendimiento relativo n = Rendimiento A / Rendimiento B = 8.04µs / 6.8µs = 1.18 (aprox)
El compilador A genera un código que es 1.18 veces más rápido que el generado por el compilador B. Por tanto, elegiría el Compilador A
Problema 2 (2.5 ptos): Ordenacion/alineaiento/direccionamiento
a)
En ambas instrucciones se lee un byte, por lo que no afecta el tipo de ordenación. Los valores de los registros son:
- a1 = 0xBA (Byte en la posición 0xF000F00A)
- a2 = 0xF0 (Byte en la posicion 0xF000F01A)
b)
En estas instrucciones se leen medias palabras (2 bytes), por lo que la ordenación sí afecta. Como es Little endian, el byte situado en la dirección menor será el de menor peso
- a3 = 0x2110 (Media palabra a partir de la dirección 0xF000F000, con ordenación little endian)
- a4 = 0x6050 (Media palabra a partir de la dirección 0xF000F010, con ordenación little endian)
c)
En estas instrucciones se leen palabras (4 bytes), por lo que la ordenación sí afecta. Como es Little endian, el byte situado en la dirección menor será el de menor peso
- a5 = 0x43322110 (Palabra a partir de la dirección 0xF000F000, con ordenación little endian)
- a6 = 0x60500FFE (Palabra a partir de la dirección 0xF000F00E, con ordenación little endian)
d)
Como se trata de la lectura de 1 byte, el concepto de alineación no afecta. Sólo se necesita 1 acceso para leer este byte
e)
La instrucción lee una palabra (4 bytes). Pero como la dirección NO está alineada, hay que realizar 2 accesos a memoria. Uno para leer la palabra situada en la dirección alineada anterior (0xF000F00C), y otro para leer la palabra en la dirección alineada posterior (0xF000F010)
Pregunta 3 (2.5 Puntos): Circuitos lógicos
a) Este cicuito está formado por dos elementos: un registro de 8 bits (secuencial) y un sumador de 2 operandos de 8 bits (combinacional). La parte combinacional es este circuito sumador, que tiene un retardo de 4 ns
b) La parte secuencial del circuito es el registro de 8 bits, que tiene un retardo de 8 ns
c) Se trata de la conexión en cascada de un circuito secuencial con otro combinacional, por tanto el retardo total es la suma de ambos retardos: 8 ns + 4 ns = 12 ns
d) La frecuencia máxima de este circuito es la inversa del retardo mínimo del circuito, calculado en el apartado anterior. Fmax = 1 / Tmin = 1 / 12 ns = 83.3 Mhz (aprox.)
e) En el ciclo 0, la señal Q vale 1, y el valor el registro es de 3 (situación inicial). El valor en el siguiente ciclo (ciclo 1) será el valor del contador en el ciclo 0 (0) al que se le suma 3. Como write está a '1', este valor se captura en el siguiente ciclo. Esto se repite en el resto de ciclos obteniéndose una de cuenta de 3 en 3: 3, 6, 9, 12...
Por tanto, en los ciclos 1,2 y 3, el valor de out será de 6, 9 y 12 respectivamente
Problema 4 (2.5 ptos): Computador nanoRiscV
a) Puesto que el retardo del PC es despreciable (0ns), la fase de fetch está determinada por el retardo de la memoria ROM: 20ns
- Retardo de Fetch: 20 ns
b) La instrucción and
NO accede a memoria por lo que el tiempo de la fase de acceso a memoria es de 0 ns. En la fase de ejecutación tarda 10ms (según especificaciones). Sumando los retardos de todas las fases obtenemos:
- Retardo de and: Retardo Fetch + Retardo decodificación + retardo ejecución + retardo acceso memoria + retardo write back = 20 + 6 + 10 + 0 + 0 = 36ns
c) La instrucción ld tarda los siguientes tiempos en las fases:
- Fetch: 20
- Decodificación: 6
- Ejecución: 10
- Acceso memoria: 8 (lectura ram) + 2ns (fallo cable) = 10ns
- Write-back: 0ns
El retardo del bus Addr influye sólo en el acceso a memoria, por lo que el retardo es el de la RAM + 2ns = 10ns
- Retardo de ld: 20 + 6 + 10 + 10 + 0 = 46ns
d) Para calcular la frecuencia máxima de funcionamiento hay que encontrar el caso peor. La fase de Fetch es la misma para todas las instrucciones. El retardo de la decodificación está fijado a 6ns. Y La fase de ejecución a 10.
El caso pero, por tanto, es la instrucción de load (ld), que además de los tiempos anteriores añade el acceso a memoria: 10ns (contando con el fallo del cable)
Por tanto, El periodo mínimo del reloj es de 46ns. Lo que nos da una frecuencia máxima de: 1 / 70ns = 21.7 Mhz (aprox)
e) En este caso se ve afectado sólo el ciclo de acceso a memoria, que pasaría a ser de 8 ns. El caso peor sigue siendo la instrucción de load que ahora tendrá un retardo de 20 + 6 + 10 + 8 + 0 = 44ns.
La nueva frecuencia de funcionamiento es de 1 / 44ns = 22.7 Mhz (aprox)
Autor
- Juan González-Gómez (Obijuan)