# Actividades de Aprendizaje Autónomo — Módulo 4 (EC4)

**Asignatura:** TEL-420 · Sistemas Paralelos  
**Módulo 4:** Computación Paralela Masiva en GPU (CUDA)  
**Docente:** Ing. Elias Cassal Baldiviezo  
**Horas de dedicación autónoma:** 6 horas  
**Semanas de ejecución:** 11 a 13  

---

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

Conforme al apartado 20.4 del Programa Docente del Proyecto Formativo, el trabajo autónomo en el módulo 4 permite al estudiante interiorizar la mentalidad de **paralelismo masivo (*Massively Parallel Processing*)**, dominando la programación en GPU mediante la escritura de kernels de complejidad progresiva y el análisis crítico de la relación costo-beneficio de la aceleración por hardware.

---

## 2. Bloque de Actividades Autónomas Obligatorias

### Actividad A1: Desarrollo de la serie de kernels CUDA de complejidad creciente
- **Momento de entrega:** Fin de la Semana 12.
- **Instrumento de evaluación:** [Rúbrica de Evaluación de Código Fuente CUDA](file:///home/eliasdev/sistemas_paralelos/10-modulos/M4-cuda-gpgpu/rubrica-codigo-cuda.md) (40% de EC4).
- **Consigna de trabajo:**
  1. Desarrollar e integrar en un repositorio GitHub la serie de 4 kernels CUDA:
     - Kernel 1: Operaciones vectoriales con cálculo de índices globales en 1D.
     - Kernel 2: Filtro 2D de suavizado de imágenes o cálculo de stencil con grilla bidimensional.
     - Kernel 3: Reducción paralela de suma en memoria compartida sin divergencia de warps.
     - Kernel 4: Multiplicación de matrices por bloques de teselas (*Tiled GEMM*) con memoria compartida.
  2. Implementar comprobación automática de errores para cada llamada a la API CUDA mediante una macro en C (`CHECK_CUDA_ERROR`).
  3. Validar los resultados frente a la CPU para matrices de al menos $2048 \times 2048$.

---

### Actividad A2: Estudio de literatura técnica oficial y análisis de código abierto
- **Momento de dedicación:** Semanas 11 y 12.
- **Contenidos de estudio autónomo:**
  - *CUDA C++ Programming Guide* (Capítulos 1 a 3: Modelo de programación y modelo de hardware).
  - *CUDA C++ Best Practices Guide* (Estrategias de optimización de memoria y ocupancia).
  - Inspección de repositorios de código abierto de bibliotecas aceleradas (cuBLAS, Thrust o CUDNN).

---

### Actividad A3: Preparación del informe comparativo CPU vs GPU y análisis de ocupancia
- **Momento de entrega:** Fin de la Semana 13.
- **Instrumentos de evaluación:** [Rúbrica de Informe Comparativo CPU vs GPU](file:///home/eliasdev/sistemas_paralelos/10-modulos/M4-cuda-gpgpu/rubrica-comparativo-cpu-gpu.md) (30% de EC4) y [Rúbrica de Perfilado de GPU](file:///home/eliasdev/sistemas_paralelos/10-modulos/M4-cuda-gpgpu/rubrica-perfilado-gpu.md) (30% de EC4).
- **Consigna de trabajo:**
  1. Ejecutar las herramientas de perfilado NVIDIA Nsight Compute sobre los kernels desarrollados.
  2. Extraer capturas y métricas de ocupancia teórica vs alcanzada y porcentaje de coalescing de memoria global.
  3. Redactar el informe técnico en PDF contrastando la aceleración obtenida frente a OpenMP en CPU y evaluando el coste de transferencia del bus PCIe.
