El objetivo de la asignatura es conocer las distintas arquitecturas, modelos y frameworks de procesamiento que permiten escalar los recursos disponibles en función del tamaño y del tipo de problema al que nos enfrentamos.
Comenzamos estudiando el nivel más bajo: cómo mejorar el rendimiento dentro de un procesador y qué formas de paralelismo permiten aprovechar mejor el hardware.
Para ello analizamos el paralelismo a nivel de instrucciones, el paralelismo a nivel de datos, el uso de múltiples núcleos y también distintos tipos de aceleradores diseñados para problemas concretos.
Este proceso se amplía en las prácticas, donde localizamos cuellos de botella mediante profiling, aprovechamos librerías optimizadas y, cuando el problema lo requiere, introducimos técnicas de optimización, compilación o paralelismo explícito.
Después damos el salto a los sistemas distribuidos, entendiendo por qué en Big Data no basta con tener más máquinas: también hay que minimizar el movimiento de datos. Por eso estudiamos HDFS, MapReduce y, finalmente, frameworks más avanzados como Spark y Dask, que permiten escalar el procesamiento de datos de forma más flexible y eficiente.
En resumen, la asignatura pretende desarrollar los siguientes criterios técnicos: saber analizar un problema de datos, identificar sus límites de rendimiento y escoger la arquitectura, la herramienta y el nivel de paralelismo adecuados.
Los contenidos generales que se ven son:
· Introducción a la computación paralela y a los sistemas distribuidos.
· Computación paralela intensiva en datos (paralelismo de datos, modelos y abstracciones).
· Software y entornos de ejecución específicos para análisis avanzado de datos.