Créditos
6
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos
, pero tiene capacidades previas
Departamento
CS;DAC
Después de unas sesiones introductorias, el curso consta de 3 módulos: concurrencia, paralelismo y distribución. El estudiante debe seleccionar dos de los tres módulos. Las lecciones se complementan con prácticas de programación para ilustrar los problemas y evaluar las soluciones.
Profesorado
Responsable
- Jordi Guitart Fernandez ( jguitart@ac.upc.edu )
Otros
- Jorge Castro Rabal ( castro@cs.upc.edu )
- Josep Ramon Herrero Zaragoza ( josepr@ac.upc.edu )
Horas semanales
Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0.5
Aprendizaje autónomo
8
Competencias
Computer networks and distributed systems
High performance computing
Genéricas
Trabajo en equipo
Razonamiento
Objetivos
-
Entender la definición de sistema distribuido y sus posibles aplicaciones, además de los desafíos que se deben afrontar para su diseño e implementación.
Competencias relacionadas: CEE2.1, CG5,
Subcompetences- Conocer las posibles aplicaciones de un sistema distribuido
- Entender los desafíos para diseñar e implementar un sistema distribuido: heterogeneidad, ausencia de visión global, concurrencia, ausencia de un único punto de control, seguridad, asincronía, apertura, transparencia, tolerancia a fallos, escalabilidad
- Poner ejemplos de sistemas distribuidos
- Entender la definición de sistema distribuido
-
Entender la problemática del tiempo y la ordenación de eventos en un sistema distribuido y explicar e implementar los mecanismos de relojes lógicos para atacar esta problemática y los algoritmos para sincronizar relojes físicos en un sistema distribuido.
Competencias relacionadas: CEE2.3, CEE2.1,
Subcompetences- Entender la problemática del tiempo y la ordenación de eventos en un sistema distribuido
- Explicar e implementar los mecanismos de relojes lógicos para atacar esta problemática: relación happened-before, relojes lógicos de Lamport (escalares, vectoriales)
- Explicar e implementar los algoritmos para sincronizar relojes físicos en un sistema distribuido: Cristian (NTP), Berkeley
-
Entender la problemática de obtener un estado global consistente en un sistema distribuido y explicar el mecanismo de snapshot distribuido para atacar esta problemática, además de definir predicados globales para la evaluación de propiedades en un sistema distribuido.
Competencias relacionadas: CEE2.3, CEE2.1,
Subcompetences- Entender la problemática de obtener un estado global consistente en un sistema distribuido
- Definir predicados globales para la evaluación de propiedades en un sistema distribuido: propiedades de los predicados (estabilidad), ocurrencia de los predicados (possibly, definitely)
- Explicar el mecanismo de snapshot distribuido de Chandy y Lamport para atacar esta problemática
-
Describir, comparar e implementar los algoritmos para la coordinación de procesos en un sistema distribuido, incluyendo la coordinación necesaria para elección de líder, comunicación en grupo multicast, y consenso.
Competencias relacionadas: CEE2.3, CEE2.1, CTR3,
Subcompetences- Describir, comparar e implementar los algoritmos para la coordinación de procesos en un sistema distribuido para la comunicación en grupo multicast: multicast fiable básico, multicast fiable escalable, multicast ordenado (FIFO, causal, total), atomic multicast
- Describir, comparar e implementar los algoritmos para la coordinación de procesos en un sistema distribuido para garantizar el consenso: problema de los dos ejércitos, algoritmo de Dolev & Strong, problema de los generales Byzantinos, Paxos
- Describir, comparar e implementar los algoritmos para la coordinación de procesos en un sistema distribuido para la elección de líder: Bully, Chang & Roberts, Ring
-
Comprender la problemática de la ejecución concurrente de transacciones y describir, comparar e implementar diferentes mecanismos de control de concurrencia.
Competencias relacionadas: CEE2.3, CEE2.1, CTR6,
Subcompetences- Describir, comparar e implementar diferentes mecanismos de control de concurrencia: two-phase locking (incluyendo detección y tratamiento de deadlock), optimistic concurrency control, timestamp ordering
- Comprender la problemática de la ejecución concurrente de transacciones: lost update, inconsistent retrievals, equivalencia serie, recuperación de aborts (dirty read, premature write)
-
Ampliar el concepto de transacción, el protocolo de commit y los mecanismos de control de concurrencia a un sistema distribuido.
Competencias relacionadas: CEE2.3, CEE2.1,
Subcompetences- Ampliar los mecanismos de control de concurrencia a un sistema distribuido: two-phase locking (incluyendo detección y tratamiento de deadlock distribuido), optimistic concurrency control, timestamp ordering
- Ampliar el concepto de transacción a un sistema distribuido
- Describir, comparar e implementar diferentes protocolos de commit distribuido: one-phase y two-phase
-
Comprender la aplicación de la replicación en un sistema distribuido, además de la problemática que se introduce a nivel de consistencia, y describir los modelos de consistencia correspondientes y su implementación.
Competencias relacionadas: CEE2.3, CEE2.1,
Subcompetences- Describir implementaciones concretas de modelos de consistencia: protocolos basados ​​en primario (remote-write, local-write) y protocolos de escritura replicada (replicación activa, protocolos basados ​​en quórum)
- Describir los modelos de consistencia fuerte centrados en los datos: estricta, linearizability, secuencial
- Describir los modelos de consistencia relajada centrados en los datos: uso de variables de sincronización
- Comprender la aplicación de la replicación en un sistema distribuido, además de la problemática que se introduce a nivel de consistencia
- Describir los modelos de consistencia centrados en el cliente: eventual, monotonic-read, monotonic-write, read-your-writes, writes-follow-reads
-
Comprender los problemas que puede causar el acceso concurrente de varios agentes (threads) a los recursos. Conocer las estrategias de diseño que aseguran una correcta coordinación de los agentes y evitan las inconveniencias del acceso concurrente
Competencias relacionadas: CG1, CEE4.2,
Subcompetences- Conocer el formalismo de los sistemas de transición para representar la semántica de un sistema concurrente. Saber usar herramientas de análisis para determiner las propiedades del sistema representado.
- Comprender el beneficio de usar modelos para representar un sistema concurrente y poder analizar sus propiedades
- Ser capaz de representar un sistema concurrente usando un modelo abstracto formal y de analizar sus propiedades
- Conocer los conceptos característicos de un diseño concurrente: exclusión mutua, secciones críticas, interferencia, deadlocks y las instrucciones primitivas para el diseño de programas concurrentes.
-
Adquirir destreza en el diseño de programas concurrentes en el paradigma de memoria compartida.
Competencias relacionadas: CEE2.3, CEE4.2, CTR3,
Subcompetences- Asimilar el concepto de thread y los fundamentos del diseño de programas concurrentes con threads. Conocer las construcciones básicas o primitivas disponibles en los lenguajes de programación modernos (como Java) para asegurar una coordinación correcta entre los diferentes threads.
- Entender los problemas de interferencia y bloqueo (deadlock) de un sistema concurrente y saber diseñar sistemas concurrentes libres de estas inconveniencias.
- Ser capaz de aplicar los recursos ofrecidos por los lenguajes de programación modernos para diseñar programas concurrentes: threads, semáforos, secciones críticas, monitores y condiciones de sincronización.
-
Adquirir destreza en el diseño de programas concurrentes en el paradigma de paso de mensajes.
Competencias relacionadas: CEE2.3, CEE2.1, CEE4.2, CTR3,
Subcompetences- Reconocer y aplicar patrones de diseño concurrente que son frecuentes en la arquitectura de paso de mensajes: cliente/servidor, filter pipeline, supervisor/worker, announcer/listener
- Comprender el paradigma de paso de mensajes que es característico de algunos lenguajes de programación concurrente (Erlang). Entender el concepto de proceso en Erlang. Ser capaz de diseñar programas de complejidad limitada en este lenguaje.
- Saber trasladar algoritmos conocidos al paradigma de paso de mensajes, como por ejemplo el algoritmo de ordenación quicksort.
-
Comprender y medir el paralelismo potencial disponible en una aplicación secuencial y el rendimiento logrado con su implementación paralela
Competencias relacionadas: CG1, CEE4.2,
Subcompetences- Comprender el rendimiento de una aplicación paralela y los factores generales que contribuyen a su degradación
- Comprender el concepto de gráfico de tareas y cómo medir paralelismo potencial
- Utilización de herramientas de instrumentación, visualización y análisis para entender el paralelismo y el rendimiento
-
Decidir la estrategia de descomposición más adecuada para expresar el paralelismo en una aplicación
Competencias relacionadas: CEE4.2, CTR3, CTR6, CG5,
Subcompetences- Dada una descomposición de tareas, decidir el ordenamiento de las tareas y las restricciones de intercambio de datos que garantizan las dependencias
- Dada la descomposición de datos, decidir los requerimientos de comunicación y el uso de operaciones punto a punto o colectivas para implementarlas
- Uso de la descomposición de tareas y datos
-
Especificar, utilizando el paradigma de programación apropiado, una versión paralela eficiente que corresponda a una determinada descomposición de tareas / datos
Competencias relacionadas: CEE4.2, CTR3, CTR6, CG5,
Subcompetences- Uso de la interfaz de paso de mensajes (MPI) para aplicaciones de computación / uso intensivo de datos en arquitecturas de memoria distribuida
- Uso de CUDA para descargar datos de computación y transferencia para arquitecturas basadas en aceleradores
Contenidos
-
Sistemas de transición y algebra de procesos
Procesos secuenciales y sistemas de transición. Construcciones prefix y choice. Concurrencia de procesos, concepto y construcción. Análisis de sistemas de transición. Implementaciones en Java y Erlang. -
Entender el paralelismo
Introducción a las arquitecturas paralelas: arquitecturas de memoria compartida y distribuida y aceleradores. Gráfico de tareas: nodos y aristas. Métrica. Aceleración y eficiencia. Ley Amdahl. -
Conceptos de sistemas distribuidos
Definición de sistema distribuido. Posibles aplicaciones de un sistema distribuido. Ejemplos de sistemas distribuidos. Desafíos para diseñar e implementar un sistema distribuido: heterogeneidad, seguridad, ausencia de visión global, concurrencia, ausencia de un único punto de control, asincronía, apertura , transparencia, tolerancia a fallos, escalabilidad. -
Propiedades de seguridad y vivacidad
Descripción y ejemplos de propiedades de seguridad. Análisis propiedades de seguridad sobre sistemas de transición. Descripción de las propiedades de vivacidad y especialmente de las propiedades de progreso. Análisis de propiedades de progreso en sistemas de transición. -
Concurrencia, exclusion mutua y condiciones de sincronización. Deadlock.
El problema de la interferencia destructiva. Locks y exclusión mutua. Semáforos, monitores y condiciones de sincronización. El problema del deadlock y su análisis sobre sistemas de transición. Estrategias de diseño para impedir deadlocks. -
Paso de mensajes. Arquitecturas
Descripción del paradigma de paso de mensajes. La arquitectura cliente/servidor. Introducción a otras arquitecturas: Filter pipeline, supervisor/worker, announcer/listener. Paso de mensajes en Erlang. Diseños de arquitecturas en Erlang -
Predicción y análisis del rendimiento
Uso de modelos y herramientas para entender el paralelismo y el rendimiento (Tareador, Extrae, Paraver y Dimemas). -
Programación de memoria distribuida usando MPI
Visión general de la arquitectura del clúster. Creación, identificación y terminación de procesos. Operaciones punto a punto vs. operaciones colectivas. Comunicaciones síncronas vs asíncronas. -
Programación de dispositivos GPU para la aceleración computacional usando CUDA
Descripción de la arquitectura de la GPU. Decomposiciones adecuadas para la aceleración de la GPU. Principios de programación de CUDA. -
Algoritmos distribuidos: Tiempo, estado global, coordinación y consenso
Tiempo y la ordenación de eventos en un sistema distribuido. Relojes lógicos: relación happened-before, relojes lógicos de Lamport (escalares, vectoriales). Algoritmos para sincronizar relojes físicos en un sistema distribuido: Cristian (NTP), Berkeley. Estado global consistente en un sistema distribuido. Mecanismo de snapshot distribuido de Chandy y Lamport. Predicados globales para la evaluación de propiedades en un sistema distribuido: propiedades de los predicados (estabilidad), ocurrencia de los predicados (possibly, definitely). Coordinación de procesos en un sistema distribuido para la elección de líder: Bully, Ring. Coordinación de procesos en un sistema distribuido para la comunicación en grupo multicast: multicast fiable básico, multicast fiable escalable, multicast ordenado (FIFO, causal, total), atomic multicast. Coordinación de procesos en un sistema distribuido para garantizar el consenso: problema de los dos ejércitos, algoritmo de Dolev & Strong, problema de los generales Byzantinos, Paxos -
Datos compartidos distribuidos: Transacciones, consistencia y replicación
Ejecución concurrente de transacciones: lost update, inconsistent retrievals, equivalencia serie, recuperación de aborts (dirty read, premature write). Mecanismos de control de concurrencia: two-phase locking (incluyendo detección y tratamiento de deadlock), optimistic concurrency control, timestamp ordering. Transacción distribuida. Protocolos de commit distribuido: one-phase y two-phase. Mecanismos de control de concurrencia en un sistema distribuido: two-phase locking (incluyendo detección y tratamiento de deadlock distribuido), optimistic concurrency control, timestamp ordering. Replicación y consistencia en un sistema distribuido. Modelos de consistencia fuerte centrados en los datos: estricta, linearizability, secuencial. Modelos de consistencia relajada centrados en los datos: uso de variables de sincronización. Modelos de consistencia centrados en el cliente: eventual, monotonic-read, monotonic-write, read-your-writes, writes-follow-reads. Implementaciones de modelos de consistencia: protocolos basados ​​en primario (remote-write, local-write) y protocolos de escritura replicada (replicación activa, protocolos basados ​​en quórum)
Actividades
Actividad Acto evaluativo
Conceptos fundamentales de concurrencia, paralelismo y distribución
Preparación de la clase con la ayuda del material de apoyo. Comprensión y asimilación de los contenidos del tema para su aplicación posteriorObjetivos: 1 8 11
Contenidos:
Teoría
6h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
12h
Primer modulo elegido: Concurrencia o Paralelismo o Distribución
Preparación de la clase con la ayuda del material de apoyo. Comprensión y asimilación de los contenidos asociados a los temas del modulo correspondiente para su aplicación posterior en las sesiones de laboratorio.
Teoría
10h
Problemas
0h
Laboratorio
10h
Aprendizaje dirigido
0h
Aprendizaje autónomo
30h
Segundo modulo elegido: Concurrencia o Paralelismo o Distribución
Preparación de la clase con la ayuda del material de apoyo. Comprensión y asimilación de los contenidos asociados a los temas del modulo correspondiente para su aplicación posterior en las sesiones de laboratorio.
Teoría
10h
Problemas
0h
Laboratorio
10h
Aprendizaje dirigido
0h
Aprendizaje autónomo
30h
Módulo I: Concurrencia
Preparación de la clase con la ayuda del material de apoyo. Comprensión y asimilación de los contenidos asociados a los temas del Módulo I (concurrencia) para su aplicación posterior en las sesiones de laboratorio.Objetivos: 8 9 10
Contenidos:
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Módulo II: Paralelismo
Preparación de la clase con la ayuda del material de apoyo. Comprensión y asimilación de los contenidos asociados a los temas del Módulo II (paralelismo) para su aplicación posterior en las sesiones de laboratorio.Objetivos: 11 12 13
Contenidos:
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Módulo III: Distribución
Preparación de la clase con la ayuda del material de apoyo. Comprensión y asimilación de los contenidos asociados a los temas del Módulo III (distribución) para su aplicación posterior en las sesiones de laboratorio.Objetivos: 1 2 3 4 5 6 7
Contenidos:
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Primer modulo elegido: Preparación examen
Repaso general y preparación examen finalObjetivos: 1 2 3 4 5 6 7 8 9 10 11 12 13
Contenidos:
- 3 . Conceptos de sistemas distribuidos
- 10 . Algoritmos distribuidos: Tiempo, estado global, coordinación y consenso
- 11 . Datos compartidos distribuidos: Transacciones, consistencia y replicación
- 1 . Sistemas de transición y algebra de procesos
- 4 . Propiedades de seguridad y vivacidad
- 5 . Concurrencia, exclusion mutua y condiciones de sincronización. Deadlock.
- 6 . Paso de mensajes. Arquitecturas
- 7 . Predicción y análisis del rendimiento
- 2 . Entender el paralelismo
- 8 . Programación de memoria distribuida usando MPI
- 9 . Programación de dispositivos GPU para la aceleración computacional usando CUDA
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
2h
Aprendizaje autónomo
4h
Segundo modulo elegido: Preparación examen
Repaso general y preparación examen finalObjetivos: 1 2 3 4 5 6 7 8 9 10 11 12 13
Contenidos:
- 3 . Conceptos de sistemas distribuidos
- 10 . Algoritmos distribuidos: Tiempo, estado global, coordinación y consenso
- 11 . Datos compartidos distribuidos: Transacciones, consistencia y replicación
- 1 . Sistemas de transición y algebra de procesos
- 4 . Propiedades de seguridad y vivacidad
- 5 . Concurrencia, exclusion mutua y condiciones de sincronización. Deadlock.
- 6 . Paso de mensajes. Arquitecturas
- 7 . Predicción y análisis del rendimiento
- 2 . Entender el paralelismo
- 8 . Programación de memoria distribuida usando MPI
- 9 . Programación de dispositivos GPU para la aceleración computacional usando CUDA
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
2h
Aprendizaje autónomo
4h
Metodología docente
Durante el curso se realizarán dos tipos de actividades:a) Actividades centradas en la adquisición de conocimientos teóricos.
b) Actividades centradas en la adquisición de conocimientos mediante experimentación con la implementación y evaluación empírica en el laboratorio de los mecanismos explicados a nivel teórico.
Las actividades teóricas incluyen clases expositivas participativas donde se explican los contenidos básicos del curso. Las actividades prácticas incluyen seminarios de laboratorio donde los alumnos implementan los mecanismos descritos en las clases expositivas. Los seminarios requieren de una preparación previa mediante la lectura del enunciado y la documentación de apoyo, y una elaboración posterior de las conclusiones obtenidas en un informe.
Método de evaluación
Para cada modulo, habrá un examen (EF) y una nota de laboratorio (L). El examen será de problemas sobre la teoría explicada. La nota de laboratorio reflejará la calidad del trabajo realizado en las prácticas de laboratorio. La nota final del modulo será NF=0.6*EF+ 0.4*L.La nota final se calculará como la media aritmética de la nota de los dos modulos cursados por el estudiante: NF=0.5*M1+ 0.5*M2.
Bibliografía
Básico
-
Distributed systems: principles and paradigms
- Tanenbaum, A.S.; Steen, M. van,
Pearson Prentice Hall,
2007.
ISBN: 0136135536
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003206969706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Distributed systems: concepts and design
- Coulouris, G.F.; Dollimore, J.; Kindberg, T.; Blair, G,
Addison-Wesley/Pearson Education,
2012.
ISBN: 0273760599
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991000675069706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Concurrency: state models & Java programs
- Magee, J.; Kramer, J,
John Wiley & Sons,
2006.
ISBN: 0470093552
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003172149706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Programming Erlang: software for a concurrent world
- Armstrong, J,
Pragmatic Bookshelf,
2013.
ISBN: 9781937785536
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004002229706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Java concurrency in practice
- Goetz, B.; Peierls, T.; Bloch, J.; Bowbeer, J.; Holmes, D.; Lea, D,
Addison-Wesley,
2006.
ISBN: 0321349601
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003104049706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Introduction to parallel computing
- Grama, A.; Karypis, G.; Kumar, V.; Gupta, A,
Pearson Education,
2003.
ISBN: 0201648652
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003524559706711&context=L&vid=34CSUC_UPC:VU1&lang=ca
Complementario
-
Erlang programming
- Cesarini, F.; Thompson, S,
O'Reilly,
2009.
ISBN: 9780596518189
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003712929706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The art of multiprocessor programming
- Herlihy, M. [i 3 més],
Morgan Kaufmann Publishers is an imprint of Elsevier,
2021.
ISBN: 9780124159501
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005136978806711&context=L&vid=34CSUC_UPC:VU1&lang=ca
Capacidades previas
Concurrencia: conocimientos de Java a nivel de clases y objetos.Paralelismo: conocimientos básicos sobre arquitecturas paralelas, incluyendo multiprocesadores con memoria compartida y distribuida.
Distribución: conocimientos de la estructura interna y el funcionamiento de un sistema operativo y de una red de computadores.