SlideShare a Scribd company logo
1 of 378
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 1
25/12/2022
Diseño de programas
paralelos y distribuidos
Unidad 2
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Aplciaciones Distribuidas
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 2
25/12/2022
Objetivo general de la Unidad 2
Conocer los fundamentos, técnicas y aplicaciones
del procesamiento paralelo y distribuido que
permitan el diseño de aplicaciones que requieran
cómputo de altas prestaciones.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 3
25/12/2022
Unidad 2: Diseño de programas
paralelos y distribuidos
• Tecnologías y paradigmas de la programación paralela
– Cómputo Paralelo y Programación en Paralelo.
– Modelos de arquitectura (MIMD, SIMD, SISD, MISD).
– Paradigmas: programación basada en memoria compartida vs. distribuida
– Modelos de programación (Mapreduce, Hadoop, etc.).
• Algoritmos paralelos y distribuidos
– Técnicas de algoritmos paralelos (PRAM, APRAM, C3)
– Particionamiento
– Comunicación
– Aglomeración y Mapeo (PCAM)
• Equilibrio de carga de tareas
– Medición de balance de carga.
– Asignación dinámica de procesos.
– Balanceo de carga dinámico, robusto y no centralizado
• Evaluación de algoritmos paralelos y distribuidos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 4
25/12/2022
Introducción
 Paralelismo: hacer más de una cosa
“simultáneamente, a la vez”.
• tamaño de datos: 4 - 8 - 16 - 32 - 64 - ... bit
• ejecución de instrucciones (ILP):
segmentación, superescalares, VLIW...
• paralelismo de datos/
paralelismo funcional o de programas
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 5
25/12/2022
Introducción
• Los problemas que pueden resolverse mediante
un algoritmo paralelo son, obviamente, muy
heterogéneos.
• Suelen ser problemas de complejidad elevada,
aún no perteneciendo al grupo de problemas
intratables (el número de operaciones crece de
forma rápida –p.e. exponencial– con el tamaño
del problema).
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 6
25/12/2022
Problemas P, NP y NP-Completos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 7
25/12/2022
Problemas P, NP y NP-Completos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 8
25/12/2022
Introducción
 Dentro del conjunto de problemas tratables (el
número de operaciones crece polinómicamente con el
tamaño del problema) se suelen dar dos situaciones
que hacen necesaria la programación paralela:
- Problemas de gran dimensión
- Problemas de tiempo real
Otro tipo de problemas: problemas de gran desafío,
por su relevancia social (genoma humano,
meteorología, clima, fenómenos sísmicos…).
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 9
25/12/2022
Unidad 2: Diseño de programas
paralelos y distribuidos
• Tecnologías y paradigmas de la programación paralela
– Cómputo Paralelo y Programación en Paralelo.
– Modelos de arquitectura (MIMD, SIMD, SISD, MISD).
– Paradigmas: programación basada en memoria compartida vs. distribuida
– Modelos de programación (Mapreduce, Hadoop, etc.).
• Algoritmos paralelos y distribuidos
– Técnicas de algoritmos paralelos (PRAM, APRAM, C3)
– Particionamiento
– Comunicación
– Aglomeración y Mapeo (PCAM)
• Equilibrio de carga de tareas
– Medición de balance de carga.
– Asignación dinámica de procesos.
– Balanceo de carga dinámico, robusto y no centralizado
• Evaluación de algoritmos paralelos y distribuidos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 10
25/12/2022
Cómputo Paralelo
• Procesadores: El programa ejecuta en un conjunto de
procesadores que están fuertemente ligados
• Ligazón (comunicación)
• Los procesadores cooperan íntimamente y se sincronizan
• Los procesadores comparten memoria principal
• Los procesadores comparten otros recursos del ordenador
(periféricos, etc.)
• Requiere:
• Se requiere el hardware de un ordenador
• Se requiere el hardware de varios procesadores (CPUs)
• Se requiere un mecanismo de interconexión y control de los
procesadores
• Ejemplo: Ejecución de programas en un ordenador con
núcleo dual.
• Cuestión: ¿Puede un mismo programa secuencial ejecutar en
múltiples procesadores?
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 11
25/12/2022
Modelos de Programación Paralela
• La mayoría de los esfuerzos en
paralelización están dentro de las
siguientes categorias:
– Códigos pueden ser paralelizados usando
librerías de paso de mensaje tal como MPI.
– Códigos pueden ser paralelizados usando
directivas de compilación tal como OpenMP.
– Códigos pueden ser escritos en nuevos
lenguajes paralelos.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 12
25/12/2022
 Diferentes modelos sobre distintos aspectos de la
programación paralela:
- Modelo arquitectónico: arquitectura de la máquina
-- multiprocesadores: memoria compartida
-- multicomputadores: paso de mensajes
-- modelos mixtos
- Modelo de programación: herramientas de alto nivel
(OpenMP, MPI).
- Modelo de coste: permite evaluar el coste del
algoritmo.
Programación en Paralelo
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 13
25/12/2022
 Es diferente paralelizar un algoritmo o programa
secuencial, que programar en paralelo una
aplicación desde el comienzo.
 En el primer caso, interesa detectar aquellas partes
del código con un mayor coste computacional.
Lo más habitual es utilizar trazas, timers, profiling, etc., y ejecutar en
paralelo aquellas partes que ofrecen un buen rendimiento (por
ejemplo, paralelismo incremental de OpenMP).
Programación en Paralelo
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 14
25/12/2022
 En el segundo caso, se empieza analizando las carac-
terísticas de la propia aplicación, para determinar
el/los algoritmos paralelos más adecuados.
OJO: conviene partir de un buen algoritmo ya optimizado (¡no hay que
reinventar la rueda!).
 Aunque no hay un “camino único”, se suele
recomendar utilizar un determinado procedimiento o
metodología.
Programación en Paralelo
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 15
25/12/2022
PARALELIZADOR
AUTOMÁTICO
DIRECTIVAS
OPENMP
DIRECTIVAS
HPF
THREADS PASO DE
MENSAJES
TIEMPO
DE
DESARROLLO
MODELO DE PROGRAMACIÓN
GRANO GRUESO
REHACER EL CÓDIGO
GRANO FINO
RETOCAR EL CÓDIGO
La Solución Depende de (Tiempo, Dinero, Rendimiento)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 16
25/12/2022
 La programación paralela añade, respecto a la
programación secuencial, una serie de aspectos a
tener en cuenta:
- Concurrencia (sincronización, comunicación).
- Asignación de datos y código a procesadores.
- Acceso simultáneo a datos compartidos
(sincronización).
- Escalabilidad.
Programación en Paralelo
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 17
25/12/2022
 Otra diferencia entre la programación secuencial y la
