12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de...

49
12-4-2004 1 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento Paralelo. Concurrencia por memoria compartida. Procesos y sincronización. Locks y Barreras. Semáforos. Monitores. Resolución de problemas concurrentes con sincronización por memoria compartida. Introducción a la programación paralela. Lenguajes, compiladores, bibliotecas y herramientas de desarrollo. Programación Concurrente 2004 - Clase 1 Concurrencia por pasaje de mensajes(MP). Mensajes asincrónicos. Mensajes sincrónicos. Remote Procedure Call (RPC). Rendezvous. Paradigmas de interacción entre procesos.

Transcript of 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de...

Page 1: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 1

Temas fundamentales del Curso

Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento Paralelo.

Concurrencia por memoria compartida. Procesos y sincronización. Locks y Barreras. Semáforos. Monitores. Resolución de problemas concurrentes con sincronización por memoria compartida.

Introducción a la programación paralela. Lenguajes, compiladores, bibliotecas y herramientas de desarrollo.

Programación Concurrente 2004 - Clase 1

Concurrencia por pasaje de mensajes(MP). Mensajes asincrónicos. Mensajes sincrónicos. Remote Procedure Call (RPC). Rendezvous. Paradigmas de interacción entre procesos.

Page 2: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 2

Metodología del Curso 2004

Teoría.Material para leer (bibliografía, InterNet, etc).Posibilidad de promoción de la Teoría.Preguntas teóricas en las clases.Pruebas teóricas para la promoción.

Práctica.Explicaciones y atención de consultas.Un examen parcial.Es necesario aprobarlo para que se corrijan los exámenes teóricos de la promoción.

Exposición final para los que tengan la promoción.Coloquio sobre un tema preparado por el alumno.

Programación Concurrente 2004 - Clase 1

Page 3: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 3

Objetivos del Curso

Plantear los fundamentos de la programación concurrente, estudiando su sintaxis y semántica, así como herramientas y lenguajes para la resolución de programas concurrentes.

Analizar el concepto de sistemas concurrentes que integran la arquitectura de hardware, el sistema operativo y los algoritmos que permiten la resolución de problemas concurrentes.

Vincular la concurrencia en software con los conceptos de procesamiento distribuido y paralelo, para tener los conceptos de soluciones multiprocesador con algoritmos concurrentes.

Programación Concurrente 2004 - Clase 1

Estudiar los conceptos fundamentales de comunicación y sincronización entre procesos, por memoria compartida y por mensajes.

Page 4: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 4

El escenario de la Concurrencia

Múltiples automóviles tratando de ir desde el punto A al punto B.Una ruta, un carril = secuencialidad, colisiones.Una ruta, múltiples carriles paralelismo, interacciones (?)Múltiples rutas procesamiento distribuido, heterogeneidad.

El ejemplo tiene la esencia de la concurrencia:

Los automóviles son tareas que deben ejecutarse.Los carriles y las rutas alternativas son los múltiples procesadores.Siempre los automóviles deberán sincronizarse (por ejemplo por las luces del tráfico) para no colisionar.La noción de paralelo y distribuido.

Programación Concurrente 2004 - Clase 1

Page 5: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 5

Conceptos de Concurrencia

Un thread de control = programación secuencial, monoprocesador.Múltiples threads de control procesos concurrencia.

Los procesos se comunican y sincronizan, en base a dos criterios:Exclusión mútua en el acceso a secciones críticas de código.Espera por condición.

La historia de la concurrencia=En los 60’s == Evolución de los sistemas operativos. Controladores de dispositivos independientes(canales). Multiprogramación.En los 70´s== Formalización de la concurrencia en los lenguajes.En los 80’s== Redes, procesamiento distribuido.En los 90’s == MPP , InterNet, CS, Web computing...Hoy== Cluster computing, Grid computing, Procesamiento masivo de datos distribuidos, Real Time Distributed systems...

Programación Concurrente 2004 - Clase 1

Page 6: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 6

