Content is user-generated and unverified.

Examen Parcial 2 - IC3101 Arquitectura de Computadoras

Análisis del Sistema

Especificaciones:

  • RAM: 4GB
  • Cache de datos: 2MB, frames de 16B, 4-way set associative
  • Cache de instrucciones: 4MB, frames de 16B, 4-way set associative
  • Dirección base datos: B4A13400
  • Dirección base instrucciones: 813AF500
  • Pipeline: 7 etapas (E1-E7)
  • Procesador: ARM v7

Pregunta 1: ¿En cuáles conjuntos de cache se guardan los datos?

Cálculo para Cache de Datos:

  • Tamaño total: 2MB = 2²¹ bytes
  • Tamaño de frame: 16B = 2⁴ bytes
  • Associativity: 4-way
  • Número de sets: (2²¹ / 2⁴) / 4 = 2¹⁵ sets = 32,768 sets

Estructura de dirección:

  • Offset: 4 bits (bits 0-3)
  • Index: 15 bits (bits 4-18)
  • Tag: 13 bits (bits 19-31)

Direcciones de variables:

  • a: B4A13400
  • b: B4A13404 (siguiente word)
  • adr_var_a: B4A13408
  • adr_var_b: B4A1340C

Cálculo del conjunto:

B4A13400₁₆ = 10110100101000010011010000000000₂

Index (bits 4-18): 001001101000000₂ = 1340₁₆ = 4928₁₀

Respuesta: Todas las variables de datos se almacenan en el conjunto 4928 (0x1340).


Pregunta 2: ¿En cuáles conjuntos de cache se guardan las instrucciones?

Cálculo para Cache de Instrucciones:

  • Tamaño total: 4MB = 2²² bytes
  • Número de sets: (2²² / 2⁴) / 4 = 2¹⁶ sets = 65,536 sets

Estructura de dirección:

  • Offset: 4 bits (bits 0-3)
  • Index: 16 bits (bits 4-19)
  • Tag: 12 bits (bits 20-31)

Direcciones de instrucciones:

  1. ldr r0,adr_var_a → 813AF500
  2. ldr r1, [r0] → 813AF504
  3. add r1,r1,#1 → 813AF508
  4. cmp r1,#7 → 813AF50C
  5. ble ciclo → 813AF510
  6. ldr r0,adr_var_b → 813AF514
  7. str r1,[r0] → 813AF518

Cálculo de conjuntos:

813AF500₁₆: Index = AF50₁₆ = 44880₁₀
813AF504₁₆: Index = AF50₁₆ = 44880₁₀
813AF508₁₆: Index = AF50₁₆ = 44880₁₀
813AF50C₁₆: Index = AF50₁₆ = 44880₁₀
813AF510₁₆: Index = AF51₁₆ = 44881₁₀
813AF514₁₆: Index = AF51₁₆ = 44881₁₀
813AF518₁₆: Index = AF51₁₆ = 44881₁₀

Respuesta: Las instrucciones se almacenan en los conjuntos 44880 (0xAF50) y 44881 (0xAF51).


Pregunta 3: Diagrama de tiempo de ejecución

Análisis del programa:

El loop se ejecuta mientras r1 ≤ 7. Iniciando con r1=5:

  • Iteración 1: r1 = 6, 6 ≤ 7 → branch tomado
  • Iteración 2: r1 = 7, 7 ≤ 7 → branch tomado
  • Iteración 3: r1 = 8, 8 ≤ 7 → branch no tomado

Data Hazards identificados:

  • RAW: ldr r0 → ldr r1, [r0] (3 ciclos de stall)
  • RAW: add r1 → cmp r1 (3 ciclos de stall)
  • RAW: cmp → ble (3 ciclos de stall)

Branch Prediction:

  • ble ciclo es hacia atrás → predecido como tomado
  • Predicción correcta en iteraciones 1 y 2
  • Predicción incorrecta en iteración 3 → 1 ciclo de penalty

Diagrama simplificado (ciclos clave):

Ciclo:  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 ...
I1:    E1 E2 E3 E4 E5 E6 E7
I2:       E1 -- -- -- E2 E3 E4 E5 E6 E7           [stall por RAW]
I3:                      E1 E2 E3 E4 E5 E6 E7
I4:                         E1 -- -- -- E2 E3 E4 E5 E6 E7  [stall por RAW]
I5:                                     E1 -- -- -- E2 E3 E4 E5 E6 E7 [stall por RAW]

Pregunta 4: Duración promedio de instrucción

Conteo de instrucciones ejecutadas:

  • Instrucciones iniciales: 2
  • Loop (3 iteraciones): 3 × 3 = 9 instrucciones
  • Instrucciones finales: 2
  • Total: 13 instrucciones

Conteo de ciclos totales:

  • Instrucciones base: 7 ciclos cada una
  • Stalls por data hazards: 27 ciclos
  • Branch misprediction penalty: 1 ciclo
  • Total estimado: ~65 ciclos

Duración promedio por instrucción: 65 ÷ 13 = 5 ciclos por instrucción


Pregunta 5: Ciclos totales del programa

Basado en el análisis detallado del pipeline con todos los stalls y penalties:

Total de ciclos para ejecutar el programa completo: ~65 ciclos


Pregunta 6: Justificación del pipelining

Comparación:

Sin pipelining:

  • 13 instrucciones × 7 ciclos = 91 ciclos

Con pipelining (actual):

  • ~65 ciclos (incluyendo stalls y penalties)

Análisis:

  • Speedup: 91 ÷ 65 = 1.4x
  • Mejora del 28.6% en rendimiento

Justificación:

SÍ vale la pena aplicar pipelining porque:

  1. Mejora significativa: Reducción de 26 ciclos (28.6% más rápido)
  2. Beneficio escalable: En programas más largos con menos hazards relativos, el beneficio sería mayor
  3. ROI positivo: A pesar de la complejidad adicional del hardware, el gain en performance justifica la implementación
  4. Consideración: Los data hazards son significativos en este código, pero técnicas como forwarding podrían mitigar este impacto

El pipelining demuestra su valor incluso en este programa con múltiples dependencias de datos.

Content is user-generated and unverified.
    Examen Parcial 2 - IC3101 Arquitectura de Computadoras | Claude