Matemáticas
Grado y Doble Grado. Curso 2023/2024.
PROGRAMACIÓN PARALELA - 800619
Curso Académico 2023-24
Datos Generales
- Plan de estudios: 0803 - GRADO EN MATEMÁTICAS (2009-10)
- Carácter: Optativa
- ECTS: 6.0
SINOPSIS
COMPETENCIAS
Generales
Utilizar los conocimientos matemáticos para modelar y resolver problemas
complejos mediante algoritmos.
Valorar diferentes soluciones alternativas y elegir de acuerdo a las situaciones
específicas entre las herramientas y las técnicas adecuadas para llevar a cabo
la implementación de dichas soluciones.
Saber abstraer en un problema complejo las propiedades y características esen-
ciales reconociendo su rango de aplicabilidad y limitaciones.
complejos mediante algoritmos.
Valorar diferentes soluciones alternativas y elegir de acuerdo a las situaciones
específicas entre las herramientas y las técnicas adecuadas para llevar a cabo
la implementación de dichas soluciones.
Saber abstraer en un problema complejo las propiedades y características esen-
ciales reconociendo su rango de aplicabilidad y limitaciones.
Transversales
Ser capaz de mostrar creatividad, iniciativa y espíritu emprendedor
para afrontar los retos de su actividad y saber valorar las soluciones a dichos
retos en el contexto industrial, económico, administrativo, medio ambiental y
social.
Tener la capacidad de reunir e interpretar datos relevantes para emitir juicios
que incluyan una reflexión profunda sobre temas y problemas a resolver.
Demostrar razonamiento crítico y gestionar información científica y técnica de
calidad, bibliografía, bases de datos especializadas y recursos accesibles a través
de Internet.
para afrontar los retos de su actividad y saber valorar las soluciones a dichos
retos en el contexto industrial, económico, administrativo, medio ambiental y
social.
Tener la capacidad de reunir e interpretar datos relevantes para emitir juicios
que incluyan una reflexión profunda sobre temas y problemas a resolver.
Demostrar razonamiento crítico y gestionar información científica y técnica de
calidad, bibliografía, bases de datos especializadas y recursos accesibles a través
de Internet.
Específicas
Diseñar programas que solucionen problemas en el ámbito de la programación concurrente/distribuida/paralela.
Utilizar herraientas informáticas para implementar y depurar programas.
Utilizar herraientas informáticas para implementar y depurar programas.
ACTIVIDADES DOCENTES
Clases teóricas
En las que el profesor presenta los conceptos y técnicas relevantes
de los contenidos y muestra las referencias bibliográficas o enlaces web a seguir
para profundizar en dichos temas.
de los contenidos y muestra las referencias bibliográficas o enlaces web a seguir
para profundizar en dichos temas.
Clases prácticas
En las que en un trabajo guiado por el profesor el alumnado
diseña y busca soluciones a ejercicios propuestos.
diseña y busca soluciones a ejercicios propuestos.
Laboratorios
En las que los alumnos implementan y depuran los
programas que resuelven los problemas estudiados en las clases prácticas.
programas que resuelven los problemas estudiados en las clases prácticas.
Presentaciones
En las que los alumnos, de forma individual o por grupos, a petición
del profesor, preparan una exposición ante sus compañeros de una solución (bien
sea diseño, implementación o ambas) a alguno de los problemas propuestos.
del profesor, preparan una exposición ante sus compañeros de una solución (bien
sea diseño, implementación o ambas) a alguno de los problemas propuestos.
Presenciales
6
Semestre
8
Breve descriptor:
El curso proporciona una introducción a la programación concurrente, distribuida y paralela. Esta programación es necesaria en entornos en los que hay múltiples procesadores interconectados entre sí ya sea de forma local o remota. El curso plantea un recorrido general y en anchura por las diversas técnicas de programación que se emplean en resolver problemas prototípicos que surgen en este tipo de sistemas:
sincronización de tareas, protocolos de comunicación, paralelización de soluciones...
El curso también se centra en aprender las cuestiones prácticas necesarias de un lenguaje de programación concreto (Python) que permitan resolver y programar los algoritmos prototípicos estudiados y resolver problemas nuevos. Especial atención se dedica a los módulos de Python que permiten hacer computación en clusters utilizando sistemas de ficheros distribuidos: MapReduce y Spark.
sincronización de tareas, protocolos de comunicación, paralelización de soluciones...
El curso también se centra en aprender las cuestiones prácticas necesarias de un lenguaje de programación concreto (Python) que permitan resolver y programar los algoritmos prototípicos estudiados y resolver problemas nuevos. Especial atención se dedica a los módulos de Python que permiten hacer computación en clusters utilizando sistemas de ficheros distribuidos: MapReduce y Spark.
Requisitos
Es adecuado para seguir el curso con fluidez contar con los conocimientos
de programación que habitualmente se consiguen con un primer curso en esta materia:
variables y tipos de datos, estructuras de control, programación estructurada. . .
También es recomendable cursar la asignatura programación declarativa, para tener fundamentos
de programación funcional.
de programación que habitualmente se consiguen con un primer curso en esta materia:
variables y tipos de datos, estructuras de control, programación estructurada. . .
También es recomendable cursar la asignatura programación declarativa, para tener fundamentos
de programación funcional.
Objetivos
Adquirir los conocimientos elementales y la terminología adecuada que rodea al mundo de la programación paralela/concurrente/distribuida.
Entender los múltiples factores que intervienen en la definición de un problema comunicación, topología, dependencias. . . y cuyo estudio es fundamental para afrontar una solución.
Entender la importancia del correcto diseño complejidad algorítmica, adecuación, escalabilidad. . . y el estudio teórico en la resolución de problemas mediante programas.
Utilización de los módulos existentes en Python para diseñar e implementar soluciones a problemas concurrentes, paralelos y distribuidos.
Comprender el uso potencial de la programación paralela en multitud de ambitos reales: simulación, la computación científica, gráficos y visión por ordenador, entornos colaborativos, web, bigdata. . .
Entender los múltiples factores que intervienen en la definición de un problema comunicación, topología, dependencias. . . y cuyo estudio es fundamental para afrontar una solución.
Entender la importancia del correcto diseño complejidad algorítmica, adecuación, escalabilidad. . . y el estudio teórico en la resolución de problemas mediante programas.
Utilización de los módulos existentes en Python para diseñar e implementar soluciones a problemas concurrentes, paralelos y distribuidos.
Comprender el uso potencial de la programación paralela en multitud de ambitos reales: simulación, la computación científica, gráficos y visión por ordenador, entornos colaborativos, web, bigdata. . .
Contenido
- Conceptos Básicos y Terminología
- Programación concurrente
- Modelo de entrelazado
- Exclusión mutua
- Primitivas de concurrencia
- Programación distribuida
- Comunicación síncrona y asíncrona
- Paso de mensajes y protocolos
- Internet of Things (IoT)
- Programación paralela
- Clusters, Grids
- Sistemas distribuidos de ficheros: Hadoop
- Programación en Spark
Evaluación
Convocatoria ordinaria:
Prácticas: 60%.
Examen de teoría: 40%.
Convocatoria extraordinaria:
Examen: 100%
Prácticas: 60%.
Examen de teoría: 40%.
Convocatoria extraordinaria:
Examen: 100%
Bibliografía
Libros:
M. Ben-Ari, Principles of Concurrent and Distributed Programming, Prentice-Hall, 2006.
Thomas Rauber and Gudula Rünger, Parallel Programming For Multicore and Cluster Systems, Springer-Verlag, 2010.
Donald Miner y Adam Shook, MapReduce Design Patterns, O'Reilly, 2012
Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill, Patterns for Parallel Programming, Addison-Wesley, 2005.
Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996.
Karau H., Konwinski A., Wendell P., and Zaharia M. Learning Spark. O'Reilly. 2015
Internet:
Documentación de Python, http://docs.python.org/release/2.7.1/
Documentación de Python MapReduce http://mrjob.readthedocs.io/en/latest/
Documentación de Spark https://spark.apache.org/
M. Ben-Ari, Principles of Concurrent and Distributed Programming, Prentice-Hall, 2006.
Thomas Rauber and Gudula Rünger, Parallel Programming For Multicore and Cluster Systems, Springer-Verlag, 2010.
Donald Miner y Adam Shook, MapReduce Design Patterns, O'Reilly, 2012
Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill, Patterns for Parallel Programming, Addison-Wesley, 2005.
Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996.
Karau H., Konwinski A., Wendell P., and Zaharia M. Learning Spark. O'Reilly. 2015
Internet:
Documentación de Python, http://docs.python.org/release/2.7.1/
Documentación de Python MapReduce http://mrjob.readthedocs.io/en/latest/
Documentación de Spark https://spark.apache.org/
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 | 22/01/2024 - 10/05/2024 | LUNES 10:00 - 11:00 | B16 | OSCAR MARTIN SANCHEZ |
LUNES 11:00 - 12:00 | B16 | OSCAR MARTIN SANCHEZ |
Clases prácticas | ||||
---|---|---|---|---|
Grupo | Periodos | Horarios | Aula | Profesor |
Subgrupo U1 | 22/01/2024 - 10/05/2024 | JUEVES 09:00 - 10:00 | INF4 Aula de Informática | |
JUEVES 10:00 - 11:00 | INF4 Aula de Informática | |||
Subgrupo U2 | 22/01/2024 - 10/05/2024 | 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 |