Algunos conceptos del Hardware.

Procesadores y niveles de memoria.Memoria primaria. Memoria Caché.Niveles de memoria Caché.

Multiprocesadores de memoria compartida.Esquemas UMA (Uniform memory access) con Bus o Swith. (arquitecturas SMP- Symmetric multiprocessors)Esquemas NUMA para mayor número de procesadores distribuidos.

Multiprocesadores con memoria distribuida.Grado de acoplamiento de los procesadores.Memoria compartida distribuida.

Programación Concurrente 2004 - Clase 1

Page 7: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 7

Concurrencia: Clases de Aplicaciones

El primer tipo de aplicaciones se corresponde cuando ejecutamos N procesos independientes sobre M procesadores, con N > M. Un sistema de software de “multithreading” maneja simultáneamente tareas independientes, asignando (por ejemplo por tiempos) los procesadores de que dispone.

Ejemplos típicos:Sistemas de ventanas en PCs o WS.Time sharing en sistemas operativos multiprocesador.Sistemas de tiempo real en plantas industriales.

Programación Concurrente 2004 - Clase 1

Page 8: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 8

Concurrencia: Clases de Aplicaciones

El segundo tipo de aplicaciones es el cómputo distribuido: una red de comunicaciones vincula procesadores diferentes sobre los que se ejecutan procesos que se comunican esencialmente por mensajes. Cada componente del sistema distribuido puede hacer a su vez multithreading.

Ejemplos típicos:Servidores de archivos (recursos) en una red.Sistemas de Bases de datos distribuidas (bancos, reservas de vuelos).Servidores WEB distribuidos.Arquitecturas cliente-servidor.Sistemas tolerantes a fallas.

Programación Concurrente 2004 - Clase 1

Page 9: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 9

Concurrencia: Clases de Aplicaciones

El procesamiento paralelo es el tercer tipo de aplicaciones. Se trata de resolver un dado problema en el menor tiempo posible, utilizando una arquitectura multiprocesador en la que se pueda distribuir la tarea global en tareas (independientes? interdependientes?) que puedan ejecutarse en diferentes procesadores.Paralelismo de datos y paralelismo de procesos.

Ejemplos típicos: Cálculo científico. Modelos de sistemas (meteorología, movimiento planetario).Gráficos, procesamiento de imágenes, realidad virtual, procesamiento de video.Problemas combinatorios y de optimización lineal y no lineal. Modelos econométricos.

Programación Concurrente 2004 - Clase 1

Page 10: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 10

Paradigmas de resolución de programas concurrentes

Si bien el número de aplicaciones es muy grande, en general los “patrones” de resolución concurrente son pocos: 1-Paralelismo iterativo, 2-paralelismo recursivo, 3-productores y consumidores, 4-clientes y servidores, 5-pares que interactúan.

En el paralelismo iterativo un programa tiene un conjunto de procesos (posiblemente idénticos) cada uno de los cuáles tiene uno o más loops. Es decir cada proceso es un programa iterativo.La idea es que si estos procesos cooperan para resolver un único problema (ejemplo un sistema de ecuaciones) pueden trabajar independientemente y sincronizar por memoria compartida o envío de mensajes.

Programación Concurrente 2004 - Clase 1

Page 11: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 11

Paradigmas de resolución de programas concurrentes

En el paralelismo recursivo el problema general (programa) puede descomponerse en procesos recursivos que trabajan sobre partes del conjunto total de datos.Ejemplos clásicos son por ejemplo el sorting by merging o el cálculo de raíces en funciones continuas.

Los esquema productor-consumidor muestran procesos que se comunican. Es habitual que estos procesos se organicen en pipes a través de los cuáles fluye la información. Cada proceso en el pipe es un filtro que consume la salida de su proceso predecesor y produce una salida para el proceso siguiente.

Programación Concurrente 2004 - Clase 1

Page 12: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 12

Paradigmas de resolución de programas concurrentes

