# Actividades de Aprendizaje Autónomo — Módulo 2 (EC2)

**Asignatura:** TEL-420 · Sistemas Paralelos  
**Módulo 2:** Programación Paralela en Memoria Compartida (OpenMP)  
**Docente:** Ing. Elias Cassal Baldiviezo  
**Horas de dedicación autónoma:** 8 horas  
**Semanas de ejecución:** 4 a 6  

---

## 1. Justificación y propósito pedagógico

Conforme al apartado 20.2 del Programa Docente del Proyecto Formativo, las actividades autónomas del módulo 2 consolidan el aprendizaje procedimental de la programación concurrente en C con directivas OpenMP, garantizando que el estudiante adquiera destreza en la detección y prevención de patologías de paralelismo (condiciones de carrera, contención y falsa compartición de caché).

---

## 2. Bloque de Actividades Autónomas Obligatorias

### Actividad A1: Desarrollo de la serie de 5 programas OpenMP de complejidad creciente
- **Momento de entrega:** Fin de la Semana 5.
- **Instrumento de evaluación:** [Rúbrica de Evaluación de Código Fuente OpenMP](file:///home/eliasdev/sistemas_paralelos/10-modulos/M2-openmp-memoria-compartida/rubrica-codigo-openmp.md) (45% de EC2).
- **Consigna de trabajo:**
  1. Implementar en un repositorio Git local los cinco programas progresivos:
     - *Programa 1:* Suma de vectores paralela básica sin dependencias (`parallel for`).
     - *Programa 2:* Búsqueda lineal con reducción de contador (`reduction(+:contador)`).
     - *Programa 3:* Reducción de valor extremo y comparación con operaciones atómicas (`atomic`).
     - *Programa 4:* Transformación matricial con bucles anidados evaluando `collapse(2)` y localidad espacial.
     - *Programa 5:* Bucle con coste computacional irregular (carga no homogénea) contrastando las políticas `schedule(static)`, `schedule(dynamic)` y `schedule(guided)`.
  2. Verificar numéricamente en cada programa que el resultado paralelo coincida con el secuencial.
  3. Aplicar buenas prácticas de Git (commits atómicos y mensajes con formato convencional).

---

### Actividad A2: Análisis de falsa compartición (*False Sharing*) e informe de optimización
- **Momento de entrega:** Fin de la Semana 6.
- **Instrumento de evaluación:** [Rúbrica de Informe Técnico de Optimización](file:///home/eliasdev/sistemas_paralelos/10-modulos/M2-openmp-memoria-compartida/rubrica-informe-optimizacion.md) (35% de EC2).
- **Consigna de trabajo:**
  1. Diseñar un experimento en C donde múltiples hilos escriban simultáneamente en posiciones adyacentes de un mismo arreglo dentro de una misma línea de caché (64 bytes).
  2. Implementar la solución mediante alineamiento de memoria (`alignas(64)` / variables locales privadas en pila acumuladas al final con `reduction`).
  3. Medir el tiempo de ejecución con `omp_get_wtime()` variando los hilos de 1 a 16.
  4. Redactar el informe técnico en PDF explicando por qué el protocolo de coherencia de caché (MESI/MOESI) invalida las líneas y causa degradación masiva.

---

### Actividad A3: Pruebas de rendimiento y perfilado (*Profiling*) con herramientas del sistema
- **Momento de entrega:** Fin de la Semana 6.
- **Instrumento de evaluación:** [Rúbrica de Pruebas de Rendimiento Documentadas](file:///home/eliasdev/sistemas_paralelos/10-modulos/M2-openmp-memoria-compartida/rubrica-pruebas-rendimiento.md) (20% de EC2).
- **Consigna de trabajo:**
  1. Ejecutar las herramientas de perfilado `perf` o `gprof` sobre las implementaciones de referencia en `40-codigo/referencia/`.
  2. Analizar fallos de caché de nivel 1 y último nivel (LLC-misses) y cambios de contexto.
  3. Documentar las mediciones y generar curvas de Speedup y Eficiencia.