paralela es la forma en que los módulos que
componen una aplicación se pueden ensamblar:
- Composición secuencial: los módulos se ejecutan
secuencialmente.
- Composición paralela: diferentes módulos se ejecutan
simultáneamente sobre conjuntos disjuntos de procesos
(escalabilidad y localidad).
- Composición concurrente: diferentes módulos se
ejecutan concurrentemente sobre los mismos procesos
(solapamiento computación y comunicación).
Programación en Paralelo
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 18
25/12/2022
Concurrencia
• El acceso concurrente a datos compartidos puede
resultar en inconsistencias
• Mantener la consistencia de los datos requiere el
uso de mecanismos que aseguren la ejecución
ordenada de procesos que cooperan
• La concurrencia implica las siguientes cuestiones de
diseño:
– Comunicación entre procesos.
– Compartición y competencia por los recursos.
– Sincronización de la ejecución de varios procesos.
– Asignación del tiempo de procesador a los procesos.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 19
25/12/2022
Coordinación de procesos
• Los procesos en algunos casos deben coordinarse y compartir
información.
• Los mecanismos de coordinación de procesos garantizan la
exclusión mutua para los recursos compartidos.
• Cuando un proceso está modificando un recurso compartido,
otros procesos no deberían poder cambiar ese recurso.
• Al diseñar el intercambio de información entre procesos, debe
tener en cuenta el hecho de que estos procesos pueden estar
funcionando a diferentes velocidades.
– Un proceso genera información; el otro proceso consume esa
información.
– Si el productor se ejecuta más rápido que el consumidor,
nueva información podría sobrescribir un ítem de información
leído previamente antes de que el proceso consumidor lea la
información original.
– Si el proceso consumidor se ejecuta más rápido que el
proceso productor, el mismo ítem podría leerse dos veces.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 20
25/12/2022
Condiciones de Carrera
(race conditions)
• Problema
– Las condiciones de carrera se dan cuando:
• varios procesos accesan y manipulan los mismos
datos concurrentemente, y
• el resultado final depende del orden particular en
que los accesos se llevaron a cabo
• Solución
– Usar mecanismos de sincronización para que
solamente un proceso pueda manipular los
datos a la vez
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 21
25/12/2022
Condiciones de Carrera
(race conditions)
• Problema
– Las condiciones de carrera se dan cuando:
• varios procesos accesan y manipulan los mismos
datos concurrentemente, y
• el resultado final depende del orden particular en
que los accesos se llevaron a cabo
• Solución
– Usar mecanismos de sincronización para que
solamente un proceso pueda manipular los
datos a la vez
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 22
25/12/2022
Ejemplo de variable compartida con
condición de carrera
thread A:
run() { v = v + 1; }
thread B:
run() { v = v * 2; }
v = 5
v = 12 v = 11
RMW issues
Read-Modify-Write
v = 6 v = 10
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 23
25/12/2022
Ejemplo de variable compartida con
condición de carrera
thread A:
run() { v = v + 1; }
thread B:
run() { w = v * 2; }
v = 5
v = 6
w = 12
v = 6
w = 10
RMW issues
Read-Modify-Write
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 24
25/12/2022
Sección Crítica
• Zonas críticas
– secciones del programa que sólo debe ejecutar un
thread en un momento dado, o habría problemas
• Protocolo
– si está ocupado, espero
– si está libre
• Entro
– cierro por dentro
• hago mis cosas – yo solito
• Salgo
– dejo abierto
– si hay alguien esperando, que entre
– si no, queda abierto
java mantiene una cola de
threads esperando
a que el cerrojo(lock) se abra
todo esto es indivisible
ATÓMICO
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 25
25/12/2022
Operación atómica
– la que se ejecuta sin cambiar de thread
– ejemplo
• int n = v++;
NO es atómica => posibles carreras
– solución: envolverla
– véase AtomicInteger
class IntAtomico {
private int v;
synchronized int inc() {
v++;
return v;
}
}
IntAtomico va = new IntAtomico();
int n = va.inc();
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 26
25/12/2022
AtomicInteger
• java.util.concurrent.atomic
• AtomicInteger class AtomicCounter {
private AtomicInteger c = new AtomicInteger(0);
public void increment() {
c.incrementAndGet();
}
public void decrement() {
c.decrementAndGet();
}
public int value() {
return c.get();
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 27
25/12/2022
Estados de un thread(hilo o hebra)
new Thread()
NEW
start()
RUNNABLE
BLOCKED
WAITING
TIMED WAITING
TERMINATED
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 28
25/12/2022
Problema de la Sección Crítica
1. Exclusión mutua: Si el proceso Pi está
ejecutando su sección crítica, ningún otro
proceso puede estar ejecutando la suya
2. Progreso: Si ningún proceso está ejecutando su
sección crítica y existe algún otro proceso que
desea entrar a la suya, entonces ese proceso no
puede posponerse indefinidamente
3. Espera limitada: Debe haber un límite en el
número de veces que otros procesos pueden
entrar a sus secciones críticas después de que
un proceso a solicitado entrar a la suya, y antes
de que se le otorgue el acceso a ese proceso
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 29
25/12/2022
Sincronización en Java
• no estructuradas
– locks
– Semáforos
– barreras
• estructuradas
– bloques synchronized
– métodos synchronized
– monitores
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 30
25/12/2022
Lock (candado o cerrojo)
• Un cerrojo proporciona exclusión mutua en el acceso
a datos compartidos.
• El cerrojo es una variable de dos estados (libre y
ocupado) y tiene dos operaciones públicas:
– Acquire (lock)– Espera a que el cerrojo esté libre y lo
adquiere.
– Release (unlock)– Libera el cerrojo; si había alguien
esperando en Acquire, se lo entrega a alguno de los
procesos que esperan.
• Inicialmente, se considera que el cerrojo está libre. Un
cerrojo puede ser considerado como un semáforo
binario inicializado a true.
• Para acceder a datos compartidos en exclusión
mutua, se usa un cerrojo. Antes de usar los datos
compartidos se llama a Acquire y tras manipular los
datos, se libera el cerrojo con Release
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 31
25/12/2022
Lock (candado o cerrojo)
• el mecanismo de cerrojos alrededor de zonas
de acceso exclusivo
– es un mecanismo pesimista
• siempre me protejo por si acaso
– puede hacer que una thread quede esperando a
que otra termine
• si la otra casca, puede esperar eternamente
• puede ser que una tarea de alta prioridad quede
esperando a que termine otra de menor prioridad
– priority inversión
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 32
25/12/2022
Priority inversión
• C (prioridad baja) cierra un lock
• A (prioridad alta) quiere el lock que tiene C
• B (prioridad media) monopoliza la cpu
• resultado
– B se lo lleva todo mientras A espera tontamente
ej: https://en.wikipedia.org/wiki/Mars_Pathfinder
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 33
25/12/2022
Continuando con… Lock (candado o cerrojo)
Un ReentrantLock es un mecanismo de exclusión mutua
que permite que los subprocesos vuelvan a entrar en un lock
sobre un recurso (varias veces) sin una situación de
interbloqueo.
• package java.util.concurrent.locks
– interface Lock
– class ReentrantLock implementa Lock
• OJO:
– hay que asegurarse de que se libera el cerrojo; por
ejemplo, si hay excepciones
lock.lock();
... operaciones ...
lock.unlock();
try {
lock.lock();
zona exclusiva
} finally {
lock.unlock();
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 34
25/12/2022
Lock: estado compartido protegido
public class Contador {
private int cuenta = 0;
private final Lock LOCK = new ReentrantLock();
nadie puede
meterse
por enmedio estado protegido
public int incrementa(int v) {
try {
LOCK.lock();
cuenta += v;
return cuenta;
} finally {
LOCK.unlock();
}
}
public int decrementa(int v) {
try {
LOCK.lock();
cuenta -= v;
return cuenta;
} finally {
LOCK.unlock();
}
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 35
25/12/2022
Lock: atomicidad
• las operaciones lock() y unlock()
son indivisibles
– no se permite que un thread se vea desplazado
por otro mientras se están ejecutando
• esta misma propiedad sirve para todas las
formas de sincronización:
– semáforos y bloques sincronizados
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 36
25/12/2022
Lock: Variables de Condición
Lock cerrojo;
InsertaEnCola() {
cerrojo.Acquire();
añade un elemento en la cola;
cerrojo.Release();
}
ExtraeDeCola() {
cerrojo.Acquire();
if (algo en la cola)
extrae(cosa);
cerrojo.Release();
return cosa;
}
v1
v2
v3
Proceso productor
Proceso consumidor
La rutina ExtraeDeCola() debería esperar a que hubiera algún elemento en la cola.
• Si lo que hacemos es sleep(dormir) al hilo hasta que alguien deposite un
elemento en la cola, resulta que el programa se bloquea, ya que al estar retenido
el cerrojo, ningún otro hilo puede manipular la cola.
• Por tanto hay que liberar el cerrojo antes de esperar.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 37
25/12/2022
Variables de Condición
• Como vemos, el ejemplo de
la cola circular nos muestra
un problema que los cerrojos
no son capaces de resolver.
• Una posible solución sería…
ExtraeDeCola() {
cerrojo.Acquire();
while (cola vacía) {
cerrojo.Release();
cerrojo.Acquire();
}
extrae(cosa);
cerrojo.Release();
return cosa;
}
Esta solución funciona, pero utiliza espera
activa: el hilo está continuamente entrando
y saliendo de la sección crítica para revisar
si la cola está vacía.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 38
25/12/2022
Variables de Condición
• La idea de las variables condición es tener un
mecanismo que permita a un proceso
– abandonar una sección crítica y a la misma vez
– quedarse bloqueado en espera de una condición que alguien le
debe notificar.
• Variable condición: representa una cola de hilos que
esperan algo (una condición) dentro de una sección
crítica (indicada por un cerrojo).
• Hay dos operaciones posibles:
– x.wait() – un proceso que invoca la operación es suspendido
– x.signal() – se continúa a uno de los procesos que invocaron
x.wait()
• Sólo se permite trabajar con una variable condición si
disponemos del cerrojo.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 39
25/12/2022
Variables de Condición
• La solución al problema de la cola, con variables de
condición, tendría esta forma:
Lock cerrojo;
Condition condición;
InsertaEnCola() {
cerrojo.Acquire();
añade un elemento en la cola;
condición.signal(&cerrojo); // avisamos de que hay algo
cerrojo.Release();
}
ExtraeDeCola() {
cerrojo.Acquire();
while (cola vacía)
condición.Wait(&cerrojo); // nos bloqueamos hasta que nos
// hagan signal()
extrae(cosa);
cerrojo.Release();
return cosa;
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 40
25/12/2022
Variables de Condición
Lock cerrojo;
InsertaEnCola() {
cerrojo.Acquire();
añade un elemento en la cola;
condición.signal(&cerrojo);
cerrojo.Release();
}
ExtraeDeCola() {
cerrojo.Acquire();
while (cola vacía)
condición.Wait(&cerrojo);
extrae(cosa);
cerrojo.Release();
return cosa;
}
v4
Proceso productor
Proceso consumidor
signal
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 41
25/12/2022
RentrantLock con variables de
condición
Una variable de condición se crea la primera vez que se
crea un ReentrantLock y se invoca su newCondition() :
Luego, se puede invocar sus métodos wait() y signal()
entre lock y unlock
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 42
25/12/2022
RentrantLock con variables de
condición
• colas dentro de un cerrojo
15
public void InsertaEnCola(E x)
throws InterruptedException {
lock.lock();
while (data.size() >= SIZE)
isFull.await();
data.add(x);
isEmpty.signalAll();
lock.unlock();
}
public E ExtraeDeCola()
throws InterruptedException {
lock.lock();
while (data.isEmpty())
isEmpty.await();
E value = data.remove(0);
isFull.signalAll();
lock.unlock();
return value;
}
private Lock lock = new ReentrantLock();
private Condition isEmpty = lock.newCondition();
private Condition isFull = lock.newCondition();
private final List<E> data = new ArrayList<>(size);
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 43
25/12/2022
Sincronización en Java
• no estructuradas
– locks
– Semáforos
– barreras
• estructuradas
– bloques synchronized
– métodos synchronized
– monitores
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 44
25/12/2022
Semáforos
• Otro mecanismo que pueden utilizar los
threads para proteger secciones de código
son los semáforos.
• Las operaciones principales son:
– esperar a que el contador sea distinto de 0 y le
resta 1 al contador antes de continuar sumar 1 al
contador
– Si el contador es 0 indicará que el thread no
puede acceder a la sección crítica, y
– Si es >0, podrán acceder tantos threads como
valor tenga el contador.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 45
25/12/2022
Semáforos
Semáforos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 46
25/12/2022
Semáforos
• package java.util.concurrent
– class Semaphore
• Semaphore (int permisos)
• semáforo binario: gestiona 1 permiso de acceso
– void acquire()
– void release()
• semáforo general: gestiona N permisos
– void acquire(int n)
• solicita N permisos del semáforo
si no hay bastantes, espero
• cuando los haya, sigo
– void release(int n)
• devuelvo N permisos al semáforo
• si hay alguien esperando, se intenta satisfacerle
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 47
25/12/2022
Semáforo binario
semaforo.acquire();
... operaciones ...
semaforo.release();
semaforo.acquire();
try {
... operaciones ...
} finally {
semaforo.release();
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 48
25/12/2022
Semáforo binario
• Correcto uso de operaciones:
– semaforo.acquire() …. semaforo.release()
• Mal uso de operaciones:
– semaforo.acquire() … semaforo.acquire()
– Omitir semaforo.acquire() o
semaforo.release() (o ambos)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 49
25/12/2022
Uso de los semáforos
1. limitar el número de threads en la zona crítica
16
Semaphore sm = new Semaphore(5) # Max: 5-threads
InputStream fetch_page(String ref):
sm.acquire();
try {
URL url = new URL(ref);
return url.openStream();
} finally {
sm.release();
}
Semaphore semaphore = new Semaphore(N)
semaphore.acquire();
try {
… zona crítica …
} finally {
semaphore.release();
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 50
25/12/2022
Uso de los semáforos
2. coordinar threads
thread_1
stmt_1;
stmt_2;
done.release();
stmt_3;
stmt_4;
Semaphore done = new Semaphore(0)
thread_2
stmt_1;
stmt_2;
done.acquire();
stmt_3;
stmt_4;
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 51
25/12/2022
Ejemplo de Semáforo
public class Parking {
private final int capacidad; // número de coches que caben
private final Semaphore semaphore;
// constructor
public ParkingSemaphore(int capacidad) {
this.capacidad = capacidad;
semaphore = new Semaphore(capacidad);
}
// barreras de entrada
public void entra() throws InterruptedException {
semaphore.acquire(1);
}
// barreras de salida
public void sale() {
semaphore.release(1);
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 52
25/12/2022
Ejemplo de semáforo con N permisos
public class EsperaNTareas {
public static void main(String[] args)
throws InterruptedException {
Semaphore contador = new Semaphore(0);
List<Tarea> tareas = new ArrayList<Tarea>();
tareas.add(new Tarea(contador));
// ... N veces
for (Tarea tarea : tareas)
tarea.start();
// espera a que todas acaben
contador.acquire(tareas.size());
}
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 53
25/12/2022
Ejemplo de semáforo con N permisos
public class Tarea extends Thread {
private Semaphore contador;
public Tarea( Semaphore contador ){
this.contador = contador;
}
public void run() {
// hace su tarea
contador.release();
}
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 54
25/12/2022
Semáforos vs. Variables de condición
• Una diferencia fundamental entre
semáforos y variables condición es que
éstas no tienen memoria.
– En las variables de condición, si alguien
ejecuta una operación signal sin que nadie
haya estado esperando, esa operación se
pierde para siempre,
– mientras que en un semáforo se “recuerda”
para posteriores waits.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 55
25/12/2022
Semáforos vs. ReentrantLock
• Ningún thread es propietario de un semáforo
binario.
– Sin embargo, el último thread que bloqueó(locked)
correctamente un recurso es el propietario de un
reentrantLock.
• Un semáforo binario proporciona un mecanismo
de sincronización de alto nivel al permitir una
implementación personalizada de un mecanismo
de bloqueo y recuperación de interbloqueos. Por
lo tanto, da más control a los desarrolladores.
– Sin embargo, el reentrantLock es un mecanismo de
sincronización de bajo nivel con un mecanismo de
bloqueo fijo(fixed locking).
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 56
25/12/2022
Semáforos vs. ReentrantLock (cont…)
• Los semáforos binarios proporcionan un
mecanismo de liberación no apropiativa.
– Por lo tanto, cualquier subproceso puede liberar el
permiso para la recuperación de un interbloqueo
de un semáforo binario.
• Por el contrario, la recuperación de
interbloqueo es difícil de lograr en el caso de
un ReentrantLock.
– Por ejemplo, si el subproceso propietario de un
ReentrantLock entra en modo de suspensión o
espera infinita, no será posible liberar el recurso y
se producirá una situación de interbloqueo.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 57
25/12/2022
Comentarios sobre locks y semáforos
• son de bajo nivel
• primitivas independientes
• requieren que todos colaboren
• se puede hacer cualquier cosa, esten bien
o no
– abrir y cerrar no están necesariamente
emparejados sintácticamente
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 58
25/12/2022
Sincronización en Java
• no estructuradas
– locks
– Semáforos
– barreras
• estructuradas
– bloques synchronized
– métodos synchronized
– monitores
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 59
25/12/2022
Barreras
• Este mecanismo de sincronización está
destinado a los grupos de procesos
• Algunas aplicaciones se dividen en fases y
tienen la regla de que ningún proceso puede
continuar a la siguiente fase sino hasta que
todos los procesos estén listos para hacerlo.
• Para lograr este comportamiento, se coloca
una barrera al final de cada fase.
• Cuando un proceso llega a la barrera, se
bloquea hasta que todos los procesos han
llegado a ella.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 60
25/12/2022
Barreras
• La operación de una barrera se ilustra en la figura
Uso de una barrera. (a) Procesos que se acercan a una barrera. (b) Todos
los procesos menos uno bloqueados en la barrera. (c) Cuando el último
proceso llega a la barrera, se deja pasar a todos.
Barrera
A
B
C
D
Proceso
Tiempo
(a)
Barrera
A
B
C
D
Tiempo
(b)
Barrera
A
B
C
D
Tiempo
(c)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 61
25/12/2022
Barreras en java: CyclicBarrier
• CyclicBarrier(int required)
– Una sincronización que permite que un conjunto
de subprocesos esperen unos a otros para llegar
a un punto de barrera común.
• void await()
versión con código a ejecutar cuando se abre
• CyclicBarrier(int parties, Runnable action)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 62
25/12/2022
Barreras en java: CyclicBarrier
coordinar threads
CyclicBarrier barrier = new CyclicBarrier(3)
thread_1
block_11();
barrier
.await();
block_12();
barrier
.await();
block_13();
barrier
.await();
thread_2
block_21();
barrier
.await();
block_22();
barrier
.await();
block_23();
barrier
.await();
thread_3
block_31();
barrier
.await();
block_32();
barrier
.await();
block_33();
barrier
.await();
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 63
25/12/2022
Sincronización en Java
• no estructuradas
– locks
– Semáforos
– barreras
• estructuradas
– bloques synchronized
– métodos synchronized
– monitores
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 64
25/12/2022
Sincronización en Java
• Java proporciona sincronización a nivel del
lenguaje
• Cada objeto en Java tiene asociado un lock
– Se adquiere al invocar un método synchronized
– Se libera cuando se sale del método synchronized
• Hilos que esperan por adquirir un objeto lock se
colocan en el entry set (conjunto de espera)
para ese objeto lock
Cada objeto tiene
asociado un entry set.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 65
25/12/2022
Sincronización en Java (cont.)
Métodos insert() y remove() synchronized
¿Problemas?
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 66
25/12/2022
Recordando… Modelo de estados
wait set
entry set Object lock
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 67
25/12/2022
Sincronización en Java: wait/notify()
• Cuando un hilo invoca wait():
1. El hilo libera el objeto lock
2. El estado del hilo se coloca en Blocked
3. El hilo se coloca en el wait set del objeto
• Cuando un hilo invoca notify():
1. Un hilo arbitrario del wait set se selecciona
2. T se mueve del wait set al entry set
3. El estado de T se coloca en Runnable
Entry set y wait set
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 68
25/12/2022
Sincronización en Java (cont.)
• Llamar a notify() selecciona un hilo arbitrario del
wait set
– Es posible que el hilo seleccionado no esté esperando
por la condición por la que ha sido notificado
• La llamada a notifyAll() selecciona todos los
hilos en el wait set y los mueve a todos al entry
set
• En general notifyAll() es una estrategia más
conservadora que notify()
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 69
25/12/2022
Sincronización en Java
• no estructuradas
– locks
– Semáforos
– barreras
• estructuradas
– bloques synchronized
– métodos synchronized
– monitores
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 70
25/12/2022
Bloques synchronized
• synchronized (objeto) {
// zona de exclusión mutua
}
synchronized (cc) {
... operaciones ...
}
cc: Object compartido
el cerrojo se libera al salir del
bloque:
• última sentencia
• return interno
• excepción
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 71
25/12/2022
Estado compartido protegido
public class Contador {
private int cuenta = 0;
private final Object LOCK = new Object();
public int incrementa(int v) {
synchronized (LOCK) {
cuenta += v;
return cuenta;
}
}
public int decrementa(int v) {
synchronized (LOCK) {
cuenta -= v;
return cuenta;
}
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 72
25/12/2022
Bloques Mutex
• Un mutex es un dispositivo de exclusión mutua
útil para proteger estructuras de datos
compartidas de modificaciones concurrentes, y
para implementar secciones críticas y monitores.
• Los mutex tienen dos estados posibles:
– Unlocked/release (libre, no ocupado por ningún
thread) o
– Locked/acquire (ocupado por un thread).
• Un mutex nunca puede estar ocupado por más de
un thread
• Si un thread intenta ocupar un mutex ya ocupado,
quedará a la espera de que el thread que tienen el
mutex lo libere.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 73
25/12/2022
Bloques Mutex
• Los mutex permiten bloquear una parte del
código, de forma que ningún otro hilo de
ejecución pueda accederla mientras no se
libere el bloqueo.
• De esta forma, si los threads bloquean el
código que comprueba el número de
entradas que quedan y lo liberan después de
realizada la venta, obligamos a que primero
se ejecute la parte crítica un proceso y luego
la otra.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 74
25/12/2022
Bloques Mutex
En lugar de sincronizar todo un método, se puede
sincronizar bloques de código
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 75
25/12/2022
Bloques Mutex
Sincronización de bloques usando wait()/notify()
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 76
25/12/2022
¿Mutex es un semáforo binario?
• Se suele decir que mutex es un
semáforo binario que garantiza la
exclusión mutua en las operaciones que
se ejecutan sobre el semáforo
general…¡Pero no lo es!
• El propósito de mutex y semáforo es
diferente. Tal vez, debido a la similitud en
su implementación, un mutex podría
parecerse a un semáforo binario.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 77
25/12/2022
¿Mutex es un semáforo binario?
Mutex
• Estrictamente hablando, un
mutex es un mecanismo de
bloqueo utilizado para
sincronizar el acceso a un
recurso.
– Solo una tarea (puede ser un
subproceso o un proceso
basado en la abstracción del
sistema operativo) puede
adquirir la exclusión mutua.
• Significa que hay propiedad
asociada con un mutex, y solo
el propietario puede liberar el
bloqueo (mutex).
Semáforos
• El semáforo es un mecanismo
de señalización (señales del
tipo "Terminé, puedes
continuar…").
– Por ejemplo, si está
escuchando canciones
(suponga que es una tarea) en
su teléfono móvil y, al mismo
tiempo, su amigo lo llama, se
activa una interrupción en la
que una rutina de interrupción
de servicio(ISR) señala
despertar(wakeup) la tarea de
procesamiento de llamadas.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 78
25/12/2022
Sincronización en Java
• no estructuradas
– locks
– Semáforos
– barreras
• estructuradas
– bloques synchronized
– métodos synchronized
– monitores
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 79
25/12/2022
Métodos synchronized
• usando this como cerrojo
– es lo mismo…
pero escribes menos y te equivocas menos
public synchronized int incrementa(int v) {
cuenta += v;
return cuenta;
}
public synchronized int decrementa(int v) {
cuenta -= v;
return cuenta;
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 80
25/12/2022
Comentarios sobre bloques y métodos
synchronized
• son de alto nivel
• delimitan una zona
• requieren que todos colaboren
• un thread que ya posee un cerrojo puede entrar
en zonas protegidas por el mismo cerrojo
– esto permite que un método synchronized llame a
otro método synchronized
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 81
25/12/2022
Sincronización en Java
• no estructuradas
– locks
– Semáforos
– barreras
• estructuradas
– bloques synchronized
– métodos synchronized
– monitores
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 82
25/12/2022
Monitores
• clases donde
– se monitoriza toda modificación del estado
• el estado es privado
• todos los accesos son zonas críticas
• en java
– todos las campos son privados
– todos los métodos son synchronized
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 83
25/12/2022
Monitores: Ejemplo
public class Contador {
private int cuenta = 0;
public synchronized int getCuenta() {
return cuenta;
}
public synchronized int incrementa(int v) {
cuenta += v;
return cuenta;
}
public synchronized int decrementa(int v) {
cuenta -= v;
return cuenta;
}
}
synchronized garantiza
•
•
acceso exclusivo
variables actualizadas
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 84
25/12/2022
Monitores
• Abstracción de alto
nivel que proporciona
un mecanismo efectivo
y conveniente para la
sincronización entre
procesos
• Solo un proceso puede
estar activo dentro del
monitor en un
momento dado
Sintaxis de un Monitor
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 85
25/12/2022
Esquema de un Monitor
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 86
25/12/2022
Monitores
• SO provee semáforos o mutexes.
• Lenguaje provee enunciados para monitores.
• Compilador usa primitivas del SO para
traducir los procedimientos del monitor de tal
manera que se considere la exclusión mutua.
• Programador no se preocupa de codificar
semáforos
• Programador sólo debe incluir las secciones
críticas como parte de un procedimiento de
monitor.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 87
25/12/2022
Monitor y Variable de condición
• Los procedimientos en un monitor se pueden
llamar siempre considerando la exclusión
mutua.
• Existe acceso coordinado a buffers y
variables compartidos.
• Pero como un proceso puede ir a sleep si no
pudiera continuar?
– Si necesitara que se complete un evento
– Tal vez este evento debe ser generado por otro
proceso.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 88
25/12/2022
Monitor y Variable de condición (cont…)
• Solución:
– Uso de variables de condición, y
– Uso de operaciones wait() y signal() en esas
variables
• Si un proceso necesita bloquearse:
– (Por ejemplo, buffer está lleno y productor no
debe colocar más información)
– Proceso llama wait() en alguna variable de
condición x.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 89
25/12/2022
Monitor y Variable de condición (cont…)
• Cuando otro proceso quiere desbloquear
al proceso que está durmiendo:
– (por ejemplo?).
– El proceso llama signal() en la misma variable
de condicion x.
• Las variables de condición NO SON
CONTADORES.
– No almacenan señales signal.
– signal() debe ser llamado después de wait().
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 90
25/12/2022
Monitor con Variables de Condición
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 91
25/12/2022
Unidad 2: Diseño de programas
paralelos y distribuidos
• Tecnologías y paradigmas de la programación paralela
– Cómputo Paralelo y Programación en Paralelo.
– Modelos de arquitectura (MIMD, SIMD, SISD, MISD).
– Paradigmas: programación basada en memoria compartida vs. distribuida
– Modelos de programación (Mapreduce, Hadoop, etc.).
• Algoritmos paralelos y distribuidos
– Técnicas de algoritmos paralelos (PRAM, APRAM, C3)
– Particionamiento
– Comunicación
– Aglomeración y Mapeo (PCAM)
• Equilibrio de carga de tareas
– Medición de balance de carga.
– Asignación dinámica de procesos.
– Balanceo de carga dinámico, robusto y no centralizado
• Evaluación de algoritmos paralelos y distribuidos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 92
25/12/2022
Flynn's Taxonomy of Computers
Instructions applied
single multiple
Data
manipulated
single
multiple
SISD – single-
threaded process
MISD – pipeline
architecture
(uncommon)
SIMD – vector
processing
MIMD – multi-
threaded
programming
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 93
25/12/2022
Flynn's Taxonomy of Computers
Instructions applied
single multiple
Data
manipulated
single
multiple
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 94
25/12/2022
Flynn's Taxonomy of Computers
• SISD: Un único procesador ejecuta un solo flujo de instrucciones,
para operar sobre datos almacenados en una única memoria.
– Se corresponde con la arquitectura de Von Neumann.
• MISD: muchas unidades funcionales realizan diferentes
operaciones en los mismos datos.
• SIMD: misma instrucción, pero operan sobre diferentes conjuntos
de datos.
– Es decir, la misma instrucción es ejecutada de manera sincronizada por
todas las unidades de procesamiento.
• MIMD: tienen un número de procesadores que funcionan de manera
asíncrona e independiente.
– En cualquier momento, cualquier procesador puede ejecutar diferentes
instrucciones sobre distintos datos.
– Los sistemas distribuidos suelen clasificarse como arquitecturas MIMD;
bien sea explotando un único espacio compartido de memoria, o uno
distribuido
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 95
25/12/2022
Clasificaciones adicionales
• Un programa, múltiples datos (SPMD)
– Múltiples procesadores autónomos que trabajan
simultáneamente sobre el mismo conjunto de instrucciones
(aunque en puntos independientes) sobre datos diferentes.
– También se le llama 'un proceso, múltiples datos'.
• Múltiples programas, múltiples datos (MPMD)
– Múltiples procesadores autónomos que trabajan
simultáneamente sobre al menos dos programas
independientes.
– Normalmente este sistema elige a un nodo para ser el host o
administrador, que corre el programa y otorga los datos a todos
los demás nodos que ejecutan un segundo programa.
– Esos demás nodos devuelven sus resultados directamente al
administrador.
– Un ejemplo podría ser la consola de Sony PlayStation 3, que
tiene la arquitectura de procesador SPU/PPU.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 96
25/12/2022
Introducción
 Paralelismo
SIMD: Single-Instruction-Multiple-Data
- procesadores vectoriales
- procesadores en array
- GPUs
MIMD: Multiple-Instruction-Multiple-Data
Muchos procesos/hilos para dar una
respuesta más rápida (high performance)
(multiproceso, tolerancia a fallos, P copias (throughput))
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 97
25/12/2022
Modelos de Programación  Arquitecturas
• Correspondecia natural
– Paralelismo de datos → CM-2 (máquina SIMD)
– Paso de mensaje → IBM SP (MPP)
– Memoria compartida → SGI Origin, Sun E10000
• Correspondencia implementada
– HPF (un lenguaje paralelo de datos) y MPI (una
librería de paso de mensaje) -> sobre la mayoría de
los computadores paralelos
– OpenMP (un conjunto de directivas, etc. para
programación de memoria compartida) -> sobre
mayoría de máquinas de memoria compartida.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 98
25/12/2022
Diagram: SIMD
(vector processing)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 99
25/12/2022
red de
comunicación
SIMD computadores en array
array
P+M+E/S
 Muchos procesadores muy sencillos, poca
memoria, posibilidad de realizar operaciones de
entrada/salida.
Red de comunicación especial.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 100
25/12/2022
red de
comunicación
SIMD computadores array
Proc. de
control
front-end
array
P+M+E/S
 El procesador de control envía a todos los
procesadores la instrucción que tienen que
ejecutar síncronamente (BC). Cada procesador,
ejecuta la instrucción o no hace nada.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 101
25/12/2022
SIMD computadores array
Adecuados para cierto tipo de aplicaciones: tratamiento
de imágenes…
Ejemplo (X, Y, Z repartidos entre procesadores)
for (i=0; i<1000; i++)
if (Y[i] != 0) Z[i] = X[i] / Y[i];
else Z[i] = X[i];
paso 1: comprobar todos Y[i] != 0
paso 2: if (yes)hacer Z[i] = X[i] / Y[i]
(el resto, nada)
paso 3: if (no) hacer Z[i] = X[i]
(el resto, nada)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 102
25/12/2022
Diagram: MIMD
(multi-threaded programming)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 103
25/12/2022
Computadores MIMD
 MIMD (Multiple-Instruction-Multiple-
Data)
P procesos/hilos ejecutándose
simultáneamente.
Dos modelos básicos:
- memoria compartida
- memoria distribuida
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 104
25/12/2022
SPMD
• Todas las máquinas actuales son MIMD
(Multiple Instruction, Multiple Data) y pueden
explotar
– paralelismo de datos o
– paralelismo de tareas.
• El primer paradigma de programación paralela
es el SPMD: Single Program, Multiple Data
– Considerado una subcategoría de MIMD
– Cada procesador ejecuta una copia del código
fuente
– Paralelismo de datos (a través de la
descomposición de los datos) y
– Paralelismo de tareas (a través de funciones que
retornan al procesador ID)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 105
25/12/2022
SIMD vs SPMD
• En SPMD, múltiples procesadores
autónomos ejecutan simultáneamente el
mismo programa en puntos independientes.
– Contrario al paso a paso (lockstep) que SIMD
impone sobre los diferentes datos.
• Con SPMD, las tareas pueden ser
ejecutadas sobre CPU de propósito general.
– SIMD requiere un vector de procesadores para
manipular el flujo de datos.
– Note que las dos técnicas no son mutuamente
exclusivas.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 106
25/12/2022
Computadores MIMD
 Memoria compartida (shared memory)
M0 Mm–1 memoria principal
P0 P1 Pp–1 procesadores + MC
red de comunicación
E/S
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 107
25/12/2022
 Memoria compartida (shared memory)
- Espacio de direccionamiento único.
- Comunicación entre procesos por
medio de variables compartidas.
- Red de comunicación: un bus (o una
red multietapa).
- Nombres: multiprocesador, SMP,
UMA.
- Generalmente, “pocos” procesadores.
Computadores MIMD
P0 P1 Pp–1
M0 Mm–1
E/S
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 108
25/12/2022
Computadores MIMD
 Memoria distribuida (distributed memory)
Pp-1
Mp-1
E/S
P0
M0
E/S
Computador:
Pr + MC+
MP + E/S
red de comunicación
K
K
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 109
25/12/2022
Computadores MIMD
 Memoria distribuida (distributed memory)
- Un espacio de direccionamiento por
procesador.
- Comunicación entre procesos por
medio de paso de mensajes.
- Redes de comunicación habituales:
hipercubo, malla, toro...
- Nombres: multicomputador, MPP
- Generalmente, “muchos” procesadores.
Pp-1
Mp-1
E/S
P0
M0
E/S
K
K
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 110
25/12/2022
Computadores MIMD
 Otra opción: memoria compartida pero
físicamente distribuida
- El espacio de direccionamiento es
único, pero la utilización no es
homogénea: se ha creado una
jerarquía de memoria.
- La comunicación entre procesos se
hace por medio de variables
compartidas (lógicamente) y se
implementa mediante paso de
mensajes.
- Nombres: DSM, NUMA (MPP)
Pp-1
E/S
P0
E/S
K
M0
Mp-1
K
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 111
25/12/2022
Computadores MIMD
- SMP: multiprocesador de memoria compartida,
generalmente pocos procesadores comunicados
por un bus.
- MPP: sistema paralelo con muchos procesadores,
de memoria compartida o distribuida.
Generalmente, las máquinas más rápidas, sistemas con
hardware y software de comunicación y de cálculo
específico. Muy caras.
Pueden organizarse de manera jerárquica (p.e., los nodos
son sistemas SMP).
 Nomenclatura:
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 112
25/12/2022
Computadores MIMD
- Cluster: sistema paralelo construido a base de
hardware y software de propósito general.
Buena relación coste/velocidad.
PC
PC
PC
PC
PC
ethernet
El más simple: PC / ethernet
(Beowulf)
commodity / custom
Cada vez más, sistema paralelo
de propósito general.
 Nomenclatura:
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 113
25/12/2022
Computadores MIMD
- Constelación (constellation): un cluster, donde el
número de nodos es menor que el número de
procesadores de cada nodo.
 Nomenclatura:
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 114
25/12/2022
1
1
N
N
SIMD MIMD
SISD
inst.
datos
proc. array
proc vectoriales
MP
P
C
bus
memoria compartida
SMP
MPP/NUMA
Cluster
memoria distribuida
P
C
M
red general
Resumen
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 115
25/12/2022
Resumen
Espacio de direccionamiento
común privado
centralizada
(bus)
distribuida
(red)
Memoria
SMP
DSM, NUMA MPP
-
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 116
25/12/2022
Unidad 2: Diseño de programas
paralelos y distribuidos
• Tecnologías y paradigmas de la programación paralela
– Cómputo Paralelo y Programación en Paralelo.
– Modelos de arquitectura (MIMD, SIMD, SISD, MISD).
– Paradigmas: programación basada en memoria compartida vs. distribuida
– Modelos de programación (Mapreduce, Hadoop, etc.).
• Algoritmos paralelos y distribuidos
– Técnicas de algoritmos paralelos (PRAM, APRAM, C3)
– Particionamiento
– Comunicación
– Aglomeración y Mapeo (PCAM)
• Equilibrio de carga de tareas
– Medición de balance de carga.
– Asignación dinámica de procesos.
– Balanceo de carga dinámico, robusto y no centralizado
• Evaluación de algoritmos paralelos y distribuidos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 117
25/12/2022
Modelos de programación paralela
• Control
– Cómo se crea el paralelismo?
– Qué orden hay entre operaciones?
– Cómo los diferentes hilos de control se sincronizan?
• Data
– Qué data es privada y qué data se comparte?
– Cómo se accede o comunica la data compartida en forma
lógica?
• Operaciones
– Qué operaciones son atómicas (indivisibles)?
• Costos
– Cómo contabilizar los costos respectivos?
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 118
25/12/2022
Una arquitectura paralela
genérica
P P P P
Interconnection Network
M M M
M
° Físicamente, dónde está la memoria?
Memoria
P = procesador, M = memoria
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 119
25/12/2022
Parallel vs. Distributed Computation
Parallel processing refers to multiple CPUs within the same shared-
memory machine performing computation
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 120
25/12/2022
Parallel vs. Distributed Computation
Distributed computation involves multiple computers with their own
memory communicating over a network
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 121
25/12/2022
Modelo de Programación Basado en Memoria Compartida
- Un sistema multiprocesador donde todos los procesos pueden ejecutar el núcleo del
sistema operativo con el mismo privilegio se denomina multiprocesador simétrico (SMP)
- Todos los recursos se comparten los recursos (memoria y dispositivos entrada/salida)
- Un sistema operativo soporta multiprocesamiento simétrico siempre que se puedan
proteger regiones críticas (garantía de exclusión mutua)
- El planificador distribuye los procesadores disponibles entre los procesos
(threads)preparados para ejecutarse
. El paralelismo aparece cuando un programa ha sido codificado (o compilado) de modo
que fragmentos del mismo se ejecutan como procesos (threads) independientes.
Thread = proceso ligero (solo contexto hardware)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 122
25/12/2022
Modelo de Programación Basado en Memoria
Compartida
-Memoria compartida que puede ser accedida por cualquier proceso/thread envuelto en la
computación
-Computación basada en sincronización para garantizar la consistencia de los datos
-La comunicación se realiza mediante compartición de los datos
SECCIONES CRÍTICAS
P1 P2
PRIMITIVAS DE SINCRONIZACIÓN
VARIABLES COMPARTIDAS
• Secciones de código que referencian/modifican variables
compartidas
SE DEBE GARANTIZAR LA EXCLUSIÓN MUTUA
• Ejecución secuencial
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 123
25/12/2022
Problema de Consistencia de una Variable
Compartida
Actualización de un contador
SUMA
P1
(1) MOV SUM, Reg1
(2) ADD #1, Reg1
(3) MOV Reg1, SUM
P2
(1’) MOV SUM, Reg1
(2’) ADD #1, Reg1
(3’) MOV Reg1, SUM
(1’)(1)(2)(3)(2’)(3’) => SUMA = SUMA +1
(1)(1’)(2’)(3’)(2)(3) => SUMA = SUMA +1
(1)(2)(3)(1’)(2’)(3’) => SUMA = SUMA +2
SE DEBE GARANTIZAR LA EXCLUSIÓN MUTUA
responsabilidad del programador
P1
P2
. . .
SUM = SUM+1
. . .
. . .
SUM = SUM+1
. . .
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 124
25/12/2022
Funciones de Sincronización de Alto Nivel
Funciones:
Lock(flag):
Si flag == ON (activado) entonces espera a que flag == OFF
Si flag == OFF (desactivado) entonces flag = ON
Unlock(flag):
flag = OFF
-Garantizan el acceso secuencial a las secciones críticas
-Proporcionadas por el SO e implementadas en todos los lenguajes de alto nivel
Ejemplos (rutinas atómicas e indivisibles)
• Cierres (locks)
• Semáforos
• Barreras
CIERRES
Variable cierre: flag => ON(1) o OFF(0)
P_padre: SUM = 0
for k =1 to N do
Fork P_hijo(k)
end for
P_hijo: Lock (flag)
SUMA = SUMA + A(k)
Unlock(flag)
Join
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 125
25/12/2022
Funciones de Sincronización de Alto Nivel
SEMÁFOROS
Variable semáforo: S
Boleano: 0 ó 1 (como los cierres)
General: Entero >= 0
Funciones:
Wait(S) o P(S)
Si S == 0 entonces espera a que S > 0
Si S > 1 entonces S = S - 1
Signal(S) o V(S):
S = S + 1
Semáforos generales:
• Si se inicializa con M, puede haber M procesos en su sección crítica simultanamente
• Problemas productores-consumidores o lectores-escritores
P1: P(S)
Sección crítica de P1
v(S)
P2: P(S)
Sección crítica de P2
v(S)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 126
25/12/2022
Funciones de Sincronización de Alto Nivel
OTRAS FUNCIONES DEL API (lenguaje de alto nivel +. . .)
• Crear procesos
• Destruir procesos
• Identificar procesos
BARRERAS
-Los procesos esperan en un punto hasta que todos llegan a ese punto
0 0 1 3
1
2
3
BARRERA
2
BARRERA
0 1 2 3 BARRERA
Procesos: fork() crea copia del padre con nuevo espacio de
memoria virtual
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 127
25/12/2022

−
=
1
0
])
[
(
n
i
i
A
f
Ejemplo sencillo
Sea la suma :
• Descomposición paralela:
– Cada evaluación y cada suma parcial es una tarea.
• Asignar n/p números a cada procesador (1 al p)
– Cada uno computa independientemente sus resultados
“privados” y la suma parcial.
– Uno (o todos) recolectan las p sumas parciales y computa la
suma global.
Dos clases de data:
• Compartida lógicamente
– Los n números originales, la suma global.
• Privada lógicamente
– Las evaluaciones de las funciones.
– Y las sumas parciales individuales?????
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 128
25/12/2022
Modelo de prog. 1: Memoria compartida
• Un programa es una colección de hilos de control.
– Se pueden crear dinámicamente en algunos lenguajes.
• Cada hilo tiene variables privadas, ej: variables del stack local.
• También hay variables compartidas, ej: variables estáticas, de bloques
comunes, del heap global.
– Los hilos se comunican implícitamente escribiendo y leyendo
variables compartidas.
– Los hilos coordinan sincronizando en variables compartidas.
Pn
P1
P0
s s = ...
y = ..s ...
Memoria compartida
i: 2 i: 5 Memoria
privada
i: 8
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 129
25/12/2022
Sumando con memoria compartida
HILO 1
for i = 0, n/2-1
s = s + f(A[i])
HILO 2
for i = n/2, n-1
s = s + f(A[i])
static int s = 0;
• Problema: “race condition” en la variable s
• Una “race condition” o carrera por la data ocurre cuando:
- Dos procesadores (o 2 hilos) acceden a la misma
variable, y por lo meno uno la escribe.
- Los accesos son concurrentes (no sincronizados) así
que podrían pasar simultáneamente.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 130
25/12/2022
Sumando con memoria compartida
HILO 1
….
computa f([A[i]) y put en reg0
reg1 = s
reg1 = reg1 + reg0
s = reg1
…
HILO 2
…
computa f([A[i]) y put en reg0
reg1 = s
reg1 = reg1 + reg0
s = reg1
…
static int s = 0;
…
(s = 27)
• Sea s=27, f(A[i])=7 en Hilo 1, y f(A[i])=9 en Hilo 2
• Si el programa está bien, s debería ser 43 al final
• Pero puede ser 43, 34, o 36
• Las operaciones atómicas son lecturas y escrituras
• O se ve un número u otro, no medio número
• Las sumas se hacen en registros (privados generalmente)
7 9
27 27
34 36
36
34
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 131
25/12/2022
Sumando con memoria compartida (mejorado)
HILO 1
local_s1= 0
for i = 0, n/2-1
local_s1 = local_s1 + f(A[i])
s = s + local_s1
HILO 2
local_s2 = 0
for i = n/2, n-1
local_s2= local_s2 + f(A[i])
s = s +local_s2
static int s = 0;
• Como la suma es asociativa, se puede reordenar
• La mayor parte de cómputo es en variables privadas
- La frecuencia de uso de mem. compartida baja, lo que puede mejorar
la velocidad.
- Pero hay un “race condition” en el update de la v.compartida s
- Se puede solucionar añadiendo locks o candados (sólo un hilo puede
usar el lock a la vez; los otros deben esperar)
static lock lk;
lock(lk);
unlock(lk);
lock(lk);
unlock(lk);
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 132
25/12/2022
• Todos los procesadores se conectan a una memoria compartida grande.
– Nombre típico: Symmetric Multiprocessors (SMPs)
– SGI, Sun, HP, Intel, IBM (nodos del Millennium, SP)
– Chips multicore (hacía donde vamos)
• Difícil escalar a gran número de procesadores
– <= 32 procesadores es típico
• Ventaja: uniform memory access (UMA)
• Costo: es más barato acceder data en cache que en memoria principal.
Modelo de máquina 1: Shared Memory
P1
bus
$
memoria
P2
$
Pn
$
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 133
25/12/2022
Problemas escalando HW de mem. compartida
• Por qué no poner más procesadores (con mayor memoria?)
– El bus de memoria se vuelve cuello de botella
• Ej. del problema: Parallel Spectral Transform Shallow Water
Model (PSTSWM)
– Resultados (y gráfico) cortesía de Pat Worley del ORNL
– Es un núcleo vital en modelos atmosféricos
– 99% de ops. punto flotante son multiplicaciones o sumas, que
generalmente corren bien en toda CPU.
– Pero se barre toda la memoria con poco reuso de operandos→
se usa mucho bus y memoria compartida
– El experimento muestra performance serial, con una “copia” del
ejecutable corriendo independientemente en varios
procesadores.
• Es el mejor caso para mem.compartida: no comparte
• Pero la data no cabe en los registros/cache
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 134
25/12/2022
From Pat Worley, ORNL
Ejemplo
• Degradación de
performance es una
función “suave” del
número de procesos.
• No data compartida entre
ellos, así que debería
haber perfecto
paralelismo.
• (Código corrió en 18
niveles z y varios rangos
de niveles xy.)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 135
25/12/2022
Ventajas e Inconvenientes
Concurrencia: Dos o más threads se pueden ejecutar simultáneamente
Esta alternativa incrementa la eficiencia incluso en un solo procesador
Paralelismo: Hay concurrencia en máquinas multiprocesador
El paralelismo surge de modo automático en sistemas multiprocesador
Mejora de la respuesta de las aplicaciones
• Muchas aplicaciones cortan la interacción con el usuario cuando realizan una función
(Netscape,…)
• La programación con threads permite que cada función se realice por un thread de modo
independiente
Uso de sistemas multiprocesador de modo más eficiente
• Una aplicación paralelizada con threads no tiene que tener en cuenta el número de procesos
disponibles
• El rendimiento mejora automáticamente al añadir más procesos
Mejora la estructura de los códigos
• Muchos programas se estructuran de modo más lógico como unidades independientes
Uso de menos recursos del sistema
• Los sistemas UNIX clásicos soportan el concepto de thread (1 proceso = 1 thread)
• Sin embargo, el mantenimiento de procesos es muchos más costoso que el de threads
Mejora de rendimiento
• En un multiprocesador los programas se ejecutan en menor tiempo de ejecución
• En monoprocesador el tiempo de respuesta es menor, al poder solapar acciones (computo con
E/S)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 136
25/12/2022
Procesos versus Threads
 Espacio de direcciones con uno o más
threads de control
 Se caracterizan por un contexto software y
hardware
 La sobrecarga por creación o carga de
proceso es muy alta
 Hay mecanismos artificiales para que varios
procesos compartan alguna página de
memoria
 Un thread puede afectar a otro
 Los procesos se diseñaron teniendo en cuenta
la protección
 Flujo de control dentro de un proceso, que
coopera con otro thread para resolver un problema
 Los threads comparten un único espacio de
direcciones (comunicación sencilla y eficiente)
 Se caracterizan por un contexto hardware
 La sobrecarga por la creación o cambio de thread
es muy pequeña
 Los threads comparten memoria de modo natural
PROCESOS THREADS
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 137
25/12/2022
Procesos versus Threads
MODELO DE EJECUCIÓN EN SOLARIS
Thread vinculado (bounded)
Solo la aplicación ve estos threads
Planificación de threads para un proceso
Estructuras de thread kernel
Los threads kernel no asociados a un LWP
representan demonios de sistema como el
demonio de páginas, el thread de reloj, …
(threads del sistema)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 138
25/12/2022
Procesos versus Threads
THREADS DE APLICACIÓN
THREADS
• La gestión de los threads es responsabilidad del programador
• Cada thread tiene su propia pila
• Todos los threads comparten la memoria del proceso y el resto de contexto software
(ficheros abiertos, directorio actual, manejadores de señales, …)
• Los threads se ejecutan de modo independiente (y concurrente)
LWP
C$PAR DOALL
DO I=1, N
A(I) = B(I)
END DO
Sección Secuencial
I=N/2+1 I=3N/4+1
I=3N/4 I=N
Sección Secuencial
Bucle Paralelo
Fin Bucle Paralelo
I=1
I=N/4
I=N/4+1
I=N/2
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 139
25/12/2022
Ejemplos de Sistemas con Programación por
Medio de Threads
LIBRERÍAS DE THREADS Y APIS
La historia comienza en 1960 y dentro de UNIX en 1980
Todas soportan funciones muy semejantes
Sin embargo, hay diferencia en la API de las librerías de los diferentes
fabricantes
• DEC Alpha
• OS/2
• Windows NT
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 140
25/12/2022
Modelo de Programación Basado en Paso de Mensajes
-Consiste en la replicación del paradigma de programación secuencial
-El programador divide la aplicación en varios procesos que se ejecutan en diferentes
procesadores sin compartir memoria y comunicándose por medio de mensajes
Visión del programador: Lenguaje secuencial con variables privadas + Rutinas de paso
de mensajes
P P P
M
red de interconexión
“Lenguaje ensamblador de la programación paralela”
Mejores eficiencias que con el resto de lenguajes
M M
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 141
25/12/2022
Ventajas e Inconvenientes
Ventajas:
• Portable de modo eficiente a cualquier tipo de arquitectura: computador paralelo,
red de estaciones y a una única estación de trabajo
Inconvenientes:
• Bastante más complicado de programar y depurar que memoria compartida
• La eficiencia depende del programador
SPMD vs. MPMD
• Muchos computadores actuales solo soportan SPMD, el mismo ejecutable en cada
procesador: IBM SP2 y CRAY T3E
• No es problema:
main(int argc, char **argv)
if proceso es el controlador
control(argumentos)
else
worker(argumentos)
- Muchos sistemas actuales no soportan tiempo compartido, los procesadores están
siendo empleados por un único usuario (cola de trabajos en cada partición): IBM SP2 y
CRAY T3E
El tiempo compartido se encuentra en investigación
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 142
25/12/2022
Características de los Mensajes
-Un mensaje es una trasferencia de datos de un proceso a otro proceso
Información que caracteriza un mensaje:
• En qué variable están los datos que se envían
• Cuantos datos se envían
• Qué proceso recibe el mensaje
• Cuál es el tipo de dato que se envía
• Qué proceso envía el mensaje
• Donde almacenar los datos que se reciben
• Cuantos datos espera recibir el proceso receptor
Partes de un proceso que se comunica por medio de mensajes:
1.Acceso: El proceso se debe enrolar en el sistema de paso de mensajes, obtiene un
número y el número de procesos en el grupo
2.Ejecución: El proceso realiza operaciones interactuando con el resto por medio de
las rutinas de paso de mensajes
3.Finalización: Antes de terminar, el proceso debe desenrolarse del sistema de paso
de mensajes
send
receive
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 143
25/12/2022
Comunicación Punto a Punto
send receive
Envío síncrono y asíncrono (condición de finalización)
Síncrona:
•El proceso que realiza el envío recibe información sobre la recepción del
mensaje (fax)
•La comunicación se completa cuando el mensaje ha sido recibido
Asíncrona:
•El proceso únicamente conoce cuando se envía el mensaje (postal)
•La comunicación se completa tan pronto como el mensaje ha sido enviado
- Generalmente copia en un buffer
Operaciones bloqueantes y no bloqueantes (espera o no la condición de finalización)
• Operación no bloqueante: Se inicia la operación y se vuelve al programa, por
medio de otras funciones se puede comprobar la finalización de la operación (envío
fax con memoria y recepción fax estándar)
• Operación bloqueante: Solo se vuelve al programa cuando la operación ha
finalizado (envío y recepción fax estándar)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 144
25/12/2022
Comunicaciones Colectivas
0
1
2
3
BARRERA
2
0 1 3
BARRERA
0 1 2 3 BARRERA
broad. receive
receive
receive
P P
P P
Barrera Broadcast Reducción
Dato0 Dato3
Dato Dato
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 145
25/12/2022
Modelo 2: memoria distribuida compartida
• Memoria es compartida en forma lógica, pero distribuida
físicamente
– Cualquier CPU puede acceder cualquier dirección de memoria
– Líneas de cache (o páginas) se pasan entre máquinas
• Ejemplo: SGI Origin
– Escala a 512 (SGI Altix (Columbia) en NASA/Ames)
– Limitada por la coherencia del cache– como mantener las copias en
cache de la misma dirección iguales entre si.
P1
network
$
memory
P2
$
Pn
$
memory memory
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 146
25/12/2022
Problemas de performance al compartir
• Real compartir
–Escrituras frecuentes a la misma variable: cuello de
botella
–OK para read-only o para escrituras infrecuentes
–Técnica: hacer copias de un valor, uno por procesador,
si se puede en el algoritmo.
• Falso compartir
–Bloqueo del cache añade complejidad
–Dos diferentes variables en el mismo bloque de cache
–Técnica: colocar la data usada por cada procesador en
forma contigua, o por lo menos evitar intercalado en
memoria
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 147
25/12/2022
Modelo de program. 2: Paso de mensajes
• Programa consiste en colección de procesos nombrados.
– Se establecen al empezar a correr el programa
– Hilo de control y direcciones locales -- NO comparte data física.
– Data compartida lógica se divide entre procesadores locales.
• Los procesos se comunican por pares de send/receive
– Coordinación implícita en cada evento de comunicación.
– MPI (Message Passing Interface) es la librería más popular
Pn
P1
P0
y = ..s ...
s: 12
i: 2
Memoria
privada
s: 14
i: 3
s: 11
i: 1
send P1,s
Red
receive Pn,s
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 148
25/12/2022
Computar s = A[1]+A[2] en cada procesador
° 1er intento – qué podría salir mal?
Procesador 1
xlocal = A[1]
send xlocal, proc2
receive xremote, proc2
s = xlocal + xremote
Procesador 2
xlocal = A[2]
receive xremote, proc1
send xlocal, proc1
s = xlocal + xremote
° 2do intento
Procesador 1
xlocal = A[1]
send xlocal, proc2
receive xremote, proc2
s = xlocal + xremote
Procesador 2
xlocal = A[2]
send xlocal, proc1
receive xremote, proc1
s = xlocal + xremote
° Si send/receive funcionara como el teléfono? Como el correo?
° Si hubiera más de 2 procesadores?
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 149
25/12/2022
Modelo de máquina 2a: Memoria distribuida
• Cray T3E, IBM SP2
• Clusters de PC (Berkeley NOW, Beowulf)
• IBM SP-3, Millennium, CITRIS son máquinas de
memoria distribuída, pero los nodos son SMPs.
• Cada procesador tiene su propia memoria y cache pero
no puede acceder directamente a la memoria de otro
procesador.
• Cada “nodo” tiene una “Network Interface” (NI, tarjeta
de red o similar) para comunicación y sincronización
interconnect
P0
memory
NI
. . .
P1
memory
NI Pn
memory
NI
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 150
25/12/2022
Clusters de Tflop/s
He aquí algunos ejemplos de clusters configurados de
procesadores y redes separadas
• 72% del Top 500 (Nov 2005), 2 en el top 10
• Dell cluster en Sandia (Thunderbird) era #4 en Top 500
– 8000 Intel Xeons @ 3.6GHz
– 64 TFlops pico, 38 TFlops en Linpack
– Infiniband connection network
• Walt Disney Feature Animation (The Hive) era #96
– 1110 Intel Xeons @ 3 GHz
– Gigabit Ethernet
• Saudi Oil Company era #107
• Credit Suisse/First Boston era #108
• Para más detalles usar “statistics/sublist generator” en www.top500.org
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 151
25/12/2022
Modelo de máquina 2b: Internet/Grid Computing
• SETI@Home: corría en 500,000 PCs
– ~1000 años de CPU al día
– 485,821 años de CPU hasta el 2006
• Análisis sofisticado de señales
• Datasets distribuidos desde Radio Telescopio de Arecibo
Sgte. Paso:
Allen Telescope Array
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 152
25/12/2022
Mod. de progr. 2b: Espacio global de direcciones
• Programa consiste en colección de hilos nombrados.
– Se definen al inicio de la corrida.
– Data local y compartida, como en modelo de mem.compt.
– Pero la data compartida está dividida entre procesos.
– Aparentemente, data remota es cara computacionalmente
• Ejs: UPC, Titanium, Co-Array Fortran
• Programación en espacio global de direcciones es punto
medio entre paso de mensajes y mem. compartida.
Pn
P1
P0 s[myThread] = ...
y = ..s[i] ...
i: 2 i: 5 Private
memory
Shared memory
i: 8
s[0]: 27 s[1]: 27 s[n]: 27
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 153
25/12/2022
Modelo de máq. 2c: Espacio global de direcs.
• Cray T3D, T3E, X1, y cluster HP Alphaserver
• Clusters construidos con Quadrics, Myrinet, o Infiniband
• La NI soporta RDMA (Remote Direct Memory Access)
– NI puede acceder directamente a la memoria sin interrumpir a la CPU
– Un proces. puede hacer read/write a memoria como operación unilateral
(put/get)
– No solo un load/store como en máq. de mem.compartida
• Continua computando mientras espera a que la operación en memoria finalice.
– Data remota generalmente no está en cache local.
interconnect
P0
memory
NI
. . .
P1
memory
NI Pn
memory
NI
Espacio global
de dirs. puede
ser soportado en
varios grados
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 154
25/12/2022
Prog. paralela VS Prog. distribuida
Computación paralela
• Divide una aplicación en
tareas que se ejecutan al
mismo tiempo (fuertemente
acoplado)
• Se considera una aplicación a
la vez
• Objetivo: Acelerar la
ejecución de una aplicación
• Se ejecutan sobre
arqeuitecturas homogéneas
con memoria compartida
Computación distribuida
• Utiliza diferentes recursos
físicamente separados
• Se consideran varias
aplicaciones a la vez (pueden
pertenecer a diferentes
usuario)
• Objetivo: permitir que varios
usuarios trabajen en forma
cooperativa
• Se ejecutan sobre
arquitecturas heterogéneas,
abiertas y dinámicas
VS
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 155
25/12/2022
Resumen
• La programación paralela ejecuta masivamente
las tareas en equipos fuertemente conectados
(cientos o miles de procesadores sin mucha
distancia entre ellos)
• La programación distribuida, podría en un caso,
repartir las tareas en diversas partes del mundo.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 156
25/12/2022
Unidad 2: Diseño de programas
paralelos y distribuidos
• Tecnologías y paradigmas de la programación paralela
– Cómputo Paralelo y Programación en Paralelo.
– Modelos de arquitectura (MIMD, SIMD, SISD, MISD).
– Paradigmas: programación basada en memoria compartida vs. distribuida
– Modelos de programación (Mapreduce, Hadoop, etc.).
• Algoritmos paralelos y distribuidos
– Técnicas de algoritmos paralelos (PRAM, APRAM, C3)
– Particionamiento
– Comunicación
– Aglomeración y Mapeo (PCAM)
• Equilibrio de carga de tareas
– Medición de balance de carga.
– Asignación dinámica de procesos.
– Balanceo de carga dinámico, robusto y no centralizado
• Evaluación de algoritmos paralelos y distribuidos
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 157
25/12/2022
MapReduce
• MapReduce es un paradigma diseñado por
Google para hacer que un subconjunto de
problemas distribuidos sea más fácil de
codificar.
• Automatiza la distribución de datos y la
agregación de resultados
• Restringe las formas en que los datos
pueden interactuar para eliminar los
bloqueos
– ¡sin estado compartido! = ¡sin bloqueos!
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 158
25/12/2022
MapReduce
• Basado en la estrategia “Divide y
Vencerás” para explotar el potencial de
proceso del clúster.
• Divide el análisis completo en análisis
sobre trozos más pequeños de los datos.
– Cada uno de estos se realizará en una
máquina del clúster.
• Al final, se reúnen los resultados
obtenidos en cada máquina.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 159
25/12/2022
MapReduce
• Las dos tareas básicas de MapReduce son
(sorprendentemente):
– Map: aplica una función a los datos. P.ej: filtrar
ciertos valores
– Reduce: Combina los valores obtenidos por Map
• Primero se aplica Map, y luego se invoca
Reduce con los resultados obtenidos.
• Ambas trabajas con parejas (k,v) o listas de
parejas (k,v).
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 160
25/12/2022
MapReduce: Map? Reduce?
• Los mapeadores leen datos del sistema de
archivos y generan (normalmente) datos
modificados
• Los reductores recopilan toda la salida de los
mapeadores y generan (normalmente) datos
reducidos
• Los datos de salida se escriben en el disco.
• Todos los datos están en términos de pares
de <clave, valores>
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 161
25/12/2022
MapReduce: Data Flow
(Flujo del proceso)
Mapper 2
Mapper 0
Mapper 1
Reducer 0
Reducer 1
Out
0
Out
1
Input
Split
2
Split
1
Split
0
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 162
25/12/2022
MapReduce: Un programa de ejemplo
• Presentaré los conceptos de MapReduce usando el “ejemplo
típico” de MR, Word Count
• La entrada de este programa es un volumen de texto sin
formato, de tamaño no especificado
– podría ser KB, MB, TB, ¡no importa!
• El resultado es una lista de palabras y su recuento de
ocurrencias.
– Suponga que las palabras se dividen correctamente, ignorando
las mayúsculas y la puntuación.
• Ejemplo:
– The doctor went to the store. =>
» The, 2
» Doctor, 1
» Went, 1
» To, 1
» Store, 1
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 163
25/12/2022
MapReduce: Un programa de ejemplo
• Mapper
– Input: value: lines of text of input
– Output: key: word, value: 1
• Reducer
– Input: key: word, value: set of counts
– Output: key: word, value: sum
• Launching program
– Defines the job
– Submits job to cluster
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 164
25/12/2022
MapReduce: Un programa de ejemplo
● Forma general:
– Map:
– Reduce:
grep
– Map:
– Reduce:
(K1, V1)
(K2, list(V2))
* list(K2, V2)
* list(K3, V3)
●
(offset, line)
(match, [1, 1, ...])
* [(match, 1)]
* [(match, n)]
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 165
25/12/2022
Word Count Dataflow
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 166
25/12/2022
Input Splitter
(divisor de entrada)
• Es responsable de dividir su entrada en múltiples
partes
• Estos fragmentos se utilizan luego como entrada
para sus mapeadores
• Divisiones en límites lógicos. El valor
predeterminado es 64 MB por fragmento (chunk)
– Dependiendo de lo que esté haciendo, ¡64 MB
pueden ser MUCHOS datos! Tú puedes cambiarlo
• Por lo general, solo puede usar uno de los
splitters(divisores) incorporados, a menos que
esté leyendo un archivo con formato especial
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 167
25/12/2022
Mapper
(mapeador)
• Lee en el par de entrada <K,V> (una sección dividida
por el divisor de entrada)
• Da como salida un par <K’, V’>
• Ex. Para nuestro ejemplo de Word Count, con la
siguiente entrada:
– “The teacher went to the store. The store was closed; the
store opens in the morning. The store opens at 9am”.
• La salida obtenida sería:
– <The, 1> <teacher, 1> <went, 1> <to, 1> <the, 1> <store,
1> <the, 1> <store, 1> <was, 1> <closed, 1> <the, 1>
<store, 1> <opens, 1> <in, 1> <the, 1> <morning, 1> <the
1> <store, 1> <opens, 1> <at, 1> <9am, 1>
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 168
25/12/2022
Reducer
(reductor)
• Acepta la salida de Mapper y recopila valores en la
clave
– Todas las entradas con la misma clave deben ir al mismo
reductor!
• La entrada generalmente se ordena, la salida se emite
exactamente como está
• Para nuestro ejemplo, la entrada del reductor sería:
– <The, 1> <teacher, 1> <went, 1> <to, 1> <the, 1> <store,
1> <the, 1> <store, 1> <was, 1> <closed, 1> <the, 1>
<store, 1> <opens, 1> <in, 1> <the, 1> <morning, 1> <the
1> <store, 1> <opens, 1> <at, 1> <9am, 1>
• La salida sería:
– <The, 6> <teacher, 1> <went, 1> <to, 1> <store, 3> <was,
1> <closed, 1> <opens, 1> <morning, 1> <at, 1> <9am, 1>
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 169
25/12/2022
Combiner
(combinador)
• Esencialmente un reductor intermedio
• Es opcional
• Reduce la salida de cada mapeador,
reduciendo el bandwidth y la clasificación
• No se puede cambiar el tipo de su entrada
– Los tipos de entrada deben ser los mismos
que los tipos de salida
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 170
25/12/2022
Output Committer
• Es responsable de tomar la salida
reducida y enviarla a un archivo.
• Por lo general, este confirmador necesita
un input splitter correspondiente (para que
otro trabajo pueda leer la entrada)
• Nuevamente, los splitters incorporados
generalmente son lo suficientemente
buenos, a menos que necesite generar un
tipo especial de archivo
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 171
25/12/2022
Partitioner (Shuffler)
Particionador (Barajador)
• Decide qué pares se envían a qué reductor
• El valor predeterminado es simplemente:
– Key.hashCode() % numOfReducers
• User can override to:
– Proporcionar una distribución (más) uniforme de la
carga entre los reductores
– Es posible que sea necesario enviar algunos valores
al mismo reductor
• Ex. Para calcular la frecuencia relativa de un par de palabras
<W1, W2>, debe asegurarse de que todas las palabras W1
se envíen al mismo reductor
– Agrupamiento de resultados
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 172
25/12/2022
¿Qué hay en Hadoop?
• Hadoop es más que solo MapReduce
– Hadoop Distributed File System (HDFS)
– MapReduce
– Pig – high-level language for data analysis
– HBase – storage for semi-structured data
– Y mas…
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 173
25/12/2022
Physical Flow
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 174
25/12/2022
Historia de MapReduce y Hadoop
• Feb 2003 – First MapReduce library written at Google
• Dec 2004 – Google paper published
• July 2005 – Doug Cutting reports that Nutch now uses
new MapReduce implementation
• Jan 2006 – Doug Cutting joins Yahoo!
• Feb 2006 – Hadoop code moves out of Nutch into new
Lucene subproject
• Apr 2007 – Yahoo! running Hadoop on 1000-node
cluster
• Jan 2008 – Hadoop made an Apache Top Level Project
• Feb 2008 – Yahoo! generate production search index
with Hadoop
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 175
25/12/2022
Mi primer programa MapReduce
● Forma general:
– Map:
– Reduce:
grep
– Map:
– Reduce:
(K1, V1)
(K2, list(V2))
* list(K2, V2)
* list(K3, V3)
●
(offset, line)
(match, [1, 1, ...])
* [(match, 1)]
* [(match, n)]
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 176
25/12/2022
Arquitectura
• Rastreador de trabajo único(Single Job
Tracker)
– acepta el envío de trabajos
– divide el trabajo para mapeadores y reduce las
tareas
– distribuye las tareas a los rastreadores
– reprograma tareas fallidas
• Muchos rastreadores de tareas
– ejecutar tareas en máquinas virtuales
secundarias
– informar a Job Tracker del progreso
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 177
25/12/2022
Código
public void map(LongWritable key, Text val,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
if (pattern.matcher(val.toString()).matches()) {
output.collect(val, new IntWritable(1));
}
}
public void reduce(Text key, Iterator<IntWritable> vals,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
int sum = 0;
while (vals.hasNext()) {
sum += vals.next().get();
}
output.collect(key, new IntWritable(sum));
}
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 178
25/12/2022
Input y Output
• InputFormat produce divisiones y registros
• OutputFormat acepta registros
• Formatos de ejemplo
– Formato de entrada de texto/Formato de salida
– Formato de entrada de texto de valor clave
– Formato de entrada/formato de salida del archivo
de secuencia
• Los tipos son Hadoop Writables u otros
formatos de serialización
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 179
25/12/2022
Más ejemplos
● Sort
– Map:
– Reduce:
Word Count
(k, v)
(k, [v1, v2, ...])
➝ [(k, v)]
➝ [(k, v1), (k, v2), ...]
●
– Map: (offset, line) ➝ [(word1, 1), (word2, 1), ...]
– Reduce:(word, [1, 1, ...]) ➝ [(word, n)]
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 180
25/12/2022
Ejercicios para trabajos grupales
1. Encuentre las visitas por intervalo de tiempo de 5 minutos
para un sitio web dados sus registros de acceso.
2. Encuentre las páginas con más de 1 millón de visitas al día
para un sitio web dados sus registros de acceso.
3. Encuentre las páginas que enlazan con cada página en una
colección de páginas web.
4. Calcular la proporción de líneas que coinciden con una
expresión regular dada para una colección de documentos.
5. Ordene los datos tabulares por una columna primaria y
secundaria.
6. Encuentre las páginas más populares de un sitio web según
sus registros de acceso.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 184
25/12/2022
Hive y Pig
• Hive: aplicaciones de almacenamiento de datos en
Hadoop
– Query language HQL, variante de SQL
– Las tablas son almacenadas en HDFS como archivos
planos
– Desarrollado por Facebook, ahora open source
• Pig: Sistema de procesamiento de datos a gran escala
– Scripts son escritos en Pig Latin, un lenguaje de flujo de
datos
– Desarrollado por Yahoo!, ahora open source
• Idea en común:
– Proporcionar lenguaje de alto nivel para facilitar el
procesamiento de datos a gran escala.
– Lenguaje de nivel superior "compila" hasta llegar a tareas
(Jobs) Hadoop
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 185
25/12/2022
Componentes de Hive
• Shell: permite consultas interactivas
• Driver: session handles, fetch, execute
• Compiler: parse, plan, optimize
• Metastore: schema, location in HDFS, etc
• Tablas
– Tipos de columnas(int, float, string, boolean)
– Además, list: map (for JSON-like data)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 186
25/12/2022
Hive: Ejemplo
• Hive es parecido a una base de datos SQL
• Join relacional sobre dos tablas
– Tabla de palabras contadas de una coleccion de libros de Shakespeare
– Tabla de palabras contadas de Homer
SELECT s.word, s.freq, k.freq FROM shakespeare s
JOIN homer k ON (s.word = k.word) WHERE s.freq >= 1 AND k.freq >= 1
ORDER BY s.freq DESC LIMIT 10;
the 25848 62394
I 23031 8854
and 19671 38985
to 18038 13526
of 16700 34654
a 14170 8057
you 12702 2720
my 11297 4135
in 10797 12445
is 8882 6884
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 187
25/12/2022
Hive: Atras del escenario
SELECT s.word, s.freq, k.freq FROM shakespeare s
JOIN homer k ON (s.word = k.word) WHERE s.freq >= 1 AND k.freq >= 1
ORDER BY s.freq DESC LIMIT 10;
(TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_TABREF shakespeare s) (TOK_TABREF homer k) (= (.
(TOK_TABLE_OR_COL s) word) (. (TOK_TABLE_OR_COL k) word)))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR
TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL s) word)) (TOK_SELEXPR (.
(TOK_TABLE_OR_COL s) freq)) (TOK_SELEXPR (. (TOK_TABLE_OR_COL k) freq))) (TOK_WHERE (AND (>= (.
(TOK_TABLE_OR_COL s) freq) 1) (>= (. (TOK_TABLE_OR_COL k) freq) 1))) (TOK_ORDERBY
(TOK_TABSORTCOLNAMEDESC (. (TOK_TABLE_OR_COL s) freq))) (TOK_LIMIT 10)))
(una o más MapReduce jobs)
(Abstract Syntax Tree)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 188
25/12/2022
Pig Latin
• Lenguaje de flujo de datos
– Usuario especifica una secuencia de operaciones
para procesar datos
– Mas control sobre el proceso comparado con
lenguaje declarativo Hive QL
• Soporta varios tipos de datos
• Soporta Schema
• Funciones de soporte definidas por usuario
(UDF).
– (http://pig.apache.org/docs/r0.11.1/udf.html)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 189
25/12/2022
Pig: Características
• Dos componentes
– Lenguaje llamado Pig latin
– Compilador
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 190
25/12/2022
Ejemplo de tarea de analisis de datos
• Encuentra usuarios que tienden a visitar
“paginas rankeadas”
user url time
Amy www.cnn.com 8:00
Amy www.crap.com 8:05
Amy www.myblog.com 10:00
Amy www.flickr.com 10:05
Fred cnn.com/index.htm 12:00
url pagerank
www.cnn.com 0.9
www.flickr.com 0.9
www.myblog.com 0.7
www.crap.com 0.2
Paginas
Visitas
.
.
.
.
.
.
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 191
25/12/2022
Flujo de datos conceptual
Canonicalize URLs
Join
url = url
Group by user
Compute Average Pagerank
Filter
avgPR > 0.5
Load
Pages(url, pagerank)
Load
Visits(user, url, time)
Aplicaciones Distribuidas Carrera de Software
Ph.D. Franklin Parrales 192
25/12/2022
Flujo de datos de sistema
. . . . . .
Visits Pages
.
.
.
.
.
. join by url
the answer
load
load
canonicalize
compute average pagerank
filter
group by user
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos

More Related Content

What's hot

SO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas OperativosSO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas OperativosFranklin Parrales Bravo
 
Codigos de Error en una PC y Componentes de una PC que pueden averiarse
Codigos de Error en una PC y Componentes de una PC que pueden averiarseCodigos de Error en una PC y Componentes de una PC que pueden averiarse
Codigos de Error en una PC y Componentes de una PC que pueden averiarseLeonardo Lara
 
Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.argentm
 
Controles a proyectos de desarrollo de Software
Controles a proyectos de desarrollo de SoftwareControles a proyectos de desarrollo de Software
Controles a proyectos de desarrollo de SoftwareSantander David Navarro
 
Tsp (Team Software Process )
Tsp (Team Software Process )Tsp (Team Software Process )
Tsp (Team Software Process )silviachmn
 
Sistemas Operativos I- Algoritmo de QUANTUM
Sistemas Operativos I- Algoritmo de QUANTUMSistemas Operativos I- Algoritmo de QUANTUM
Sistemas Operativos I- Algoritmo de QUANTUMMari Cruz
 
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosIDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosFranklin Parrales Bravo
 
Entendiendo el Kernel de Linux
Entendiendo el Kernel de LinuxEntendiendo el Kernel de Linux
Entendiendo el Kernel de LinuxCapacity Academy
 
Plan de mantenimientos de equipos de computo
Plan de mantenimientos de equipos de computoPlan de mantenimientos de equipos de computo
Plan de mantenimientos de equipos de computoUrbina15
 
Métricas de procesos y proyectos
Métricas de procesos y proyectosMétricas de procesos y proyectos
Métricas de procesos y proyectosjose_macias
 

What's hot (20)

SO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas OperativosSO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas Operativos
 
Codigos de Error en una PC y Componentes de una PC que pueden averiarse
Codigos de Error en una PC y Componentes de una PC que pueden averiarseCodigos de Error en una PC y Componentes de una PC que pueden averiarse
Codigos de Error en una PC y Componentes de una PC que pueden averiarse
 
DISEÑO DE ALGORITMOS PARALELOS
DISEÑO DE ALGORITMOS PARALELOSDISEÑO DE ALGORITMOS PARALELOS
DISEÑO DE ALGORITMOS PARALELOS
 
Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.Sistemas Operativos Distribuidos.
Sistemas Operativos Distribuidos.
 
MOD Unidad 1: Fundamentos de modelado
MOD Unidad 1: Fundamentos de modeladoMOD Unidad 1: Fundamentos de modelado
MOD Unidad 1: Fundamentos de modelado
 
Gestion de memoria en Linux
Gestion de memoria en LinuxGestion de memoria en Linux
Gestion de memoria en Linux
 
Gerencia informatica
Gerencia informaticaGerencia informatica
Gerencia informatica
 
Controles a proyectos de desarrollo de Software
Controles a proyectos de desarrollo de SoftwareControles a proyectos de desarrollo de Software
Controles a proyectos de desarrollo de Software
 
Tsp (Team Software Process )
Tsp (Team Software Process )Tsp (Team Software Process )
Tsp (Team Software Process )
 
Sistemas Operativos I- Algoritmo de QUANTUM
Sistemas Operativos I- Algoritmo de QUANTUMSistemas Operativos I- Algoritmo de QUANTUM
Sistemas Operativos I- Algoritmo de QUANTUM
 
Utilerias
Utilerias Utilerias
Utilerias
 
Presentacion fdd
Presentacion fddPresentacion fdd
Presentacion fdd
 
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosIDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
 
Entendiendo el Kernel de Linux
Entendiendo el Kernel de LinuxEntendiendo el Kernel de Linux
Entendiendo el Kernel de Linux
 
IIS Unidad 4 Proyecto de software
IIS Unidad 4 Proyecto de softwareIIS Unidad 4 Proyecto de software
IIS Unidad 4 Proyecto de software
 
Plan de mantenimientos de equipos de computo
Plan de mantenimientos de equipos de computoPlan de mantenimientos de equipos de computo
Plan de mantenimientos de equipos de computo
 
358050855 planificacion-de-soporte-tecnico
358050855 planificacion-de-soporte-tecnico358050855 planificacion-de-soporte-tecnico
358050855 planificacion-de-soporte-tecnico
 
Métricas de procesos y proyectos
Métricas de procesos y proyectosMétricas de procesos y proyectos
Métricas de procesos y proyectos
 
Cierre del proyecto - pmi
Cierre del proyecto - pmiCierre del proyecto - pmi
Cierre del proyecto - pmi
 
Arquitectura fisica y logica
Arquitectura fisica y logicaArquitectura fisica y logica
Arquitectura fisica y logica
 

Similar to AD Unidad2: Diseño de programas paralelos y distribuidos

Insidencias En Los Paradigmas De La Ingeniera De Software
Insidencias En Los Paradigmas De La Ingeniera De SoftwareInsidencias En Los Paradigmas De La Ingeniera De Software
Insidencias En Los Paradigmas De La Ingeniera De SoftwareUniversidad De Cordoba
 
G te c sesion3b- mapreduce
G te c sesion3b- mapreduceG te c sesion3b- mapreduce
G te c sesion3b- mapreduceVictoria López
 
Desarrollo rápido de aplicaciones (rad)
Desarrollo rápido de aplicaciones (rad)Desarrollo rápido de aplicaciones (rad)
Desarrollo rápido de aplicaciones (rad)Jean Carlos Toa
 
Modelos de desarrollo de software separata
Modelos de desarrollo de software separataModelos de desarrollo de software separata
Modelos de desarrollo de software separataMarvin Romero
 
No más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittNo más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittJavier Muñoz
 
Actividad 14: Diseño de Algoritmos Paralelos
Actividad 14: Diseño de Algoritmos ParalelosActividad 14: Diseño de Algoritmos Paralelos
Actividad 14: Diseño de Algoritmos ParalelosCarlosHung9
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfdarosario3d
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
Rad (desarrollo rápido de aplicaciones)
Rad (desarrollo rápido de aplicaciones)Rad (desarrollo rápido de aplicaciones)
Rad (desarrollo rápido de aplicaciones)Jenyfer Utitiaja
 
Metodologia rad luis c
Metodologia rad luis cMetodologia rad luis c
Metodologia rad luis cLuis Cambal
 
Trabajo de sistemas de informacion rad
Trabajo de sistemas de informacion radTrabajo de sistemas de informacion rad
Trabajo de sistemas de informacion radHenry Cambal
 
Trabajo de sistemas de informacion rad
Trabajo de sistemas de informacion radTrabajo de sistemas de informacion rad
Trabajo de sistemas de informacion radHenry Cambal
 
Diseño de Algoritmos Paralelos.pdf
Diseño de Algoritmos Paralelos.pdfDiseño de Algoritmos Paralelos.pdf
Diseño de Algoritmos Paralelos.pdfMarti44678
 
Rad sistemas de informacion
Rad sistemas de informacionRad sistemas de informacion
Rad sistemas de informacionDiego Sanchez
 
2. introduccion a la_ing_de_software
2. introduccion a la_ing_de_software2. introduccion a la_ing_de_software
2. introduccion a la_ing_de_softwareuniv of pamplona
 

Similar to AD Unidad2: Diseño de programas paralelos y distribuidos (20)

Insidencias En Los Paradigmas De La Ingeniera De Software
Insidencias En Los Paradigmas De La Ingeniera De SoftwareInsidencias En Los Paradigmas De La Ingeniera De Software
Insidencias En Los Paradigmas De La Ingeniera De Software
 
Apuntes2
Apuntes2Apuntes2
Apuntes2
 
G te c sesion3b- mapreduce
G te c sesion3b- mapreduceG te c sesion3b- mapreduce
G te c sesion3b- mapreduce
 
Desarrollo rápido de aplicaciones (rad)
Desarrollo rápido de aplicaciones (rad)Desarrollo rápido de aplicaciones (rad)
Desarrollo rápido de aplicaciones (rad)
 
Modelos de desarrollo de software separata
Modelos de desarrollo de software separataModelos de desarrollo de software separata
Modelos de desarrollo de software separata
 
No más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittNo más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKitt
 
Actividad 14: Diseño de Algoritmos Paralelos
Actividad 14: Diseño de Algoritmos ParalelosActividad 14: Diseño de Algoritmos Paralelos
Actividad 14: Diseño de Algoritmos Paralelos
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
Rad (desarrollo rápido de aplicaciones)
Rad (desarrollo rápido de aplicaciones)Rad (desarrollo rápido de aplicaciones)
Rad (desarrollo rápido de aplicaciones)
 
Conferencia_Introducción a la Ingeniería de Software
Conferencia_Introducción a la Ingeniería de SoftwareConferencia_Introducción a la Ingeniería de Software
Conferencia_Introducción a la Ingeniería de Software
 
Metodologia rad luis c
Metodologia rad luis cMetodologia rad luis c
Metodologia rad luis c
 
Clase 11
Clase 11Clase 11
Clase 11
 
Trabajo de sistemas de informacion rad
Trabajo de sistemas de informacion radTrabajo de sistemas de informacion rad
Trabajo de sistemas de informacion rad
 
Trabajo de sistemas de informacion rad
Trabajo de sistemas de informacion radTrabajo de sistemas de informacion rad
Trabajo de sistemas de informacion rad
 
Diseño de Algoritmos Paralelos.pdf
Diseño de Algoritmos Paralelos.pdfDiseño de Algoritmos Paralelos.pdf
Diseño de Algoritmos Paralelos.pdf
 
Mda mde
Mda   mdeMda   mde
Mda mde
 
Rad sistemas de informacion
Rad sistemas de informacionRad sistemas de informacion
Rad sistemas de informacion
 
7984
7984 7984
7984
 
2. introduccion a la_ing_de_software
2. introduccion a la_ing_de_software2. introduccion a la_ing_de_software
2. introduccion a la_ing_de_software
 

More from Franklin Parrales Bravo

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaFranklin Parrales Bravo
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebFranklin Parrales Bravo
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaFranklin Parrales Bravo
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosFranklin Parrales Bravo
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebFranklin Parrales Bravo
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosFranklin Parrales Bravo
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosFranklin Parrales Bravo
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraFranklin Parrales Bravo
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareFranklin Parrales Bravo
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software Franklin Parrales Bravo
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosFranklin Parrales Bravo
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosFranklin Parrales Bravo
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosFranklin Parrales Bravo
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoFranklin Parrales Bravo
 
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4Franklin Parrales Bravo
 
RD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesRD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesFranklin Parrales Bravo
 
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventosPOE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventosFranklin Parrales Bravo
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...Franklin Parrales Bravo
 

More from Franklin Parrales Bravo (20)

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en Cuenca
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería Web
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicua
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelos
 
MOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modeladoMOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modelado
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgos
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectos
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestra
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilos
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y Enrutamiento
 
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
 
RD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesRD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y Redes
 
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventosPOE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
 

AD Unidad2: Diseño de programas paralelos y distribuidos

  • 1. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 1 25/12/2022 Diseño de programas paralelos y distribuidos Unidad 2 Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Aplciaciones Distribuidas
  • 2. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 2 25/12/2022 Objetivo general de la Unidad 2 Conocer los fundamentos, técnicas y aplicaciones del procesamiento paralelo y distribuido que permitan el diseño de aplicaciones que requieran cómputo de altas prestaciones.
  • 3. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 3 25/12/2022 Unidad 2: Diseño de programas paralelos y distribuidos • Tecnologías y paradigmas de la programación paralela – Cómputo Paralelo y Programación en Paralelo. – Modelos de arquitectura (MIMD, SIMD, SISD, MISD). – Paradigmas: programación basada en memoria compartida vs. distribuida – Modelos de programación (Mapreduce, Hadoop, etc.). • Algoritmos paralelos y distribuidos – Técnicas de algoritmos paralelos (PRAM, APRAM, C3) – Particionamiento – Comunicación – Aglomeración y Mapeo (PCAM) • Equilibrio de carga de tareas – Medición de balance de carga. – Asignación dinámica de procesos. – Balanceo de carga dinámico, robusto y no centralizado • Evaluación de algoritmos paralelos y distribuidos
  • 4. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 4 25/12/2022 Introducción  Paralelismo: hacer más de una cosa “simultáneamente, a la vez”. • tamaño de datos: 4 - 8 - 16 - 32 - 64 - ... bit • ejecución de instrucciones (ILP): segmentación, superescalares, VLIW... • paralelismo de datos/ paralelismo funcional o de programas
  • 5. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 5 25/12/2022 Introducción • Los problemas que pueden resolverse mediante un algoritmo paralelo son, obviamente, muy heterogéneos. • Suelen ser problemas de complejidad elevada, aún no perteneciendo al grupo de problemas intratables (el número de operaciones crece de forma rápida –p.e. exponencial– con el tamaño del problema).
  • 6. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 6 25/12/2022 Problemas P, NP y NP-Completos
  • 7. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 7 25/12/2022 Problemas P, NP y NP-Completos
  • 8. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 8 25/12/2022 Introducción  Dentro del conjunto de problemas tratables (el número de operaciones crece polinómicamente con el tamaño del problema) se suelen dar dos situaciones que hacen necesaria la programación paralela: - Problemas de gran dimensión - Problemas de tiempo real Otro tipo de problemas: problemas de gran desafío, por su relevancia social (genoma humano, meteorología, clima, fenómenos sísmicos…).
  • 9. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 9 25/12/2022 Unidad 2: Diseño de programas paralelos y distribuidos • Tecnologías y paradigmas de la programación paralela – Cómputo Paralelo y Programación en Paralelo. – Modelos de arquitectura (MIMD, SIMD, SISD, MISD). – Paradigmas: programación basada en memoria compartida vs. distribuida – Modelos de programación (Mapreduce, Hadoop, etc.). • Algoritmos paralelos y distribuidos – Técnicas de algoritmos paralelos (PRAM, APRAM, C3) – Particionamiento – Comunicación – Aglomeración y Mapeo (PCAM) • Equilibrio de carga de tareas – Medición de balance de carga. – Asignación dinámica de procesos. – Balanceo de carga dinámico, robusto y no centralizado • Evaluación de algoritmos paralelos y distribuidos
  • 10. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 10 25/12/2022 Cómputo Paralelo • Procesadores: El programa ejecuta en un conjunto de procesadores que están fuertemente ligados • Ligazón (comunicación) • Los procesadores cooperan íntimamente y se sincronizan • Los procesadores comparten memoria principal • Los procesadores comparten otros recursos del ordenador (periféricos, etc.) • Requiere: • Se requiere el hardware de un ordenador • Se requiere el hardware de varios procesadores (CPUs) • Se requiere un mecanismo de interconexión y control de los procesadores • Ejemplo: Ejecución de programas en un ordenador con núcleo dual. • Cuestión: ¿Puede un mismo programa secuencial ejecutar en múltiples procesadores?
  • 11. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 11 25/12/2022 Modelos de Programación Paralela • La mayoría de los esfuerzos en paralelización están dentro de las siguientes categorias: – Códigos pueden ser paralelizados usando librerías de paso de mensaje tal como MPI. – Códigos pueden ser paralelizados usando directivas de compilación tal como OpenMP. – Códigos pueden ser escritos en nuevos lenguajes paralelos.
  • 12. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 12 25/12/2022  Diferentes modelos sobre distintos aspectos de la programación paralela: - Modelo arquitectónico: arquitectura de la máquina -- multiprocesadores: memoria compartida -- multicomputadores: paso de mensajes -- modelos mixtos - Modelo de programación: herramientas de alto nivel (OpenMP, MPI). - Modelo de coste: permite evaluar el coste del algoritmo. Programación en Paralelo
  • 13. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 13 25/12/2022  Es diferente paralelizar un algoritmo o programa secuencial, que programar en paralelo una aplicación desde el comienzo.  En el primer caso, interesa detectar aquellas partes del código con un mayor coste computacional. Lo más habitual es utilizar trazas, timers, profiling, etc., y ejecutar en paralelo aquellas partes que ofrecen un buen rendimiento (por ejemplo, paralelismo incremental de OpenMP). Programación en Paralelo
  • 14. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 14 25/12/2022  En el segundo caso, se empieza analizando las carac- terísticas de la propia aplicación, para determinar el/los algoritmos paralelos más adecuados. OJO: conviene partir de un buen algoritmo ya optimizado (¡no hay que reinventar la rueda!).  Aunque no hay un “camino único”, se suele recomendar utilizar un determinado procedimiento o metodología. Programación en Paralelo
  • 15. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 15 25/12/2022 PARALELIZADOR AUTOMÁTICO DIRECTIVAS OPENMP DIRECTIVAS HPF THREADS PASO DE MENSAJES TIEMPO DE DESARROLLO MODELO DE PROGRAMACIÓN GRANO GRUESO REHACER EL CÓDIGO GRANO FINO RETOCAR EL CÓDIGO La Solución Depende de (Tiempo, Dinero, Rendimiento)
  • 16. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 16 25/12/2022  La programación paralela añade, respecto a la programación secuencial, una serie de aspectos a tener en cuenta: - Concurrencia (sincronización, comunicación). - Asignación de datos y código a procesadores. - Acceso simultáneo a datos compartidos (sincronización). - Escalabilidad. Programación en Paralelo
  • 17. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 17 25/12/2022  Otra diferencia entre la programación secuencial y la paralela es la forma en que los módulos que componen una aplicación se pueden ensamblar: - Composición secuencial: los módulos se ejecutan secuencialmente. - Composición paralela: diferentes módulos se ejecutan simultáneamente sobre conjuntos disjuntos de procesos (escalabilidad y localidad). - Composición concurrente: diferentes módulos se ejecutan concurrentemente sobre los mismos procesos (solapamiento computación y comunicación). Programación en Paralelo
  • 18. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 18 25/12/2022 Concurrencia • El acceso concurrente a datos compartidos puede resultar en inconsistencias • Mantener la consistencia de los datos requiere el uso de mecanismos que aseguren la ejecución ordenada de procesos que cooperan • La concurrencia implica las siguientes cuestiones de diseño: – Comunicación entre procesos. – Compartición y competencia por los recursos. – Sincronización de la ejecución de varios procesos. – Asignación del tiempo de procesador a los procesos.
  • 19. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 19 25/12/2022 Coordinación de procesos • Los procesos en algunos casos deben coordinarse y compartir información. • Los mecanismos de coordinación de procesos garantizan la exclusión mutua para los recursos compartidos. • Cuando un proceso está modificando un recurso compartido, otros procesos no deberían poder cambiar ese recurso. • Al diseñar el intercambio de información entre procesos, debe tener en cuenta el hecho de que estos procesos pueden estar funcionando a diferentes velocidades. – Un proceso genera información; el otro proceso consume esa información. – Si el productor se ejecuta más rápido que el consumidor, nueva información podría sobrescribir un ítem de información leído previamente antes de que el proceso consumidor lea la información original. – Si el proceso consumidor se ejecuta más rápido que el proceso productor, el mismo ítem podría leerse dos veces.
  • 20. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 20 25/12/2022 Condiciones de Carrera (race conditions) • Problema – Las condiciones de carrera se dan cuando: • varios procesos accesan y manipulan los mismos datos concurrentemente, y • el resultado final depende del orden particular en que los accesos se llevaron a cabo • Solución – Usar mecanismos de sincronización para que solamente un proceso pueda manipular los datos a la vez
  • 21. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 21 25/12/2022 Condiciones de Carrera (race conditions) • Problema – Las condiciones de carrera se dan cuando: • varios procesos accesan y manipulan los mismos datos concurrentemente, y • el resultado final depende del orden particular en que los accesos se llevaron a cabo • Solución – Usar mecanismos de sincronización para que solamente un proceso pueda manipular los datos a la vez
  • 22. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 22 25/12/2022 Ejemplo de variable compartida con condición de carrera thread A: run() { v = v + 1; } thread B: run() { v = v * 2; } v = 5 v = 12 v = 11 RMW issues Read-Modify-Write v = 6 v = 10
  • 23. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 23 25/12/2022 Ejemplo de variable compartida con condición de carrera thread A: run() { v = v + 1; } thread B: run() { w = v * 2; } v = 5 v = 6 w = 12 v = 6 w = 10 RMW issues Read-Modify-Write
  • 24. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 24 25/12/2022 Sección Crítica • Zonas críticas – secciones del programa que sólo debe ejecutar un thread en un momento dado, o habría problemas • Protocolo – si está ocupado, espero – si está libre • Entro – cierro por dentro • hago mis cosas – yo solito • Salgo – dejo abierto – si hay alguien esperando, que entre – si no, queda abierto java mantiene una cola de threads esperando a que el cerrojo(lock) se abra todo esto es indivisible ATÓMICO
  • 25. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 25 25/12/2022 Operación atómica – la que se ejecuta sin cambiar de thread – ejemplo • int n = v++; NO es atómica => posibles carreras – solución: envolverla – véase AtomicInteger class IntAtomico { private int v; synchronized int inc() { v++; return v; } } IntAtomico va = new IntAtomico(); int n = va.inc();
  • 26. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 26 25/12/2022 AtomicInteger • java.util.concurrent.atomic • AtomicInteger class AtomicCounter { private AtomicInteger c = new AtomicInteger(0); public void increment() { c.incrementAndGet(); } public void decrement() { c.decrementAndGet(); } public int value() { return c.get(); }
  • 27. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 27 25/12/2022 Estados de un thread(hilo o hebra) new Thread() NEW start() RUNNABLE BLOCKED WAITING TIMED WAITING TERMINATED
  • 28. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 28 25/12/2022 Problema de la Sección Crítica 1. Exclusión mutua: Si el proceso Pi está ejecutando su sección crítica, ningún otro proceso puede estar ejecutando la suya 2. Progreso: Si ningún proceso está ejecutando su sección crítica y existe algún otro proceso que desea entrar a la suya, entonces ese proceso no puede posponerse indefinidamente 3. Espera limitada: Debe haber un límite en el número de veces que otros procesos pueden entrar a sus secciones críticas después de que un proceso a solicitado entrar a la suya, y antes de que se le otorgue el acceso a ese proceso
  • 29. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 29 25/12/2022 Sincronización en Java • no estructuradas – locks – Semáforos – barreras • estructuradas – bloques synchronized – métodos synchronized – monitores
  • 30. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 30 25/12/2022 Lock (candado o cerrojo) • Un cerrojo proporciona exclusión mutua en el acceso a datos compartidos. • El cerrojo es una variable de dos estados (libre y ocupado) y tiene dos operaciones públicas: – Acquire (lock)– Espera a que el cerrojo esté libre y lo adquiere. – Release (unlock)– Libera el cerrojo; si había alguien esperando en Acquire, se lo entrega a alguno de los procesos que esperan. • Inicialmente, se considera que el cerrojo está libre. Un cerrojo puede ser considerado como un semáforo binario inicializado a true. • Para acceder a datos compartidos en exclusión mutua, se usa un cerrojo. Antes de usar los datos compartidos se llama a Acquire y tras manipular los datos, se libera el cerrojo con Release
  • 31. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 31 25/12/2022 Lock (candado o cerrojo) • el mecanismo de cerrojos alrededor de zonas de acceso exclusivo – es un mecanismo pesimista • siempre me protejo por si acaso – puede hacer que una thread quede esperando a que otra termine • si la otra casca, puede esperar eternamente • puede ser que una tarea de alta prioridad quede esperando a que termine otra de menor prioridad – priority inversión
  • 32. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 32 25/12/2022 Priority inversión • C (prioridad baja) cierra un lock • A (prioridad alta) quiere el lock que tiene C • B (prioridad media) monopoliza la cpu • resultado – B se lo lleva todo mientras A espera tontamente ej: https://en.wikipedia.org/wiki/Mars_Pathfinder
  • 33. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 33 25/12/2022 Continuando con… Lock (candado o cerrojo) Un ReentrantLock es un mecanismo de exclusión mutua que permite que los subprocesos vuelvan a entrar en un lock sobre un recurso (varias veces) sin una situación de interbloqueo. • package java.util.concurrent.locks – interface Lock – class ReentrantLock implementa Lock • OJO: – hay que asegurarse de que se libera el cerrojo; por ejemplo, si hay excepciones lock.lock(); ... operaciones ... lock.unlock(); try { lock.lock(); zona exclusiva } finally { lock.unlock(); }
  • 34. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 34 25/12/2022 Lock: estado compartido protegido public class Contador { private int cuenta = 0; private final Lock LOCK = new ReentrantLock(); nadie puede meterse por enmedio estado protegido public int incrementa(int v) { try { LOCK.lock(); cuenta += v; return cuenta; } finally { LOCK.unlock(); } } public int decrementa(int v) { try { LOCK.lock(); cuenta -= v; return cuenta; } finally { LOCK.unlock(); } }
  • 35. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 35 25/12/2022 Lock: atomicidad • las operaciones lock() y unlock() son indivisibles – no se permite que un thread se vea desplazado por otro mientras se están ejecutando • esta misma propiedad sirve para todas las formas de sincronización: – semáforos y bloques sincronizados
  • 36. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 36 25/12/2022 Lock: Variables de Condición Lock cerrojo; InsertaEnCola() { cerrojo.Acquire(); añade un elemento en la cola; cerrojo.Release(); } ExtraeDeCola() { cerrojo.Acquire(); if (algo en la cola) extrae(cosa); cerrojo.Release(); return cosa; } v1 v2 v3 Proceso productor Proceso consumidor La rutina ExtraeDeCola() debería esperar a que hubiera algún elemento en la cola. • Si lo que hacemos es sleep(dormir) al hilo hasta que alguien deposite un elemento en la cola, resulta que el programa se bloquea, ya que al estar retenido el cerrojo, ningún otro hilo puede manipular la cola. • Por tanto hay que liberar el cerrojo antes de esperar.
  • 37. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 37 25/12/2022 Variables de Condición • Como vemos, el ejemplo de la cola circular nos muestra un problema que los cerrojos no son capaces de resolver. • Una posible solución sería… ExtraeDeCola() { cerrojo.Acquire(); while (cola vacía) { cerrojo.Release(); cerrojo.Acquire(); } extrae(cosa); cerrojo.Release(); return cosa; } Esta solución funciona, pero utiliza espera activa: el hilo está continuamente entrando y saliendo de la sección crítica para revisar si la cola está vacía.
  • 38. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 38 25/12/2022 Variables de Condición • La idea de las variables condición es tener un mecanismo que permita a un proceso – abandonar una sección crítica y a la misma vez – quedarse bloqueado en espera de una condición que alguien le debe notificar. • Variable condición: representa una cola de hilos que esperan algo (una condición) dentro de una sección crítica (indicada por un cerrojo). • Hay dos operaciones posibles: – x.wait() – un proceso que invoca la operación es suspendido – x.signal() – se continúa a uno de los procesos que invocaron x.wait() • Sólo se permite trabajar con una variable condición si disponemos del cerrojo.
  • 39. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 39 25/12/2022 Variables de Condición • La solución al problema de la cola, con variables de condición, tendría esta forma: Lock cerrojo; Condition condición; InsertaEnCola() { cerrojo.Acquire(); añade un elemento en la cola; condición.signal(&cerrojo); // avisamos de que hay algo cerrojo.Release(); } ExtraeDeCola() { cerrojo.Acquire(); while (cola vacía) condición.Wait(&cerrojo); // nos bloqueamos hasta que nos // hagan signal() extrae(cosa); cerrojo.Release(); return cosa; }
  • 40. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 40 25/12/2022 Variables de Condición Lock cerrojo; InsertaEnCola() { cerrojo.Acquire(); añade un elemento en la cola; condición.signal(&cerrojo); cerrojo.Release(); } ExtraeDeCola() { cerrojo.Acquire(); while (cola vacía) condición.Wait(&cerrojo); extrae(cosa); cerrojo.Release(); return cosa; } v4 Proceso productor Proceso consumidor signal
  • 41. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 41 25/12/2022 RentrantLock con variables de condición Una variable de condición se crea la primera vez que se crea un ReentrantLock y se invoca su newCondition() : Luego, se puede invocar sus métodos wait() y signal() entre lock y unlock
  • 42. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 42 25/12/2022 RentrantLock con variables de condición • colas dentro de un cerrojo 15 public void InsertaEnCola(E x) throws InterruptedException { lock.lock(); while (data.size() >= SIZE) isFull.await(); data.add(x); isEmpty.signalAll(); lock.unlock(); } public E ExtraeDeCola() throws InterruptedException { lock.lock(); while (data.isEmpty()) isEmpty.await(); E value = data.remove(0); isFull.signalAll(); lock.unlock(); return value; } private Lock lock = new ReentrantLock(); private Condition isEmpty = lock.newCondition(); private Condition isFull = lock.newCondition(); private final List<E> data = new ArrayList<>(size);
  • 43. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 43 25/12/2022 Sincronización en Java • no estructuradas – locks – Semáforos – barreras • estructuradas – bloques synchronized – métodos synchronized – monitores
  • 44. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 44 25/12/2022 Semáforos • Otro mecanismo que pueden utilizar los threads para proteger secciones de código son los semáforos. • Las operaciones principales son: – esperar a que el contador sea distinto de 0 y le resta 1 al contador antes de continuar sumar 1 al contador – Si el contador es 0 indicará que el thread no puede acceder a la sección crítica, y – Si es >0, podrán acceder tantos threads como valor tenga el contador.
  • 45. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 45 25/12/2022 Semáforos Semáforos
  • 46. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 46 25/12/2022 Semáforos • package java.util.concurrent – class Semaphore • Semaphore (int permisos) • semáforo binario: gestiona 1 permiso de acceso – void acquire() – void release() • semáforo general: gestiona N permisos – void acquire(int n) • solicita N permisos del semáforo si no hay bastantes, espero • cuando los haya, sigo – void release(int n) • devuelvo N permisos al semáforo • si hay alguien esperando, se intenta satisfacerle
  • 47. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 47 25/12/2022 Semáforo binario semaforo.acquire(); ... operaciones ... semaforo.release(); semaforo.acquire(); try { ... operaciones ... } finally { semaforo.release(); }
  • 48. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 48 25/12/2022 Semáforo binario • Correcto uso de operaciones: – semaforo.acquire() …. semaforo.release() • Mal uso de operaciones: – semaforo.acquire() … semaforo.acquire() – Omitir semaforo.acquire() o semaforo.release() (o ambos)
  • 49. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 49 25/12/2022 Uso de los semáforos 1. limitar el número de threads en la zona crítica 16 Semaphore sm = new Semaphore(5) # Max: 5-threads InputStream fetch_page(String ref): sm.acquire(); try { URL url = new URL(ref); return url.openStream(); } finally { sm.release(); } Semaphore semaphore = new Semaphore(N) semaphore.acquire(); try { … zona crítica … } finally { semaphore.release(); }
  • 50. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 50 25/12/2022 Uso de los semáforos 2. coordinar threads thread_1 stmt_1; stmt_2; done.release(); stmt_3; stmt_4; Semaphore done = new Semaphore(0) thread_2 stmt_1; stmt_2; done.acquire(); stmt_3; stmt_4;
  • 51. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 51 25/12/2022 Ejemplo de Semáforo public class Parking { private final int capacidad; // número de coches que caben private final Semaphore semaphore; // constructor public ParkingSemaphore(int capacidad) { this.capacidad = capacidad; semaphore = new Semaphore(capacidad); } // barreras de entrada public void entra() throws InterruptedException { semaphore.acquire(1); } // barreras de salida public void sale() { semaphore.release(1); }
  • 52. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 52 25/12/2022 Ejemplo de semáforo con N permisos public class EsperaNTareas { public static void main(String[] args) throws InterruptedException { Semaphore contador = new Semaphore(0); List<Tarea> tareas = new ArrayList<Tarea>(); tareas.add(new Tarea(contador)); // ... N veces for (Tarea tarea : tareas) tarea.start(); // espera a que todas acaben contador.acquire(tareas.size()); } }
  • 53. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 53 25/12/2022 Ejemplo de semáforo con N permisos public class Tarea extends Thread { private Semaphore contador; public Tarea( Semaphore contador ){ this.contador = contador; } public void run() { // hace su tarea contador.release(); } }
  • 54. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 54 25/12/2022 Semáforos vs. Variables de condición • Una diferencia fundamental entre semáforos y variables condición es que éstas no tienen memoria. – En las variables de condición, si alguien ejecuta una operación signal sin que nadie haya estado esperando, esa operación se pierde para siempre, – mientras que en un semáforo se “recuerda” para posteriores waits.
  • 55. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 55 25/12/2022 Semáforos vs. ReentrantLock • Ningún thread es propietario de un semáforo binario. – Sin embargo, el último thread que bloqueó(locked) correctamente un recurso es el propietario de un reentrantLock. • Un semáforo binario proporciona un mecanismo de sincronización de alto nivel al permitir una implementación personalizada de un mecanismo de bloqueo y recuperación de interbloqueos. Por lo tanto, da más control a los desarrolladores. – Sin embargo, el reentrantLock es un mecanismo de sincronización de bajo nivel con un mecanismo de bloqueo fijo(fixed locking).
  • 56. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 56 25/12/2022 Semáforos vs. ReentrantLock (cont…) • Los semáforos binarios proporcionan un mecanismo de liberación no apropiativa. – Por lo tanto, cualquier subproceso puede liberar el permiso para la recuperación de un interbloqueo de un semáforo binario. • Por el contrario, la recuperación de interbloqueo es difícil de lograr en el caso de un ReentrantLock. – Por ejemplo, si el subproceso propietario de un ReentrantLock entra en modo de suspensión o espera infinita, no será posible liberar el recurso y se producirá una situación de interbloqueo.
  • 57. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 57 25/12/2022 Comentarios sobre locks y semáforos • son de bajo nivel • primitivas independientes • requieren que todos colaboren • se puede hacer cualquier cosa, esten bien o no – abrir y cerrar no están necesariamente emparejados sintácticamente
  • 58. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 58 25/12/2022 Sincronización en Java • no estructuradas – locks – Semáforos – barreras • estructuradas – bloques synchronized – métodos synchronized – monitores
  • 59. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 59 25/12/2022 Barreras • Este mecanismo de sincronización está destinado a los grupos de procesos • Algunas aplicaciones se dividen en fases y tienen la regla de que ningún proceso puede continuar a la siguiente fase sino hasta que todos los procesos estén listos para hacerlo. • Para lograr este comportamiento, se coloca una barrera al final de cada fase. • Cuando un proceso llega a la barrera, se bloquea hasta que todos los procesos han llegado a ella.
  • 60. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 60 25/12/2022 Barreras • La operación de una barrera se ilustra en la figura Uso de una barrera. (a) Procesos que se acercan a una barrera. (b) Todos los procesos menos uno bloqueados en la barrera. (c) Cuando el último proceso llega a la barrera, se deja pasar a todos. Barrera A B C D Proceso Tiempo (a) Barrera A B C D Tiempo (b) Barrera A B C D Tiempo (c)
  • 61. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 61 25/12/2022 Barreras en java: CyclicBarrier • CyclicBarrier(int required) – Una sincronización que permite que un conjunto de subprocesos esperen unos a otros para llegar a un punto de barrera común. • void await() versión con código a ejecutar cuando se abre • CyclicBarrier(int parties, Runnable action)
  • 62. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 62 25/12/2022 Barreras en java: CyclicBarrier coordinar threads CyclicBarrier barrier = new CyclicBarrier(3) thread_1 block_11(); barrier .await(); block_12(); barrier .await(); block_13(); barrier .await(); thread_2 block_21(); barrier .await(); block_22(); barrier .await(); block_23(); barrier .await(); thread_3 block_31(); barrier .await(); block_32(); barrier .await(); block_33(); barrier .await();
  • 63. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 63 25/12/2022 Sincronización en Java • no estructuradas – locks – Semáforos – barreras • estructuradas – bloques synchronized – métodos synchronized – monitores
  • 64. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 64 25/12/2022 Sincronización en Java • Java proporciona sincronización a nivel del lenguaje • Cada objeto en Java tiene asociado un lock – Se adquiere al invocar un método synchronized – Se libera cuando se sale del método synchronized • Hilos que esperan por adquirir un objeto lock se colocan en el entry set (conjunto de espera) para ese objeto lock Cada objeto tiene asociado un entry set.
  • 65. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 65 25/12/2022 Sincronización en Java (cont.) Métodos insert() y remove() synchronized ¿Problemas?
  • 66. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 66 25/12/2022 Recordando… Modelo de estados wait set entry set Object lock
  • 67. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 67 25/12/2022 Sincronización en Java: wait/notify() • Cuando un hilo invoca wait(): 1. El hilo libera el objeto lock 2. El estado del hilo se coloca en Blocked 3. El hilo se coloca en el wait set del objeto • Cuando un hilo invoca notify(): 1. Un hilo arbitrario del wait set se selecciona 2. T se mueve del wait set al entry set 3. El estado de T se coloca en Runnable Entry set y wait set
  • 68. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 68 25/12/2022 Sincronización en Java (cont.) • Llamar a notify() selecciona un hilo arbitrario del wait set – Es posible que el hilo seleccionado no esté esperando por la condición por la que ha sido notificado • La llamada a notifyAll() selecciona todos los hilos en el wait set y los mueve a todos al entry set • En general notifyAll() es una estrategia más conservadora que notify()
  • 69. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 69 25/12/2022 Sincronización en Java • no estructuradas – locks – Semáforos – barreras • estructuradas – bloques synchronized – métodos synchronized – monitores
  • 70. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 70 25/12/2022 Bloques synchronized • synchronized (objeto) { // zona de exclusión mutua } synchronized (cc) { ... operaciones ... } cc: Object compartido el cerrojo se libera al salir del bloque: • última sentencia • return interno • excepción
  • 71. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 71 25/12/2022 Estado compartido protegido public class Contador { private int cuenta = 0; private final Object LOCK = new Object(); public int incrementa(int v) { synchronized (LOCK) { cuenta += v; return cuenta; } } public int decrementa(int v) { synchronized (LOCK) { cuenta -= v; return cuenta; } }
  • 72. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 72 25/12/2022 Bloques Mutex • Un mutex es un dispositivo de exclusión mutua útil para proteger estructuras de datos compartidas de modificaciones concurrentes, y para implementar secciones críticas y monitores. • Los mutex tienen dos estados posibles: – Unlocked/release (libre, no ocupado por ningún thread) o – Locked/acquire (ocupado por un thread). • Un mutex nunca puede estar ocupado por más de un thread • Si un thread intenta ocupar un mutex ya ocupado, quedará a la espera de que el thread que tienen el mutex lo libere.
  • 73. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 73 25/12/2022 Bloques Mutex • Los mutex permiten bloquear una parte del código, de forma que ningún otro hilo de ejecución pueda accederla mientras no se libere el bloqueo. • De esta forma, si los threads bloquean el código que comprueba el número de entradas que quedan y lo liberan después de realizada la venta, obligamos a que primero se ejecute la parte crítica un proceso y luego la otra.
  • 74. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 74 25/12/2022 Bloques Mutex En lugar de sincronizar todo un método, se puede sincronizar bloques de código
  • 75. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 75 25/12/2022 Bloques Mutex Sincronización de bloques usando wait()/notify()
  • 76. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 76 25/12/2022 ¿Mutex es un semáforo binario? • Se suele decir que mutex es un semáforo binario que garantiza la exclusión mutua en las operaciones que se ejecutan sobre el semáforo general…¡Pero no lo es! • El propósito de mutex y semáforo es diferente. Tal vez, debido a la similitud en su implementación, un mutex podría parecerse a un semáforo binario.
  • 77. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 77 25/12/2022 ¿Mutex es un semáforo binario? Mutex • Estrictamente hablando, un mutex es un mecanismo de bloqueo utilizado para sincronizar el acceso a un recurso. – Solo una tarea (puede ser un subproceso o un proceso basado en la abstracción del sistema operativo) puede adquirir la exclusión mutua. • Significa que hay propiedad asociada con un mutex, y solo el propietario puede liberar el bloqueo (mutex). Semáforos • El semáforo es un mecanismo de señalización (señales del tipo "Terminé, puedes continuar…"). – Por ejemplo, si está escuchando canciones (suponga que es una tarea) en su teléfono móvil y, al mismo tiempo, su amigo lo llama, se activa una interrupción en la que una rutina de interrupción de servicio(ISR) señala despertar(wakeup) la tarea de procesamiento de llamadas.
  • 78. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 78 25/12/2022 Sincronización en Java • no estructuradas – locks – Semáforos – barreras • estructuradas – bloques synchronized – métodos synchronized – monitores
  • 79. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 79 25/12/2022 Métodos synchronized • usando this como cerrojo – es lo mismo… pero escribes menos y te equivocas menos public synchronized int incrementa(int v) { cuenta += v; return cuenta; } public synchronized int decrementa(int v) { cuenta -= v; return cuenta; }
  • 80. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 80 25/12/2022 Comentarios sobre bloques y métodos synchronized • son de alto nivel • delimitan una zona • requieren que todos colaboren • un thread que ya posee un cerrojo puede entrar en zonas protegidas por el mismo cerrojo – esto permite que un método synchronized llame a otro método synchronized
  • 81. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 81 25/12/2022 Sincronización en Java • no estructuradas – locks – Semáforos – barreras • estructuradas – bloques synchronized – métodos synchronized – monitores
  • 82. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 82 25/12/2022 Monitores • clases donde – se monitoriza toda modificación del estado • el estado es privado • todos los accesos son zonas críticas • en java – todos las campos son privados – todos los métodos son synchronized
  • 83. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 83 25/12/2022 Monitores: Ejemplo public class Contador { private int cuenta = 0; public synchronized int getCuenta() { return cuenta; } public synchronized int incrementa(int v) { cuenta += v; return cuenta; } public synchronized int decrementa(int v) { cuenta -= v; return cuenta; } } synchronized garantiza • • acceso exclusivo variables actualizadas
  • 84. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 84 25/12/2022 Monitores • Abstracción de alto nivel que proporciona un mecanismo efectivo y conveniente para la sincronización entre procesos • Solo un proceso puede estar activo dentro del monitor en un momento dado Sintaxis de un Monitor
  • 85. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 85 25/12/2022 Esquema de un Monitor
  • 86. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 86 25/12/2022 Monitores • SO provee semáforos o mutexes. • Lenguaje provee enunciados para monitores. • Compilador usa primitivas del SO para traducir los procedimientos del monitor de tal manera que se considere la exclusión mutua. • Programador no se preocupa de codificar semáforos • Programador sólo debe incluir las secciones críticas como parte de un procedimiento de monitor.
  • 87. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 87 25/12/2022 Monitor y Variable de condición • Los procedimientos en un monitor se pueden llamar siempre considerando la exclusión mutua. • Existe acceso coordinado a buffers y variables compartidos. • Pero como un proceso puede ir a sleep si no pudiera continuar? – Si necesitara que se complete un evento – Tal vez este evento debe ser generado por otro proceso.
  • 88. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 88 25/12/2022 Monitor y Variable de condición (cont…) • Solución: – Uso de variables de condición, y – Uso de operaciones wait() y signal() en esas variables • Si un proceso necesita bloquearse: – (Por ejemplo, buffer está lleno y productor no debe colocar más información) – Proceso llama wait() en alguna variable de condición x.
  • 89. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 89 25/12/2022 Monitor y Variable de condición (cont…) • Cuando otro proceso quiere desbloquear al proceso que está durmiendo: – (por ejemplo?). – El proceso llama signal() en la misma variable de condicion x. • Las variables de condición NO SON CONTADORES. – No almacenan señales signal. – signal() debe ser llamado después de wait().
  • 90. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 90 25/12/2022 Monitor con Variables de Condición
  • 91. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 91 25/12/2022 Unidad 2: Diseño de programas paralelos y distribuidos • Tecnologías y paradigmas de la programación paralela – Cómputo Paralelo y Programación en Paralelo. – Modelos de arquitectura (MIMD, SIMD, SISD, MISD). – Paradigmas: programación basada en memoria compartida vs. distribuida – Modelos de programación (Mapreduce, Hadoop, etc.). • Algoritmos paralelos y distribuidos – Técnicas de algoritmos paralelos (PRAM, APRAM, C3) – Particionamiento – Comunicación – Aglomeración y Mapeo (PCAM) • Equilibrio de carga de tareas – Medición de balance de carga. – Asignación dinámica de procesos. – Balanceo de carga dinámico, robusto y no centralizado • Evaluación de algoritmos paralelos y distribuidos
  • 92. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 92 25/12/2022 Flynn's Taxonomy of Computers Instructions applied single multiple Data manipulated single multiple SISD – single- threaded process MISD – pipeline architecture (uncommon) SIMD – vector processing MIMD – multi- threaded programming
  • 93. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 93 25/12/2022 Flynn's Taxonomy of Computers Instructions applied single multiple Data manipulated single multiple
  • 94. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 94 25/12/2022 Flynn's Taxonomy of Computers • SISD: Un único procesador ejecuta un solo flujo de instrucciones, para operar sobre datos almacenados en una única memoria. – Se corresponde con la arquitectura de Von Neumann. • MISD: muchas unidades funcionales realizan diferentes operaciones en los mismos datos. • SIMD: misma instrucción, pero operan sobre diferentes conjuntos de datos. – Es decir, la misma instrucción es ejecutada de manera sincronizada por todas las unidades de procesamiento. • MIMD: tienen un número de procesadores que funcionan de manera asíncrona e independiente. – En cualquier momento, cualquier procesador puede ejecutar diferentes instrucciones sobre distintos datos. – Los sistemas distribuidos suelen clasificarse como arquitecturas MIMD; bien sea explotando un único espacio compartido de memoria, o uno distribuido
  • 95. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 95 25/12/2022 Clasificaciones adicionales • Un programa, múltiples datos (SPMD) – Múltiples procesadores autónomos que trabajan simultáneamente sobre el mismo conjunto de instrucciones (aunque en puntos independientes) sobre datos diferentes. – También se le llama 'un proceso, múltiples datos'. • Múltiples programas, múltiples datos (MPMD) – Múltiples procesadores autónomos que trabajan simultáneamente sobre al menos dos programas independientes. – Normalmente este sistema elige a un nodo para ser el host o administrador, que corre el programa y otorga los datos a todos los demás nodos que ejecutan un segundo programa. – Esos demás nodos devuelven sus resultados directamente al administrador. – Un ejemplo podría ser la consola de Sony PlayStation 3, que tiene la arquitectura de procesador SPU/PPU.
  • 96. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 96 25/12/2022 Introducción  Paralelismo SIMD: Single-Instruction-Multiple-Data - procesadores vectoriales - procesadores en array - GPUs MIMD: Multiple-Instruction-Multiple-Data Muchos procesos/hilos para dar una respuesta más rápida (high performance) (multiproceso, tolerancia a fallos, P copias (throughput))
  • 97. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 97 25/12/2022 Modelos de Programación  Arquitecturas • Correspondecia natural – Paralelismo de datos → CM-2 (máquina SIMD) – Paso de mensaje → IBM SP (MPP) – Memoria compartida → SGI Origin, Sun E10000 • Correspondencia implementada – HPF (un lenguaje paralelo de datos) y MPI (una librería de paso de mensaje) -> sobre la mayoría de los computadores paralelos – OpenMP (un conjunto de directivas, etc. para programación de memoria compartida) -> sobre mayoría de máquinas de memoria compartida.
  • 98. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 98 25/12/2022 Diagram: SIMD (vector processing)
  • 99. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 99 25/12/2022 red de comunicación SIMD computadores en array array P+M+E/S  Muchos procesadores muy sencillos, poca memoria, posibilidad de realizar operaciones de entrada/salida. Red de comunicación especial.
  • 100. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 100 25/12/2022 red de comunicación SIMD computadores array Proc. de control front-end array P+M+E/S  El procesador de control envía a todos los procesadores la instrucción que tienen que ejecutar síncronamente (BC). Cada procesador, ejecuta la instrucción o no hace nada.
  • 101. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 101 25/12/2022 SIMD computadores array Adecuados para cierto tipo de aplicaciones: tratamiento de imágenes… Ejemplo (X, Y, Z repartidos entre procesadores) for (i=0; i<1000; i++) if (Y[i] != 0) Z[i] = X[i] / Y[i]; else Z[i] = X[i]; paso 1: comprobar todos Y[i] != 0 paso 2: if (yes)hacer Z[i] = X[i] / Y[i] (el resto, nada) paso 3: if (no) hacer Z[i] = X[i] (el resto, nada)
  • 102. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 102 25/12/2022 Diagram: MIMD (multi-threaded programming)
  • 103. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 103 25/12/2022 Computadores MIMD  MIMD (Multiple-Instruction-Multiple- Data) P procesos/hilos ejecutándose simultáneamente. Dos modelos básicos: - memoria compartida - memoria distribuida
  • 104. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 104 25/12/2022 SPMD • Todas las máquinas actuales son MIMD (Multiple Instruction, Multiple Data) y pueden explotar – paralelismo de datos o – paralelismo de tareas. • El primer paradigma de programación paralela es el SPMD: Single Program, Multiple Data – Considerado una subcategoría de MIMD – Cada procesador ejecuta una copia del código fuente – Paralelismo de datos (a través de la descomposición de los datos) y – Paralelismo de tareas (a través de funciones que retornan al procesador ID)
  • 105. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 105 25/12/2022 SIMD vs SPMD • En SPMD, múltiples procesadores autónomos ejecutan simultáneamente el mismo programa en puntos independientes. – Contrario al paso a paso (lockstep) que SIMD impone sobre los diferentes datos. • Con SPMD, las tareas pueden ser ejecutadas sobre CPU de propósito general. – SIMD requiere un vector de procesadores para manipular el flujo de datos. – Note que las dos técnicas no son mutuamente exclusivas.
  • 106. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 106 25/12/2022 Computadores MIMD  Memoria compartida (shared memory) M0 Mm–1 memoria principal P0 P1 Pp–1 procesadores + MC red de comunicación E/S
  • 107. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 107 25/12/2022  Memoria compartida (shared memory) - Espacio de direccionamiento único. - Comunicación entre procesos por medio de variables compartidas. - Red de comunicación: un bus (o una red multietapa). - Nombres: multiprocesador, SMP, UMA. - Generalmente, “pocos” procesadores. Computadores MIMD P0 P1 Pp–1 M0 Mm–1 E/S
  • 108. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 108 25/12/2022 Computadores MIMD  Memoria distribuida (distributed memory) Pp-1 Mp-1 E/S P0 M0 E/S Computador: Pr + MC+ MP + E/S red de comunicación K K
  • 109. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 109 25/12/2022 Computadores MIMD  Memoria distribuida (distributed memory) - Un espacio de direccionamiento por procesador. - Comunicación entre procesos por medio de paso de mensajes. - Redes de comunicación habituales: hipercubo, malla, toro... - Nombres: multicomputador, MPP - Generalmente, “muchos” procesadores. Pp-1 Mp-1 E/S P0 M0 E/S K K
  • 110. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 110 25/12/2022 Computadores MIMD  Otra opción: memoria compartida pero físicamente distribuida - El espacio de direccionamiento es único, pero la utilización no es homogénea: se ha creado una jerarquía de memoria. - La comunicación entre procesos se hace por medio de variables compartidas (lógicamente) y se implementa mediante paso de mensajes. - Nombres: DSM, NUMA (MPP) Pp-1 E/S P0 E/S K M0 Mp-1 K
  • 111. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 111 25/12/2022 Computadores MIMD - SMP: multiprocesador de memoria compartida, generalmente pocos procesadores comunicados por un bus. - MPP: sistema paralelo con muchos procesadores, de memoria compartida o distribuida. Generalmente, las máquinas más rápidas, sistemas con hardware y software de comunicación y de cálculo específico. Muy caras. Pueden organizarse de manera jerárquica (p.e., los nodos son sistemas SMP).  Nomenclatura:
  • 112. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 112 25/12/2022 Computadores MIMD - Cluster: sistema paralelo construido a base de hardware y software de propósito general. Buena relación coste/velocidad. PC PC PC PC PC ethernet El más simple: PC / ethernet (Beowulf) commodity / custom Cada vez más, sistema paralelo de propósito general.  Nomenclatura:
  • 113. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 113 25/12/2022 Computadores MIMD - Constelación (constellation): un cluster, donde el número de nodos es menor que el número de procesadores de cada nodo.  Nomenclatura:
  • 114. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 114 25/12/2022 1 1 N N SIMD MIMD SISD inst. datos proc. array proc vectoriales MP P C bus memoria compartida SMP MPP/NUMA Cluster memoria distribuida P C M red general Resumen
  • 115. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 115 25/12/2022 Resumen Espacio de direccionamiento común privado centralizada (bus) distribuida (red) Memoria SMP DSM, NUMA MPP -
  • 116. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 116 25/12/2022 Unidad 2: Diseño de programas paralelos y distribuidos • Tecnologías y paradigmas de la programación paralela – Cómputo Paralelo y Programación en Paralelo. – Modelos de arquitectura (MIMD, SIMD, SISD, MISD). – Paradigmas: programación basada en memoria compartida vs. distribuida – Modelos de programación (Mapreduce, Hadoop, etc.). • Algoritmos paralelos y distribuidos – Técnicas de algoritmos paralelos (PRAM, APRAM, C3) – Particionamiento – Comunicación – Aglomeración y Mapeo (PCAM) • Equilibrio de carga de tareas – Medición de balance de carga. – Asignación dinámica de procesos. – Balanceo de carga dinámico, robusto y no centralizado • Evaluación de algoritmos paralelos y distribuidos
  • 117. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 117 25/12/2022 Modelos de programación paralela • Control – Cómo se crea el paralelismo? – Qué orden hay entre operaciones? – Cómo los diferentes hilos de control se sincronizan? • Data – Qué data es privada y qué data se comparte? – Cómo se accede o comunica la data compartida en forma lógica? • Operaciones – Qué operaciones son atómicas (indivisibles)? • Costos – Cómo contabilizar los costos respectivos?
  • 118. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 118 25/12/2022 Una arquitectura paralela genérica P P P P Interconnection Network M M M M ° Físicamente, dónde está la memoria? Memoria P = procesador, M = memoria
  • 119. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 119 25/12/2022 Parallel vs. Distributed Computation Parallel processing refers to multiple CPUs within the same shared- memory machine performing computation
  • 120. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 120 25/12/2022 Parallel vs. Distributed Computation Distributed computation involves multiple computers with their own memory communicating over a network
  • 121. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 121 25/12/2022 Modelo de Programación Basado en Memoria Compartida - Un sistema multiprocesador donde todos los procesos pueden ejecutar el núcleo del sistema operativo con el mismo privilegio se denomina multiprocesador simétrico (SMP) - Todos los recursos se comparten los recursos (memoria y dispositivos entrada/salida) - Un sistema operativo soporta multiprocesamiento simétrico siempre que se puedan proteger regiones críticas (garantía de exclusión mutua) - El planificador distribuye los procesadores disponibles entre los procesos (threads)preparados para ejecutarse . El paralelismo aparece cuando un programa ha sido codificado (o compilado) de modo que fragmentos del mismo se ejecutan como procesos (threads) independientes. Thread = proceso ligero (solo contexto hardware)
  • 122. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 122 25/12/2022 Modelo de Programación Basado en Memoria Compartida -Memoria compartida que puede ser accedida por cualquier proceso/thread envuelto en la computación -Computación basada en sincronización para garantizar la consistencia de los datos -La comunicación se realiza mediante compartición de los datos SECCIONES CRÍTICAS P1 P2 PRIMITIVAS DE SINCRONIZACIÓN VARIABLES COMPARTIDAS • Secciones de código que referencian/modifican variables compartidas SE DEBE GARANTIZAR LA EXCLUSIÓN MUTUA • Ejecución secuencial
  • 123. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 123 25/12/2022 Problema de Consistencia de una Variable Compartida Actualización de un contador SUMA P1 (1) MOV SUM, Reg1 (2) ADD #1, Reg1 (3) MOV Reg1, SUM P2 (1’) MOV SUM, Reg1 (2’) ADD #1, Reg1 (3’) MOV Reg1, SUM (1’)(1)(2)(3)(2’)(3’) => SUMA = SUMA +1 (1)(1’)(2’)(3’)(2)(3) => SUMA = SUMA +1 (1)(2)(3)(1’)(2’)(3’) => SUMA = SUMA +2 SE DEBE GARANTIZAR LA EXCLUSIÓN MUTUA responsabilidad del programador P1 P2 . . . SUM = SUM+1 . . . . . . SUM = SUM+1 . . .
  • 124. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 124 25/12/2022 Funciones de Sincronización de Alto Nivel Funciones: Lock(flag): Si flag == ON (activado) entonces espera a que flag == OFF Si flag == OFF (desactivado) entonces flag = ON Unlock(flag): flag = OFF -Garantizan el acceso secuencial a las secciones críticas -Proporcionadas por el SO e implementadas en todos los lenguajes de alto nivel Ejemplos (rutinas atómicas e indivisibles) • Cierres (locks) • Semáforos • Barreras CIERRES Variable cierre: flag => ON(1) o OFF(0) P_padre: SUM = 0 for k =1 to N do Fork P_hijo(k) end for P_hijo: Lock (flag) SUMA = SUMA + A(k) Unlock(flag) Join
  • 125. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 125 25/12/2022 Funciones de Sincronización de Alto Nivel SEMÁFOROS Variable semáforo: S Boleano: 0 ó 1 (como los cierres) General: Entero >= 0 Funciones: Wait(S) o P(S) Si S == 0 entonces espera a que S > 0 Si S > 1 entonces S = S - 1 Signal(S) o V(S): S = S + 1 Semáforos generales: • Si se inicializa con M, puede haber M procesos en su sección crítica simultanamente • Problemas productores-consumidores o lectores-escritores P1: P(S) Sección crítica de P1 v(S) P2: P(S) Sección crítica de P2 v(S)
  • 126. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 126 25/12/2022 Funciones de Sincronización de Alto Nivel OTRAS FUNCIONES DEL API (lenguaje de alto nivel +. . .) • Crear procesos • Destruir procesos • Identificar procesos BARRERAS -Los procesos esperan en un punto hasta que todos llegan a ese punto 0 0 1 3 1 2 3 BARRERA 2 BARRERA 0 1 2 3 BARRERA Procesos: fork() crea copia del padre con nuevo espacio de memoria virtual
  • 127. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 127 25/12/2022  − = 1 0 ]) [ ( n i i A f Ejemplo sencillo Sea la suma : • Descomposición paralela: – Cada evaluación y cada suma parcial es una tarea. • Asignar n/p números a cada procesador (1 al p) – Cada uno computa independientemente sus resultados “privados” y la suma parcial. – Uno (o todos) recolectan las p sumas parciales y computa la suma global. Dos clases de data: • Compartida lógicamente – Los n números originales, la suma global. • Privada lógicamente – Las evaluaciones de las funciones. – Y las sumas parciales individuales?????
  • 128. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 128 25/12/2022 Modelo de prog. 1: Memoria compartida • Un programa es una colección de hilos de control. – Se pueden crear dinámicamente en algunos lenguajes. • Cada hilo tiene variables privadas, ej: variables del stack local. • También hay variables compartidas, ej: variables estáticas, de bloques comunes, del heap global. – Los hilos se comunican implícitamente escribiendo y leyendo variables compartidas. – Los hilos coordinan sincronizando en variables compartidas. Pn P1 P0 s s = ... y = ..s ... Memoria compartida i: 2 i: 5 Memoria privada i: 8
  • 129. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 129 25/12/2022 Sumando con memoria compartida HILO 1 for i = 0, n/2-1 s = s + f(A[i]) HILO 2 for i = n/2, n-1 s = s + f(A[i]) static int s = 0; • Problema: “race condition” en la variable s • Una “race condition” o carrera por la data ocurre cuando: - Dos procesadores (o 2 hilos) acceden a la misma variable, y por lo meno uno la escribe. - Los accesos son concurrentes (no sincronizados) así que podrían pasar simultáneamente.
  • 130. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 130 25/12/2022 Sumando con memoria compartida HILO 1 …. computa f([A[i]) y put en reg0 reg1 = s reg1 = reg1 + reg0 s = reg1 … HILO 2 … computa f([A[i]) y put en reg0 reg1 = s reg1 = reg1 + reg0 s = reg1 … static int s = 0; … (s = 27) • Sea s=27, f(A[i])=7 en Hilo 1, y f(A[i])=9 en Hilo 2 • Si el programa está bien, s debería ser 43 al final • Pero puede ser 43, 34, o 36 • Las operaciones atómicas son lecturas y escrituras • O se ve un número u otro, no medio número • Las sumas se hacen en registros (privados generalmente) 7 9 27 27 34 36 36 34
  • 131. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 131 25/12/2022 Sumando con memoria compartida (mejorado) HILO 1 local_s1= 0 for i = 0, n/2-1 local_s1 = local_s1 + f(A[i]) s = s + local_s1 HILO 2 local_s2 = 0 for i = n/2, n-1 local_s2= local_s2 + f(A[i]) s = s +local_s2 static int s = 0; • Como la suma es asociativa, se puede reordenar • La mayor parte de cómputo es en variables privadas - La frecuencia de uso de mem. compartida baja, lo que puede mejorar la velocidad. - Pero hay un “race condition” en el update de la v.compartida s - Se puede solucionar añadiendo locks o candados (sólo un hilo puede usar el lock a la vez; los otros deben esperar) static lock lk; lock(lk); unlock(lk); lock(lk); unlock(lk);
  • 132. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 132 25/12/2022 • Todos los procesadores se conectan a una memoria compartida grande. – Nombre típico: Symmetric Multiprocessors (SMPs) – SGI, Sun, HP, Intel, IBM (nodos del Millennium, SP) – Chips multicore (hacía donde vamos) • Difícil escalar a gran número de procesadores – <= 32 procesadores es típico • Ventaja: uniform memory access (UMA) • Costo: es más barato acceder data en cache que en memoria principal. Modelo de máquina 1: Shared Memory P1 bus $ memoria P2 $ Pn $
  • 133. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 133 25/12/2022 Problemas escalando HW de mem. compartida • Por qué no poner más procesadores (con mayor memoria?) – El bus de memoria se vuelve cuello de botella • Ej. del problema: Parallel Spectral Transform Shallow Water Model (PSTSWM) – Resultados (y gráfico) cortesía de Pat Worley del ORNL – Es un núcleo vital en modelos atmosféricos – 99% de ops. punto flotante son multiplicaciones o sumas, que generalmente corren bien en toda CPU. – Pero se barre toda la memoria con poco reuso de operandos→ se usa mucho bus y memoria compartida – El experimento muestra performance serial, con una “copia” del ejecutable corriendo independientemente en varios procesadores. • Es el mejor caso para mem.compartida: no comparte • Pero la data no cabe en los registros/cache
  • 134. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 134 25/12/2022 From Pat Worley, ORNL Ejemplo • Degradación de performance es una función “suave” del número de procesos. • No data compartida entre ellos, así que debería haber perfecto paralelismo. • (Código corrió en 18 niveles z y varios rangos de niveles xy.)
  • 135. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 135 25/12/2022 Ventajas e Inconvenientes Concurrencia: Dos o más threads se pueden ejecutar simultáneamente Esta alternativa incrementa la eficiencia incluso en un solo procesador Paralelismo: Hay concurrencia en máquinas multiprocesador El paralelismo surge de modo automático en sistemas multiprocesador Mejora de la respuesta de las aplicaciones • Muchas aplicaciones cortan la interacción con el usuario cuando realizan una función (Netscape,…) • La programación con threads permite que cada función se realice por un thread de modo independiente Uso de sistemas multiprocesador de modo más eficiente • Una aplicación paralelizada con threads no tiene que tener en cuenta el número de procesos disponibles • El rendimiento mejora automáticamente al añadir más procesos Mejora la estructura de los códigos • Muchos programas se estructuran de modo más lógico como unidades independientes Uso de menos recursos del sistema • Los sistemas UNIX clásicos soportan el concepto de thread (1 proceso = 1 thread) • Sin embargo, el mantenimiento de procesos es muchos más costoso que el de threads Mejora de rendimiento • En un multiprocesador los programas se ejecutan en menor tiempo de ejecución • En monoprocesador el tiempo de respuesta es menor, al poder solapar acciones (computo con E/S)
  • 136. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 136 25/12/2022 Procesos versus Threads  Espacio de direcciones con uno o más threads de control  Se caracterizan por un contexto software y hardware  La sobrecarga por creación o carga de proceso es muy alta  Hay mecanismos artificiales para que varios procesos compartan alguna página de memoria  Un thread puede afectar a otro  Los procesos se diseñaron teniendo en cuenta la protección  Flujo de control dentro de un proceso, que coopera con otro thread para resolver un problema  Los threads comparten un único espacio de direcciones (comunicación sencilla y eficiente)  Se caracterizan por un contexto hardware  La sobrecarga por la creación o cambio de thread es muy pequeña  Los threads comparten memoria de modo natural PROCESOS THREADS
  • 137. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 137 25/12/2022 Procesos versus Threads MODELO DE EJECUCIÓN EN SOLARIS Thread vinculado (bounded) Solo la aplicación ve estos threads Planificación de threads para un proceso Estructuras de thread kernel Los threads kernel no asociados a un LWP representan demonios de sistema como el demonio de páginas, el thread de reloj, … (threads del sistema)
  • 138. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 138 25/12/2022 Procesos versus Threads THREADS DE APLICACIÓN THREADS • La gestión de los threads es responsabilidad del programador • Cada thread tiene su propia pila • Todos los threads comparten la memoria del proceso y el resto de contexto software (ficheros abiertos, directorio actual, manejadores de señales, …) • Los threads se ejecutan de modo independiente (y concurrente) LWP C$PAR DOALL DO I=1, N A(I) = B(I) END DO Sección Secuencial I=N/2+1 I=3N/4+1 I=3N/4 I=N Sección Secuencial Bucle Paralelo Fin Bucle Paralelo I=1 I=N/4 I=N/4+1 I=N/2
  • 139. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 139 25/12/2022 Ejemplos de Sistemas con Programación por Medio de Threads LIBRERÍAS DE THREADS Y APIS La historia comienza en 1960 y dentro de UNIX en 1980 Todas soportan funciones muy semejantes Sin embargo, hay diferencia en la API de las librerías de los diferentes fabricantes • DEC Alpha • OS/2 • Windows NT
  • 140. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 140 25/12/2022 Modelo de Programación Basado en Paso de Mensajes -Consiste en la replicación del paradigma de programación secuencial -El programador divide la aplicación en varios procesos que se ejecutan en diferentes procesadores sin compartir memoria y comunicándose por medio de mensajes Visión del programador: Lenguaje secuencial con variables privadas + Rutinas de paso de mensajes P P P M red de interconexión “Lenguaje ensamblador de la programación paralela” Mejores eficiencias que con el resto de lenguajes M M
  • 141. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 141 25/12/2022 Ventajas e Inconvenientes Ventajas: • Portable de modo eficiente a cualquier tipo de arquitectura: computador paralelo, red de estaciones y a una única estación de trabajo Inconvenientes: • Bastante más complicado de programar y depurar que memoria compartida • La eficiencia depende del programador SPMD vs. MPMD • Muchos computadores actuales solo soportan SPMD, el mismo ejecutable en cada procesador: IBM SP2 y CRAY T3E • No es problema: main(int argc, char **argv) if proceso es el controlador control(argumentos) else worker(argumentos) - Muchos sistemas actuales no soportan tiempo compartido, los procesadores están siendo empleados por un único usuario (cola de trabajos en cada partición): IBM SP2 y CRAY T3E El tiempo compartido se encuentra en investigación
  • 142. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 142 25/12/2022 Características de los Mensajes -Un mensaje es una trasferencia de datos de un proceso a otro proceso Información que caracteriza un mensaje: • En qué variable están los datos que se envían • Cuantos datos se envían • Qué proceso recibe el mensaje • Cuál es el tipo de dato que se envía • Qué proceso envía el mensaje • Donde almacenar los datos que se reciben • Cuantos datos espera recibir el proceso receptor Partes de un proceso que se comunica por medio de mensajes: 1.Acceso: El proceso se debe enrolar en el sistema de paso de mensajes, obtiene un número y el número de procesos en el grupo 2.Ejecución: El proceso realiza operaciones interactuando con el resto por medio de las rutinas de paso de mensajes 3.Finalización: Antes de terminar, el proceso debe desenrolarse del sistema de paso de mensajes send receive
  • 143. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 143 25/12/2022 Comunicación Punto a Punto send receive Envío síncrono y asíncrono (condición de finalización) Síncrona: •El proceso que realiza el envío recibe información sobre la recepción del mensaje (fax) •La comunicación se completa cuando el mensaje ha sido recibido Asíncrona: •El proceso únicamente conoce cuando se envía el mensaje (postal) •La comunicación se completa tan pronto como el mensaje ha sido enviado - Generalmente copia en un buffer Operaciones bloqueantes y no bloqueantes (espera o no la condición de finalización) • Operación no bloqueante: Se inicia la operación y se vuelve al programa, por medio de otras funciones se puede comprobar la finalización de la operación (envío fax con memoria y recepción fax estándar) • Operación bloqueante: Solo se vuelve al programa cuando la operación ha finalizado (envío y recepción fax estándar)
  • 144. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 144 25/12/2022 Comunicaciones Colectivas 0 1 2 3 BARRERA 2 0 1 3 BARRERA 0 1 2 3 BARRERA broad. receive receive receive P P P P Barrera Broadcast Reducción Dato0 Dato3 Dato Dato
  • 145. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 145 25/12/2022 Modelo 2: memoria distribuida compartida • Memoria es compartida en forma lógica, pero distribuida físicamente – Cualquier CPU puede acceder cualquier dirección de memoria – Líneas de cache (o páginas) se pasan entre máquinas • Ejemplo: SGI Origin – Escala a 512 (SGI Altix (Columbia) en NASA/Ames) – Limitada por la coherencia del cache– como mantener las copias en cache de la misma dirección iguales entre si. P1 network $ memory P2 $ Pn $ memory memory
  • 146. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 146 25/12/2022 Problemas de performance al compartir • Real compartir –Escrituras frecuentes a la misma variable: cuello de botella –OK para read-only o para escrituras infrecuentes –Técnica: hacer copias de un valor, uno por procesador, si se puede en el algoritmo. • Falso compartir –Bloqueo del cache añade complejidad –Dos diferentes variables en el mismo bloque de cache –Técnica: colocar la data usada por cada procesador en forma contigua, o por lo menos evitar intercalado en memoria
  • 147. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 147 25/12/2022 Modelo de program. 2: Paso de mensajes • Programa consiste en colección de procesos nombrados. – Se establecen al empezar a correr el programa – Hilo de control y direcciones locales -- NO comparte data física. – Data compartida lógica se divide entre procesadores locales. • Los procesos se comunican por pares de send/receive – Coordinación implícita en cada evento de comunicación. – MPI (Message Passing Interface) es la librería más popular Pn P1 P0 y = ..s ... s: 12 i: 2 Memoria privada s: 14 i: 3 s: 11 i: 1 send P1,s Red receive Pn,s
  • 148. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 148 25/12/2022 Computar s = A[1]+A[2] en cada procesador ° 1er intento – qué podría salir mal? Procesador 1 xlocal = A[1] send xlocal, proc2 receive xremote, proc2 s = xlocal + xremote Procesador 2 xlocal = A[2] receive xremote, proc1 send xlocal, proc1 s = xlocal + xremote ° 2do intento Procesador 1 xlocal = A[1] send xlocal, proc2 receive xremote, proc2 s = xlocal + xremote Procesador 2 xlocal = A[2] send xlocal, proc1 receive xremote, proc1 s = xlocal + xremote ° Si send/receive funcionara como el teléfono? Como el correo? ° Si hubiera más de 2 procesadores?
  • 149. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 149 25/12/2022 Modelo de máquina 2a: Memoria distribuida • Cray T3E, IBM SP2 • Clusters de PC (Berkeley NOW, Beowulf) • IBM SP-3, Millennium, CITRIS son máquinas de memoria distribuída, pero los nodos son SMPs. • Cada procesador tiene su propia memoria y cache pero no puede acceder directamente a la memoria de otro procesador. • Cada “nodo” tiene una “Network Interface” (NI, tarjeta de red o similar) para comunicación y sincronización interconnect P0 memory NI . . . P1 memory NI Pn memory NI
  • 150. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 150 25/12/2022 Clusters de Tflop/s He aquí algunos ejemplos de clusters configurados de procesadores y redes separadas • 72% del Top 500 (Nov 2005), 2 en el top 10 • Dell cluster en Sandia (Thunderbird) era #4 en Top 500 – 8000 Intel Xeons @ 3.6GHz – 64 TFlops pico, 38 TFlops en Linpack – Infiniband connection network • Walt Disney Feature Animation (The Hive) era #96 – 1110 Intel Xeons @ 3 GHz – Gigabit Ethernet • Saudi Oil Company era #107 • Credit Suisse/First Boston era #108 • Para más detalles usar “statistics/sublist generator” en www.top500.org
  • 151. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 151 25/12/2022 Modelo de máquina 2b: Internet/Grid Computing • SETI@Home: corría en 500,000 PCs – ~1000 años de CPU al día – 485,821 años de CPU hasta el 2006 • Análisis sofisticado de señales • Datasets distribuidos desde Radio Telescopio de Arecibo Sgte. Paso: Allen Telescope Array
  • 152. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 152 25/12/2022 Mod. de progr. 2b: Espacio global de direcciones • Programa consiste en colección de hilos nombrados. – Se definen al inicio de la corrida. – Data local y compartida, como en modelo de mem.compt. – Pero la data compartida está dividida entre procesos. – Aparentemente, data remota es cara computacionalmente • Ejs: UPC, Titanium, Co-Array Fortran • Programación en espacio global de direcciones es punto medio entre paso de mensajes y mem. compartida. Pn P1 P0 s[myThread] = ... y = ..s[i] ... i: 2 i: 5 Private memory Shared memory i: 8 s[0]: 27 s[1]: 27 s[n]: 27
  • 153. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 153 25/12/2022 Modelo de máq. 2c: Espacio global de direcs. • Cray T3D, T3E, X1, y cluster HP Alphaserver • Clusters construidos con Quadrics, Myrinet, o Infiniband • La NI soporta RDMA (Remote Direct Memory Access) – NI puede acceder directamente a la memoria sin interrumpir a la CPU – Un proces. puede hacer read/write a memoria como operación unilateral (put/get) – No solo un load/store como en máq. de mem.compartida • Continua computando mientras espera a que la operación en memoria finalice. – Data remota generalmente no está en cache local. interconnect P0 memory NI . . . P1 memory NI Pn memory NI Espacio global de dirs. puede ser soportado en varios grados
  • 154. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 154 25/12/2022 Prog. paralela VS Prog. distribuida Computación paralela • Divide una aplicación en tareas que se ejecutan al mismo tiempo (fuertemente acoplado) • Se considera una aplicación a la vez • Objetivo: Acelerar la ejecución de una aplicación • Se ejecutan sobre arqeuitecturas homogéneas con memoria compartida Computación distribuida • Utiliza diferentes recursos físicamente separados • Se consideran varias aplicaciones a la vez (pueden pertenecer a diferentes usuario) • Objetivo: permitir que varios usuarios trabajen en forma cooperativa • Se ejecutan sobre arquitecturas heterogéneas, abiertas y dinámicas VS
  • 155. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 155 25/12/2022 Resumen • La programación paralela ejecuta masivamente las tareas en equipos fuertemente conectados (cientos o miles de procesadores sin mucha distancia entre ellos) • La programación distribuida, podría en un caso, repartir las tareas en diversas partes del mundo.
  • 156. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 156 25/12/2022 Unidad 2: Diseño de programas paralelos y distribuidos • Tecnologías y paradigmas de la programación paralela – Cómputo Paralelo y Programación en Paralelo. – Modelos de arquitectura (MIMD, SIMD, SISD, MISD). – Paradigmas: programación basada en memoria compartida vs. distribuida – Modelos de programación (Mapreduce, Hadoop, etc.). • Algoritmos paralelos y distribuidos – Técnicas de algoritmos paralelos (PRAM, APRAM, C3) – Particionamiento – Comunicación – Aglomeración y Mapeo (PCAM) • Equilibrio de carga de tareas – Medición de balance de carga. – Asignación dinámica de procesos. – Balanceo de carga dinámico, robusto y no centralizado • Evaluación de algoritmos paralelos y distribuidos
  • 157. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 157 25/12/2022 MapReduce • MapReduce es un paradigma diseñado por Google para hacer que un subconjunto de problemas distribuidos sea más fácil de codificar. • Automatiza la distribución de datos y la agregación de resultados • Restringe las formas en que los datos pueden interactuar para eliminar los bloqueos – ¡sin estado compartido! = ¡sin bloqueos!
  • 158. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 158 25/12/2022 MapReduce • Basado en la estrategia “Divide y Vencerás” para explotar el potencial de proceso del clúster. • Divide el análisis completo en análisis sobre trozos más pequeños de los datos. – Cada uno de estos se realizará en una máquina del clúster. • Al final, se reúnen los resultados obtenidos en cada máquina.
  • 159. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 159 25/12/2022 MapReduce • Las dos tareas básicas de MapReduce son (sorprendentemente): – Map: aplica una función a los datos. P.ej: filtrar ciertos valores – Reduce: Combina los valores obtenidos por Map • Primero se aplica Map, y luego se invoca Reduce con los resultados obtenidos. • Ambas trabajas con parejas (k,v) o listas de parejas (k,v).
  • 160. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 160 25/12/2022 MapReduce: Map? Reduce? • Los mapeadores leen datos del sistema de archivos y generan (normalmente) datos modificados • Los reductores recopilan toda la salida de los mapeadores y generan (normalmente) datos reducidos • Los datos de salida se escriben en el disco. • Todos los datos están en términos de pares de <clave, valores>
  • 161. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 161 25/12/2022 MapReduce: Data Flow (Flujo del proceso) Mapper 2 Mapper 0 Mapper 1 Reducer 0 Reducer 1 Out 0 Out 1 Input Split 2 Split 1 Split 0
  • 162. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 162 25/12/2022 MapReduce: Un programa de ejemplo • Presentaré los conceptos de MapReduce usando el “ejemplo típico” de MR, Word Count • La entrada de este programa es un volumen de texto sin formato, de tamaño no especificado – podría ser KB, MB, TB, ¡no importa! • El resultado es una lista de palabras y su recuento de ocurrencias. – Suponga que las palabras se dividen correctamente, ignorando las mayúsculas y la puntuación. • Ejemplo: – The doctor went to the store. => » The, 2 » Doctor, 1 » Went, 1 » To, 1 » Store, 1
  • 163. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 163 25/12/2022 MapReduce: Un programa de ejemplo • Mapper – Input: value: lines of text of input – Output: key: word, value: 1 • Reducer – Input: key: word, value: set of counts – Output: key: word, value: sum • Launching program – Defines the job – Submits job to cluster
  • 164. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 164 25/12/2022 MapReduce: Un programa de ejemplo ● Forma general: – Map: – Reduce: grep – Map: – Reduce: (K1, V1) (K2, list(V2)) * list(K2, V2) * list(K3, V3) ● (offset, line) (match, [1, 1, ...]) * [(match, 1)] * [(match, n)]
  • 165. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 165 25/12/2022 Word Count Dataflow
  • 166. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 166 25/12/2022 Input Splitter (divisor de entrada) • Es responsable de dividir su entrada en múltiples partes • Estos fragmentos se utilizan luego como entrada para sus mapeadores • Divisiones en límites lógicos. El valor predeterminado es 64 MB por fragmento (chunk) – Dependiendo de lo que esté haciendo, ¡64 MB pueden ser MUCHOS datos! Tú puedes cambiarlo • Por lo general, solo puede usar uno de los splitters(divisores) incorporados, a menos que esté leyendo un archivo con formato especial
  • 167. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 167 25/12/2022 Mapper (mapeador) • Lee en el par de entrada <K,V> (una sección dividida por el divisor de entrada) • Da como salida un par <K’, V’> • Ex. Para nuestro ejemplo de Word Count, con la siguiente entrada: – “The teacher went to the store. The store was closed; the store opens in the morning. The store opens at 9am”. • La salida obtenida sería: – <The, 1> <teacher, 1> <went, 1> <to, 1> <the, 1> <store, 1> <the, 1> <store, 1> <was, 1> <closed, 1> <the, 1> <store, 1> <opens, 1> <in, 1> <the, 1> <morning, 1> <the 1> <store, 1> <opens, 1> <at, 1> <9am, 1>
  • 168. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 168 25/12/2022 Reducer (reductor) • Acepta la salida de Mapper y recopila valores en la clave – Todas las entradas con la misma clave deben ir al mismo reductor! • La entrada generalmente se ordena, la salida se emite exactamente como está • Para nuestro ejemplo, la entrada del reductor sería: – <The, 1> <teacher, 1> <went, 1> <to, 1> <the, 1> <store, 1> <the, 1> <store, 1> <was, 1> <closed, 1> <the, 1> <store, 1> <opens, 1> <in, 1> <the, 1> <morning, 1> <the 1> <store, 1> <opens, 1> <at, 1> <9am, 1> • La salida sería: – <The, 6> <teacher, 1> <went, 1> <to, 1> <store, 3> <was, 1> <closed, 1> <opens, 1> <morning, 1> <at, 1> <9am, 1>
  • 169. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 169 25/12/2022 Combiner (combinador) • Esencialmente un reductor intermedio • Es opcional • Reduce la salida de cada mapeador, reduciendo el bandwidth y la clasificación • No se puede cambiar el tipo de su entrada – Los tipos de entrada deben ser los mismos que los tipos de salida
  • 170. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 170 25/12/2022 Output Committer • Es responsable de tomar la salida reducida y enviarla a un archivo. • Por lo general, este confirmador necesita un input splitter correspondiente (para que otro trabajo pueda leer la entrada) • Nuevamente, los splitters incorporados generalmente son lo suficientemente buenos, a menos que necesite generar un tipo especial de archivo
  • 171. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 171 25/12/2022 Partitioner (Shuffler) Particionador (Barajador) • Decide qué pares se envían a qué reductor • El valor predeterminado es simplemente: – Key.hashCode() % numOfReducers • User can override to: – Proporcionar una distribución (más) uniforme de la carga entre los reductores – Es posible que sea necesario enviar algunos valores al mismo reductor • Ex. Para calcular la frecuencia relativa de un par de palabras <W1, W2>, debe asegurarse de que todas las palabras W1 se envíen al mismo reductor – Agrupamiento de resultados
  • 172. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 172 25/12/2022 ¿Qué hay en Hadoop? • Hadoop es más que solo MapReduce – Hadoop Distributed File System (HDFS) – MapReduce – Pig – high-level language for data analysis – HBase – storage for semi-structured data – Y mas…
  • 173. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 173 25/12/2022 Physical Flow
  • 174. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 174 25/12/2022 Historia de MapReduce y Hadoop • Feb 2003 – First MapReduce library written at Google • Dec 2004 – Google paper published • July 2005 – Doug Cutting reports that Nutch now uses new MapReduce implementation • Jan 2006 – Doug Cutting joins Yahoo! • Feb 2006 – Hadoop code moves out of Nutch into new Lucene subproject • Apr 2007 – Yahoo! running Hadoop on 1000-node cluster • Jan 2008 – Hadoop made an Apache Top Level Project • Feb 2008 – Yahoo! generate production search index with Hadoop
  • 175. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 175 25/12/2022 Mi primer programa MapReduce ● Forma general: – Map: – Reduce: grep – Map: – Reduce: (K1, V1) (K2, list(V2)) * list(K2, V2) * list(K3, V3) ● (offset, line) (match, [1, 1, ...]) * [(match, 1)] * [(match, n)]
  • 176. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 176 25/12/2022 Arquitectura • Rastreador de trabajo único(Single Job Tracker) – acepta el envío de trabajos – divide el trabajo para mapeadores y reduce las tareas – distribuye las tareas a los rastreadores – reprograma tareas fallidas • Muchos rastreadores de tareas – ejecutar tareas en máquinas virtuales secundarias – informar a Job Tracker del progreso
  • 177. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 177 25/12/2022 Código public void map(LongWritable key, Text val, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { if (pattern.matcher(val.toString()).matches()) { output.collect(val, new IntWritable(1)); } } public void reduce(Text key, Iterator<IntWritable> vals, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (vals.hasNext()) { sum += vals.next().get(); } output.collect(key, new IntWritable(sum)); }
  • 178. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 178 25/12/2022 Input y Output • InputFormat produce divisiones y registros • OutputFormat acepta registros • Formatos de ejemplo – Formato de entrada de texto/Formato de salida – Formato de entrada de texto de valor clave – Formato de entrada/formato de salida del archivo de secuencia • Los tipos son Hadoop Writables u otros formatos de serialización
  • 179. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 179 25/12/2022 Más ejemplos ● Sort – Map: – Reduce: Word Count (k, v) (k, [v1, v2, ...]) ➝ [(k, v)] ➝ [(k, v1), (k, v2), ...] ● – Map: (offset, line) ➝ [(word1, 1), (word2, 1), ...] – Reduce:(word, [1, 1, ...]) ➝ [(word, n)]
  • 180. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 180 25/12/2022 Ejercicios para trabajos grupales 1. Encuentre las visitas por intervalo de tiempo de 5 minutos para un sitio web dados sus registros de acceso. 2. Encuentre las páginas con más de 1 millón de visitas al día para un sitio web dados sus registros de acceso. 3. Encuentre las páginas que enlazan con cada página en una colección de páginas web. 4. Calcular la proporción de líneas que coinciden con una expresión regular dada para una colección de documentos. 5. Ordene los datos tabulares por una columna primaria y secundaria. 6. Encuentre las páginas más populares de un sitio web según sus registros de acceso.
  • 181. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 184 25/12/2022 Hive y Pig • Hive: aplicaciones de almacenamiento de datos en Hadoop – Query language HQL, variante de SQL – Las tablas son almacenadas en HDFS como archivos planos – Desarrollado por Facebook, ahora open source • Pig: Sistema de procesamiento de datos a gran escala – Scripts son escritos en Pig Latin, un lenguaje de flujo de datos – Desarrollado por Yahoo!, ahora open source • Idea en común: – Proporcionar lenguaje de alto nivel para facilitar el procesamiento de datos a gran escala. – Lenguaje de nivel superior "compila" hasta llegar a tareas (Jobs) Hadoop
  • 182. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 185 25/12/2022 Componentes de Hive • Shell: permite consultas interactivas • Driver: session handles, fetch, execute • Compiler: parse, plan, optimize • Metastore: schema, location in HDFS, etc • Tablas – Tipos de columnas(int, float, string, boolean) – Además, list: map (for JSON-like data)
  • 183. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 186 25/12/2022 Hive: Ejemplo • Hive es parecido a una base de datos SQL • Join relacional sobre dos tablas – Tabla de palabras contadas de una coleccion de libros de Shakespeare – Tabla de palabras contadas de Homer SELECT s.word, s.freq, k.freq FROM shakespeare s JOIN homer k ON (s.word = k.word) WHERE s.freq >= 1 AND k.freq >= 1 ORDER BY s.freq DESC LIMIT 10; the 25848 62394 I 23031 8854 and 19671 38985 to 18038 13526 of 16700 34654 a 14170 8057 you 12702 2720 my 11297 4135 in 10797 12445 is 8882 6884
  • 184. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 187 25/12/2022 Hive: Atras del escenario SELECT s.word, s.freq, k.freq FROM shakespeare s JOIN homer k ON (s.word = k.word) WHERE s.freq >= 1 AND k.freq >= 1 ORDER BY s.freq DESC LIMIT 10; (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_TABREF shakespeare s) (TOK_TABREF homer k) (= (. (TOK_TABLE_OR_COL s) word) (. (TOK_TABLE_OR_COL k) word)))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL s) word)) (TOK_SELEXPR (. (TOK_TABLE_OR_COL s) freq)) (TOK_SELEXPR (. (TOK_TABLE_OR_COL k) freq))) (TOK_WHERE (AND (>= (. (TOK_TABLE_OR_COL s) freq) 1) (>= (. (TOK_TABLE_OR_COL k) freq) 1))) (TOK_ORDERBY (TOK_TABSORTCOLNAMEDESC (. (TOK_TABLE_OR_COL s) freq))) (TOK_LIMIT 10))) (una o más MapReduce jobs) (Abstract Syntax Tree)
  • 185. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 188 25/12/2022 Pig Latin • Lenguaje de flujo de datos – Usuario especifica una secuencia de operaciones para procesar datos – Mas control sobre el proceso comparado con lenguaje declarativo Hive QL • Soporta varios tipos de datos • Soporta Schema • Funciones de soporte definidas por usuario (UDF). – (http://pig.apache.org/docs/r0.11.1/udf.html)
  • 186. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 189 25/12/2022 Pig: Características • Dos componentes – Lenguaje llamado Pig latin – Compilador
  • 187. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 190 25/12/2022 Ejemplo de tarea de analisis de datos • Encuentra usuarios que tienden a visitar “paginas rankeadas” user url time Amy www.cnn.com 8:00 Amy www.crap.com 8:05 Amy www.myblog.com 10:00 Amy www.flickr.com 10:05 Fred cnn.com/index.htm 12:00 url pagerank www.cnn.com 0.9 www.flickr.com 0.9 www.myblog.com 0.7 www.crap.com 0.2 Paginas Visitas . . . . . .
  • 188. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 191 25/12/2022 Flujo de datos conceptual Canonicalize URLs Join url = url Group by user Compute Average Pagerank Filter avgPR > 0.5 Load Pages(url, pagerank) Load Visits(user, url, time)
  • 189. Aplicaciones Distribuidas Carrera de Software Ph.D. Franklin Parrales 192 25/12/2022 Flujo de datos de sistema . . . . . . Visits Pages . . . . . . join by url the answer load load canonicalize compute average pagerank filter group by user