Cliente-servidor es el esquema dominante en las aplicaciones de procesamiento distribuido. Los servidores son procesos que esperan pedidos de servicios de múltiples clientes. Naturalmente unos y otros pueden ejecutarse en procesadores diferentes. Los mecanismos de invocación son variados (rendezvous y RPC por ejemplo). El soporte distribuido puede ser muy simple (LAN) o extendido a toda la WEB.

En los esquemas de pares que interactúan los procesos (que forman parte de un programa distribuido) resuelven partes del problema (normalmente mediante código idéntico) e intercambian mensajes para avanzar en la tarea. El esquema permite mayor grado de asincronismo que C-S.

Programación Concurrente 2004 - Clase 1

Page 13: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 13

Procesamiento Secuencial y Concurrente.

Analizar la resolución secuencial y mono-procesador (UNA máquina) de la fabricación de un objeto compuesto por N partes o módulos.

La solución secuencial nos fuerza a establecer un estricto orden temporal. Al disponer de sólo una máquina el ensamblado final del objeto sólo se podrá realizar luego de N pasos de procesamiento o fabricación.

Programación Concurrente 2004 - Clase 1

Page 14: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 14

Procesamiento Secuencial y Concurrente.

Ahora supongamos que tenemos N máquinas, una por componente o módulo a fabricar para ensamblar el objeto. Si no hubiera dependencia de la materia prima, cada una de las N máquinas puede trabajar al mismo tiempo===>MENOR tiempo para completar el proceso===>Paralelismo del hardware.

Dificultades: Distribución de la carga de trabajo, Necesidad de compartir recursos, Necesidad de esperarse en puntos clave, Necesidad de comunicarse, Dificultad con las fallas aisladas, Asignación de una de las N máquinas para efectuar el ensamblado final (Cual??).

Un concepto importante que surge de este ejemplo es el de Speed-Up.

Programación Concurrente 2004 - Clase 1

Page 15: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 15

Procesamiento Secuencial y Concurrente.

Hemos visto la solución secuencial directa y la solución paralela (multiplicando el hardware) en el problema de la fabricación de un objeto (sistema) de múltiples componentes (módulos). Ahora supongamos otro enfoque: una sóla máquina le dedica una parte del tiempo a cada componente del objeto final===> Concurrencia sin paralelismo de hardware===> Menor speed-up.

Dificultades: Distribución de la carga de trabajo, Necesidad de compartir recursos, Necesidad de esperarse en puntos clave, Necesidad de comunicarse, Dificultad con las fallas de software aisladas, Necesidad de recuperar el “estado” de cada proceso al retomarlo.

La concurrencia es un concepto de software no restringido a una arquitectura particular de hardware ni a un número determinado de procesadores.

Programación Concurrente 2004 - Clase 1

Page 16: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 16

Programa Concurrente

Un programa concurrente especifica dos o más programas secuenciales que pueden ejecutarse concurrentemente en el tiempo como tareas o procesos.

Un proceso o tarea es un elemento concurrente abstracto que puede ejecutarse simultáneamente con otros procesos o tareas, si el hardware lo permite. (recordar los TASKs de ADA).

Un programa concurrente puede tener N procesos habilitados para ejecutarse concurrentemente y un sistema concurrente puede disponer de M procesadores cada uno de los cuales puede ejecutar uno o más procesos.

Programación Concurrente 2004 - Clase 1

Page 17: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 17

Objetivos de los sistemas concurrentes

Ajustar el modelo de arquitectura de hardware y software al problema del mundo real a resolver.

Incrementar la perfomance, mejorando los tiempos de respuesta de los sistemas de procesamiento de datos, a través de un enfoque diferente de la arquitectura física y lógica de las soluciones.

Algunas ventajas que merecen comentarse son la velocidad de ejecución que se puede alcanzar, la mejor utilización de la CPU de cada procesador, y la explotación de la concurrencia inherente a la mayoría de los problemas reales.

Programación Concurrente 2004 - Clase 1

