Matemáticas
Undergraduate Programme. Academic Year 2024/2025.
PROGRAMACIÓN PARALELA - 800619
Curso Académico 2024-25
Datos Generales
- Plan de estudios: 0803 - GRADO EN MATEMÁTICAS (2009-10)
- Carácter: Optativa
- ECTS: 6.0
SINOPSIS
COMPETENCIAS
Generales
Transversales
Específicas
Otras
ACTIVIDADES DOCENTES
Clases teóricas
Laboratorios
Presenciales
Semestre
Breve descriptor:
¿Por qué la programación secuencial de siempre no es suficiente? ¿La posibilidad de hacer varias cosas a la vez merece un curso entero?
La programación paralela, la concurrente y la distribuida son tres paradigmas relacionados y de límites difusos. Se trata de situaciones en las que hay varios programas ejecutándose a la vez, en uno o en varios procesadores, con un objetivo común. Los procesadores pueden estar todos en la misma máquina o en distintas máquinas separadas pero comunicadas. Disponer de varios procesadores proporciona mayor potencia de cómputo, pero la necesidad de coordinación presenta desafíos adicionales a los de la programación secuencial. Este curso estudia las herramientas y las técnicas para sacar provecho del paralelismo, los nuevos problemas que aparecen y cómo evitarlos. El lenguaje de programación usado a través de todo el curso es Python, enriquecido con módulos para la programación paralela.
Requisitos
Objetivos
- comprender los nuevos problemas que el paralelismo introduce en la programación
- entender los conceptos elementales y el vocabulario relacionado con la programación paralela, concurrente y distribuida
- ser capaz de diseñar la solución a un problema según los recursos disponibles (procesadores, infraestructura, comunicaciones)
- entender la utilidad de los métodos formales en el ámbito de la programación paralela
- utilizar Python y algunos de sus módulos para implementar soluciones a problemas usando paralelismo
- apreciar el uso de la programación paralela en situaciones reales
- conocer desarrollos recientes en el campo del paralelismo y la concurrencia, tanto teóricos como prácticos
Contenido
- motivación, introducción y conceptos básicos
- clusters, procesadores multinúcleo, sistemas distribuidos
- uso de pools de procesos para implementar paralelismo de datos
- concurrencia, paralelismo, sistemas distribuidos
- memoria compartida y paso de mensajes
- programación paralela
- paralelismo en Python: módulo multiprocessing
para procesos, módulo threading
para hebras
- datos compartidos con las clases Queue
y Value
- primitivas de concurrencia en Python: Lock
, Semaphore
, Condition
- implementación de monitores como clases
- comparar la eficiencia de programas usando procesos y usando hebras
- la concurrencia y sus problemas
- atomicidad, entrelazado, indeterminismo
- exclusión mutua, carreras de datos, progreso
- algoritmos con memoria compartida: algoritmo de Dekker, algoritmo de la panadería
- primitivas de concurrencia: cerrojos, semáforos, monitores
- problemas clásicos en concurrencia: lectores-escritores, productor-consumidor, las filósofas hambrientas
- sistemas distribuidos
- comunicación síncrona y asíncrona
- paso de mensajes
- uso de sockets en Python
- problemas clásicos: protocolos de consenso
Evaluación
- En ambas convocatorias será necesario un mínimo de 4 en el examen y también un mínimo de 4 en la evaluación continua para poder aprobar la asignatura.
- La evaluación continua consistirá principalmente en prácticas de programación. Para la convocatoria extraordinaria se abrirá un nuevo plazo de entrega de prácticas para quienes no las hubieran entregado durante el curso o no hubieran obtenido el mínimo 4 necesario.
Bibliografía
- N. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996.
- J. Hunt, Advanced guide to Python 3 programming, Springer, 2023 (la parte VIII y, en menor medida, las siguientes).
- J. Guttag, Introduction to Computation and Programming Using Python, MIT Press, 2021 (para Python básico, sin paralelismo).
- documentación oficial de Python: https://docs.python.org/3/, especialmente:
- https://docs.python.org/3/library/threading.html
- https://docs.python.org/3/library/multiprocessing.html
Estructura
Módulos | Materias |
---|---|
CONTENIDOS AVANZADOS DE CIENCIAS DE LA COMPUTACIÓN | PARADIGMAS DE PROGRAMACIÓN |
Grupos
Clases teóricas | ||||
---|---|---|---|---|
Grupo | Periodos | Horarios | Aula | Profesor |
Grupo único | 20/01/2025 - 09/05/2025 | LUNES 10:00 - 11:00 | S-106 | OSCAR MARTIN SANCHEZ |
LUNES 11:00 - 12:00 | S-106 | OSCAR MARTIN SANCHEZ |
Clases aula de informática | ||||
---|---|---|---|---|
Grupo | Periodos | Horarios | Aula | Profesor |
Subgrupo U1 | 20/01/2025 - 09/05/2025 | JUEVES 09:00 - 10:00 | INF4 Aula de Informática | OSCAR MARTIN SANCHEZ |
JUEVES 10:00 - 11:00 | INF4 Aula de Informática | OSCAR MARTIN SANCHEZ | ||
Subgrupo U2 | 20/01/2025 - 09/05/2025 | JUEVES 12:00 - 13:00 | INF4 Aula de Informática | OSCAR MARTIN SANCHEZ |
JUEVES 13:00 - 14:00 | INF4 Aula de Informática | OSCAR MARTIN SANCHEZ |