Loading repository data…
Loading repository data…
EnriqueBDeL / repository
Implementación paralela del algoritmo DTW en C, utilizando OpenMP y CUDA.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Este proyecto ha sido desarrollado como parte de la práctica final para la asignatura de Programación Paralela. El objetivo principal es la implementación y optimización del algoritmo Dynamic Time Warping (DTW) combinado con la distancia de Mahalanobis para el análisis masivo de series temporales (multiseries).
Para afrontar el alto coste computacional del algoritmo, se aplican técnicas de Computación de Alto Rendimiento (HPC), explotando el paralelismo a nivel de hilos en arquitecturas multinúcleo y diseñando kernels de procesamiento masivo de datos para aceleradores gráficos.
El sistema aborda el problema desde diferentes enfoques arquitectónicos para evaluar el impacto del hardware en el procesamiento de series temporales.
| Versión | Tecnología | Hardware | Objetivo Principal |
|---|---|---|---|
| Secuencial | C estándar | CPU (1 Core) | Línea base para análisis de flujo y detección de cuellos de botella del algoritmo DTW. |
| Multinúcleo | OpenMP | CPU (Multi-Core) | Paralelización por hilos de memoria compartida y estudio de escalabilidad. |
| Masiva | CUDA | GPU (NVIDIA) | Diseño de paralelismo masivo optimizando la jerarquía de memoria (compartida y registradores). |
El desarrollo se ha enfocado en la migración del algoritmo base hacia entornos paralelos y la medición exhaustiva de su comportamiento.
La sintaxis básica para lanzar el entorno y configurar la plataforma de ejecución se realiza a través de la línea de comandos:
./programa -m MODO -t HILOS [opciones]
Modos soportados (-m):
0: Ejecución secuencial en CPU.
1: Ejecución paralela en CPU utilizando OpenMP.
2: Ejecución en GPU mediante CUDA.
Opciones de configuración:
-t: Define el número de hilos para OpenMP o la cantidad de hilos por bloque para CUDA (el valor por defecto es 4).
-a 1: Activa el modo anidado simple en la versión OpenMP (útil para pruebas de escalabilidad).
-i: Especifica el número de hilos internos a usar en el paralelismo anidado de OpenMP (el valor por defecto es 2).
-p 1: Habilita la salida detallada (print_debug) mostrando las variables evaluadas y el resultado de los gradientes.
-e: Establece la cantidad de monomios a mostrar por pantalla de cada ecuación (el valor por defecto es 5).
El codiseño y la paralelización con OpenMP han permitido exprimir los recursos multinúcleo de la CPU, logrando una reducción drástica en los tiempos de cómputo y mejorando significativamente el rendimiento del algoritmo DTW respecto a la versión secuencial.
Nota de infraestructura: Debido a incidencias técnicas ajenas en el servidor de pruebas, sumado a las restricciones temporales del calendario y la curva de experiencia en la plataforma, la ejecución del módulo de hardware en CUDA no pudo validarse en producción de forma óptima. No obstante, el diseño de mapeo y la distribución del kernel base quedan completamente estructurados en la solución.
| Tecnología | Uso en el proyecto |
|---|---|
| C / C++ | Lenguaje de bajo nivel optimizado para el cálculo numérico. |
| OpenMP | API para paralelismo de memoria compartida en CPU multinúcleo. |
| NVIDIA CUDA | Plataforma y modelo de programación para computación masiva en GPU. |
| GCC / NVCC | Compiladores nativos para la generación de binarios de alta eficiencia. |