Page 18: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 18

Areas de estudio en Programación Concurrente

ELECCION DE LA GRANULARIDAD :Significa optimizar (para una dada aplicación) la relación entre el número de procesadores y el tamaño de la memoria total.

MANEJO DE LOS RECURSOS:Asignación de recursos compartidos, métodos de acceso a los recursos, bloqueo y liberación de recursos, seguridad y consistencia de los recursos.

SINCRONIZACIÓN:Se debe asegurar el orden correcto (incluyendo el tiempo) de las acciones que los procesos ejecutan. Este orden es dinámico e interdependiente.El objetivo de la sincronización es restringir las “historias”o “threads” de un programa concurrente sólo a las permitidas.

Programación Concurrente 2004 - Clase 1

Page 19: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 19

Sincronización en Programación Concurrente

Sincronización por exclusión mútuaSignifica asegurar que sólo un proceso tenga acceso a un recurso compartido en un instante de tiempo.Si el programa tiene “secciones críticas” que pueden compartir más de un proceso, la exclusión mútua evita que dos o más procesos puedan encontrarse en la misma sección crítica al mismo tiempo.

Sincronización por condición:Debe permitir bloquear la ejecución de un proceso hasta que se cumpla una condición dada.

Ejemplos de los dos mecanismos de sincronización en un problema de utilización de un área de memoria compartida (buffer limitado con productores y consumidores).

Programación Concurrente 2004 - Clase 1

Page 20: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 20

Comunicación y Prioridad en Programación Concurrente

La comunicación entre procesos concurrentes indica el modo en que se organiza y trasmiten datos entre tareas concurrentes.Esta organización requiere especificar protocolos para controlar el progreso y corrección de la comunicación.Los protocolos deben contemplar la posibilidad de pérdida de información.

Un proceso que tiene mayor prioridad puede causar la suspensión (pre-emption) de otro proceso concurrente. Análogamente puede tomar un recurso compartido, obligando a retirarse a otro proceso que lo tenga en un instante dado.

Programación Concurrente 2004 - Clase 1

Page 21: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 21

Conceptos relacionados con la Programación Concurrente

Dos o más procesos pueden entrar en deadlock, si por un error en la programación concurrente ambos se quedan esperando que el otro libere un recurso compartido.La ausencia de deadlock es una propiedad necesaria en los procesos concurrentes.

Una propiedad deseable en los sistemas concurrentes es el equilibrio en el acceso a los recursos compartidos por todos los procesos (fairness).

Dos situaciones NO deseadas en los programas concurrentes son la inanición de un proceso (no logra acceder a los recursos compartidos) y el overloading de un proceso (la carga asignada excede su capacidad de procesamiento).

Programación Concurrente 2004 - Clase 1

Page 22: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 22

Desventajas de la Programación Concurrente

En Programación Concurrente los procesos no son completamente independientes y comparten recursos. La necesidad de utilizar mecanismos de exclusión mútua y sincronización agrega complejidad a los programas ===> menor confiabilidad.

Los procesos iniciados dentro de un programa concurrente pueden NO estar “vivos”. Esta pérdida de la propiedad de liveness puede indicar deadlocks o una mala distribución de recursos.

La comunicación y sincronización produce un overhead de tiempo, inútil para el procesamiento Perder perfomance

Programación Concurrente 2004 - Clase 1

Hay un no determinismo implícito en el interleaving de los procesos concurrentes. Esto significa que dos ejecuciones del mismo programa no necesariamente son idénticas ===> dificultad para la interpretación y debug.

Page 23: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 23

Problemas asociados con la Programación Concurrente

La mayor complejidad en la especificación de los procesos concurrentes significa que los lenguajes de programación tienen requerimientos adicionales. ===> mayor complejidad en los compiladores y sistemas operativos asociados.

Aumenta el tiempo de desarrollo y puesta a punto respecto de los programas secuenciales. También puede aumentar el costo de los errores ===> mayor costo de los ambientes y herramientas de Ingeniería de Software de sistemas concurrentes.

Para obtener una real mejora de perfomance, se requiere adaptar el software concurrente al hardware paralelo.

Programación Concurrente 2004 - Clase 1

La paralelización de algoritmos secuenciales NO es un proceso directo, que resulte fácil de automatizar.

Page 24: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 24

Mecanismos de comunicación y sincronización entre procesos.

Memoria compartida:Los procesos intercambian mensajes sobre la memoria compartida o actúan coordinadamente sobre datos residentes en ella. Lógicamente los procesos no pueden operar simultáneamente sobre la memoria compartida, lo que obligará a BLOQUEAR y LIBERAR el acceso a la memoria.La solución más elemental será una variable de control tipo “semáforo” que habilite o no el acceso de un proceso a la memoria compartida.

Pasaje de Mensajes:Es necesario establecer un “canal” (lógico o físico) para trasmitir información entre procesos. También el lenguaje debe proveer un protocolo adecuado.Para que la comunicación sea efectiva los procesos deben “saber” cuando tienen mensajes para leer y cuando deben trasmitir mensajes.

Programación Concurrente 2004 - Clase 1

Page 25: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 25

Mecanismos de comunicación y sincronización entre procesos.

Independientemente del mecanismo de comunicación / sincronización entre los procesos, los lenguajes de programación concurrente deberán proveer primitivas adecuadas para la especificación e implementación de las mismas.

De un lenguaje de programación concurrente se requiere: Indicar las tareas o procesos que pueden ejecutarse concurrentemente. Mecanismos de exclusión mútua. Mecanismos de comunicación entre los procesos.

Recordar el ejemplo de ADA.

Programación Concurrente 2004 - Clase 1

Page 26: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 26

Resumen de conceptos

La Concurrencia es un concepto de software.La Programación Paralela se asocia con la ejecución concurrente en múltiples procesadores que pueden tener memoria compartida.La Programación Distribuída es un “caso” de concurrencia con múltiples procesadores y sin memoria compartida.

En Programación Concurrente la organización de procesos y procesadores constituyen la arquitectura del sistema concurrente.

Programación Concurrente 2004 - Clase 1

Especificar la concurrencia es esencialmente especificar los procesos concurrentes, su comunicación y sincronización.

Page 27: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 27

Paradigmas de resolución de programas concurrentes

Si bien el número de aplicaciones es muy grande, en general los “patrones” de resolución concurrente son pocos: 1-Paralelismo iterativo, 2-paralelismo recursivo, 3-productores y consumidores, 4-clientes y servidores, 5-pares que interactúan.

En el paralelismo iterativo un programa tiene un conjunto de procesos (posiblemente idénticos) cada uno de los cuáles tiene uno o más loops. Es decir cada proceso es un programa iterativo.La idea es que si estos procesos cooperan para resolver un único problema (ejemplo un sistema de ecuaciones) pueden trabajar independientemente y sincronizar por memoria compartida o envío de mensajes.

Programación Concurrente 2004 - Clase 1

Page 28: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 28

Paralelismo iterativo: multiplicación de matrices.

La solución secuencial:double a[n,n], b[n,n], c[n,n]; for [i = 0 to n-1] { for [j = 0 to n-1] { # compute inner product of a[i,*] and b[*,j] c[i,j] = 0.0; for [k = 0 to n-1] c[i,j] = c[i,j] + a[i,k]*b[k,j]; } }

El loop interno (índice k) calcula el producto interior de la fila i de la matriz a por la columna j de la matriz b y obtiene c[i,j].Acciones paralelas posibles...

Programación Concurrente 2004 - Clase 1

Page 29: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 29

Multiplicación de matrices. Paralelismo por filas o columnas.

co [i = 0 to n-1] { # Calcula las filas en paralelo for [j = 0 to n-1] { c[i,j] = 0.0; for [k = 0 to n-1] c[i,j] = c[i,j] + a[i,k]*b[k,j]; }}

co [j = 0 to n-1] { # Calcula las columnas en paralelo for [i = 0 to n-1] { c[i,j] = 0.0; for [k = 0 to n-1] c[i,j] = c[i,j] + a[i,k]*b[k,j]; }} Programación Concurrente 2004 - Clase 1

Page 30: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 30

Multiplicación de matrices. Ahora con n2 procesos.

co [i = 0 to n-1, j = 0 to n-1] { # TODAS las filas y columnas c[i,j] = 0.0; for [k = 0 to n-1] c[i,j] = c[i,j] + a[i,k]*b[k,j]; }

co [i = 0 to n-1] { # FILAS en paralelo co [j = 0 to n-1] { # COLUMNAS en paralelo c[i,j] = 0.0; for [k = 0 to n-1] c[i,j] = c[i,j] + a[i,k]*b[k,j]; }}

Programación Concurrente 2004 - Clase 1

Page 31: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 31

Multiplicación de matrices. P procesadores con N/P > 1.

Un procesador WORKER se encargará de un subconjunto de filas o columnas de la matriz resultado. El tamaño del “strip” óptimo es un problema muy interesante para balancear costo de procesamiento con costo de comunicaciones.

process worker[w = 1 to P] { # strips en paraleloint first = (w-1) * n/P; # Primer fila del stripint last = first + n/P - 1; # Ultima fila del strip for [i = first to last] { for [j = 0 to n-1] { c[i,j] = 0.0; for [k = 0 to n-1] c[i,j] = c[i,j] + a[i,k]*b[k,j]; } }} Programación Concurrente 2004 - Clase 1

Page 32: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 32

Aspectos de la Programación Secuencial

Toda la Programación Secuencial se puede expresar con 3 clases de instrucciones básicas: ASIGNACIÓN, ALTERNATIVA (decisión) e ITERACION (repetición con condición).

asignación simple: x = e, sentencia compuesta asignación: x = x + 1; y = y – 1; z= x+y; swap: v1 :=: v2 skip Termina inmediatamente y no tiene efecto sobre ninguna variable de programa.

Programación Concurrente 2004 - Clase 1

Page 33: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 33

Aspectos de la Programación Secuencial

 Sentencias de alternativa: IF B S B expresión booleana (condición), S una instrucción simple o compuesta

B “guarda” a S pues S no se ejecuta si B no es verdadera.Puede existir una condición ELSE para ¬B.

En muchos casos pueden existir alternativas múltiples (CASE)Las guardas son evaluadas en algún orden arbitrario. Elección no determinística. Si ninguna B es verdadera, el IF no tiene efecto

Programación Concurrente 2004 - Clase 1

Page 34: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 34

Aspectos de la Programación Secuencial

 Sentencias de alternativa iterativa múltiple: DO B1 S1 B2 S2 ....... Bn Sn

OD

Las sentencias guardadas son evaluadas y ejecutadas hasta que todas las guardas sean falsas.(relacionar con el SELECT –ACCEPT de ADA). La elección es no determinística si más de una guarda es verdadera.

Programación Concurrente 2004 - Clase 1

Page 35: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 35

Aspectos de la Programación Secuencial

La repetición e iteración tienen una forma general que se puede expresar con una instrucción del tipo FOR-ALL:FA cuantificadores = Secuencia de Instrucciones AFCada cuantificador especifica un rango de valores para una variable de iteración (con un rango y una condición Such That):variable = expr_inicial to expr_final st B

El cuerpo del for-all se ejecuta una vez por cada valor de la variable de iteración.Si hay cláusula such-that, la variable de iteración toma sólo los valores para los que B es verdadera.Si hay más de un cuantificador el cuerpo del fa se ejecuta para cada combinación de valores.

Programación Concurrente 2004 - Clase 1

Page 36: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 36

Concurrencia y Sincronización

Programa concurrente dos o más procesos cooperantes.

Múltiples threads de control (en el mismo t ?), uno por cada proceso.

Los procesos interactúan comunicándose sincronización

Problema interferencia: un proceso toma una acción que invalida las suposiciones hechas por otro proceso.

co S1 // ..... // Sn oc ejecuta las Si concurrentementeLa ejecución del co termina cuando todas las Si teminaron

Programación Concurrente 2004 - Clase 1

Page 37: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 37

Acciones atómicas y sincronización

Ejecución de un programa concurrente interleaving de las acciones atómicas ejecutadas por procesos individualesInteracción no todos los interleavings son aceptables.

La sincronización debe prevenir los interleavings indeseables.

Sincronizar => Combinar acciones atómicas de grano fino (fine-grained) en acciones (compuestas) de grano grueso (coarse grained) que den la exclusión mutua.

Sincronizar=> Demorar un proceso hasta que el estado de programa satisfaga algún predicado (por condición).

Programación Concurrente 2004 - Clase 1

Page 38: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 38

Acciones atómicas y sincronización. Atomicidad de grano fino.

Acción atómica hace una transformación de estado indivisibleLos estados intermedios en la implementación de la acción no deben ser visibles para los otros procesos= Se debe implementar por Hardware.

Analicemos la atomicidad de la operación de asignación...a:=b

La lectura y escritura de las variables x,y,z son atómicas.y = 1; x = 0; z=2;co x = y + z // y = x + y // z = 4 oc

= Analicemos los posibles resultados si tenemos tres procesadores ejecutando los procesos concurrentes (no necesariamente de la misma velocidad)

Programación Concurrente 2004 - Clase 1

Page 39: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 39

Acciones atómicas y sincronización. Atomicidad de grano fino.

Cuáles serían los posibles “threads” del programa concurrente especificado??

Qué sucedería si tenemos un cambio en el tercer proceso:

y = 1; x = 0; z=2;co x = y + z // y = x + y // z = z - 1 oc

Se podría probar corrección??

Programación Concurrente 2004 - Clase 1

Page 40: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 40

Acciones atómicas y sincronización

En lo que sigue, supondremos máquinas con las siguientes características:Los valores de los tipos básicos se almacenan en elementos de memoria leídos y escritos como acciones atómicas

Los valores se cargan en registros, se opera sobre ellos, y luego se almacenan los resultados en memoria

Todo resultado intermedio de evaluar una expresión se almacena en registros o en memoria privada del proceso

Programación Concurrente 2004 - Clase 1

Cada proceso tiene su propio conjunto de registros

Page 41: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 41

Acciones atómicas y sincronización

= Si una expresión e en un proceso no referencia una variable alterada por otro proceso, la evaluación será atómica, aunque requiera ejecutar varias acciones atómicas de grano fino.

Si una asignación x=e en un proceso no referencia ninguna variable alterada por otro proceso, la ejecución de la asignación será atómica

De algún modo habrá que “proteger” la variable compartida o especificar un orden de precedencia en las posibles operaciones concurrentes.

Programación Concurrente 2004 - Clase 1

Pero... normalmente los programas concurrentes no son disjuntos

Page 42: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 42

Especificación de la sincronización.

En general, necesitamos ejecutar secuencias de sentencias como una única acción atómica

=Mecanismo de sincronización para construir una acción atómica de grano grueso (coarse grained) como secuencia de acciones atómicas fine grained que aparecen como indivisibles.

En lo que sigue e indica que la expresión e debe ser evaluada atómicamente

Programación Concurrente 2004 - Clase 1

Page 43: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 43

Especificación de la sincronización.

await se debe implementar en su forma más general (exclusión mutua y sincronización por condición)

Sólo exclusión mutua SEjemplo: x = x + 1 ; y = y + 1

El estado interno en el cual x e y son incrementadas resulta invisible a los otros procesos que referencian x o y.

Programación Concurrente 2004 - Clase 1

Page 44: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 44

Especificación de la sincronización.

Sincronización por condición await B Ejemplo: await count > 0

await B puede ser implementado como busy waiting o spinning:

do (not B) skip od

Acción atómica incondicional no contiene una condición B

Acción atómica condicional sentencia await con guarda B

Programación Concurrente 2004 - Clase 1

Page 45: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 45

Propiedades de seguridad(safety) y vida(liveness) en Concurrencia

Una propiedad de un programa concurrente es un atributo que resulta verdadero para cualquiera de los threads de ejecución del mismo.Toda propiedad puede ser formulada en términos de dos clases de propiedades: seguridad y vida.

La clase de propiedades de “seguridad” se refiere a la NO ocurrencia de eventos “malos”. Por ejemplo son clásicas las propiedades de seguridad ausencia de deadlock y ausencia de interferencia (exclusión mútua) entre procesos.

La clase de propiedades de “vida” se refiere a la posibilidad de ocurrencia de eventos “buenos”. Por ejemplo son clásicas: asegurar que un pedido de servicio será atendido, asegurar que un mensaje llega a destino, que un proceso eventualmente alcanzará su sección crítica, etc=> dependen de las políticas de scheduling.

Programación Concurrente 2004 - Clase 1

Page 46: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 46

Propiedades de procesos concurrentes

Fairness: trata de garantizar que los procesos tengan chance de avanzar, sin importar lo que hagan los demás

Una acción atómica en un proceso es elegible si es la próxima acción atómica en el proceso que será ejecutadoSi hay varios procesos, hay varias acciones atómicas elegibles

Una política de scheduling determina cuál será la próxima en ejecutarse

Programación Concurrente 2004 - Clase 1

Page 47: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 47

Propiedades de procesos concurrentes

Fairness Incondicional. Una política de scheduling es incondicionalmente fair si toda acción atómica incondicional que es elegible eventualmente es ejecutada.

Fairness Débil. Una política de scheduling es débilmente fair si es incondicionalmente fair y toda acción atómica condicional que se vuelve elegible eventualmente es ejecutada si su guarda se convierte en true y de allí en adelante permanece true.

No es suficiente para asegurar que cualquier sentencia await elegible eventualmente se ejecuta: la guarda podría cambiar el valor (de false a true y nuevamente a false) mientras un proceso está demorado. (Recordar el caso de lectores-escritores de ADA)

Programación Concurrente 2004 - Clase 1

Page 48: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 48

Propiedades de procesos concurrentes

Fairness Incondicional. Una política de scheduling es incondicionalmente fair si toda acción atómica incondicional que es elegible eventualmente es ejecutada.

Fairness Fuerte: Una política de scheduling es fuertemente fair si es incondicionalmente fair y toda acción atómica condicional que se vuelve elegible eventualmente es ejecutada pues su guarda se convierte en true con infinita frecuencia.

Relacionar lo anterior con los esquemas de scheduling que tienen “memoria”para favorecer a los procesos retrasados==> Prioridad dinámica.

Programación Concurrente 2004 - Clase 1

Page 49: 12-4-20041 Temas fundamentales del Curso Conceptos básicos. Concurrencia y arquitecturas de procesamiento. Multithreading, Procesamiento Distribuido, Procesamiento.

12-4-2004 49

Tareas para la próxima clase

En lo posible leer los cápítulos 1 y 2 del texto “Foundations of Mutithreaded, Parallel and Distributed Programming” de Gregory Andrews. Addison Wesley 2000. Leer los ejemplos de paralelismo recursivo, productores y consumidores, clientes y servidores y el código de la multiplicación de matrices distribuida del Capítulo 1 del Andrews.

Investigue las primitivas de programación concurrente de un lenguaje de programación que NO sea ADA.

Programación Concurrente 2004 - Clase 1

Analice un caso conocido de accion atómica de grano grueso: una transacción completa sobre una BD. Explique como protegería la atomicidad de la misma, suponiendo que hay acceso concurrente a la BD. Qué significa el AWAIT en este caso?