Manuel Arenaz
[email protected]
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Introducción a la programación paralela
¿Qué es la Programación Paralela?
Computador estándar secuencial:
Ejecuta las instrucciones de un programa en orden para
producir un resultado
Idea de la computación paralela:
Producir el mismo resultado utilizando múltiples
procesadores
Objetivos:
Reducir el tiempo de ejecución
Reducir los requerimientos de memoria
© Manuel Arenaz, 2009
2
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Introducción a la programación paralela
Tipos de arquitecturas paralelas
Memoria distribuida
Memoria compartida
© Manuel Arenaz, 2009
3
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Introducción a la programación paralela
Modelos de Programación
Memoria compartida:
Espacio de direcciones “global” (i.e.
accesible por todos los procesadores)
Intercambio de información y
sincronización mediante variables
compartidas
Ejemplos:
OpenMP
Threads
© Manuel Arenaz, 2009
4
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Introducción a la programación paralela
Modelos de Programación
Paso de mensajes:
Espacio de direcciones “local” (i.e.
accesible sólo por un procesador)
Intercambio de información y
sincronización mediante mensajes
Ejemplos:
PVM (Parallel Virtual Machine)
MPI (Message-Passing Interface)
Unix sockets
© Manuel Arenaz, 2009
5
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación Paralela
PVM
© Manuel Arenaz, 2009
6
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Introducción a la programación paralela
¿Qué es PVM?
¿?
Entorno de libre distribución (software libre) para el
desarrollo y ejecución de programas paralelos
utilizando sistemas distribuidos heterogéneos
Arquitectura de memoria distribuida
Paradigma de programación de paso de mensajes
Útil en múltiples sistemas paralelos
Redes de estaciones de trabajo
Clusters de PCs (p.ej., Linux/Beowulf)
Supercomputadores de memoria distribuida (p.ej., Cray T3D)
© Manuel Arenaz, 2009
7
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
¿Qué es PVM?
El hardware consta de un conjunto de ordenadores
interconectados mediante una red de comunicaciones
Cada ordenador tiene su propio procesador y su propia
memoria
© Manuel Arenaz, 2009
8
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
¿Qué es PVM?
La máquina virtual paralela consta de un conjunto de
procesos especiales (pvmd) con los que se comunican
los procesos del programa paralelo (proceso).
© Manuel Arenaz, 2009
9
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
¿Qué es PVM?
A nivel lógico, los procesos del programa paralelo se
comunican entre si mediante el paso de mensajes
A nivel físico, las comunicaciones de mensajes son
gestionadas por los procesos especiales pvmd.
© Manuel Arenaz, 2009
10
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
¿Qué es PVM?
PVM resuelve los problemas de heterogeneidad:
Arquitectura, formato de datos, velocidad de procesamiento,
carga de trabajo del computador (p.ej., planificación de tareas) y
de la red de interconexión (p.ej., enrutamiento de datos)
© Manuel Arenaz, 2009
11
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
¿Qué es PVM?
Ventajas de la computación distribuida usando PVM
Reutilización de hardware existente
Aumento de los recursos de la máquina virtual paralela bajo demanda
Facilitar el desarrollo de programas paralelos para una colección de
máquinas heterogéneas
Aumentar la productividad mediante el uso de un entorno de desarrollo
familiar independiente del sistema paralelo subyacente
Herramienta que permite optimizar el rendimiento del programa paralelo
asignando cada tarea individual a la arquitectura más apropiada
Herramienta para implementar tolerancia a fallos
© Manuel Arenaz, 2009
12
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
Modo de trabajo en PVM
Modelo de programación simple y general
API para creación y destrucción de procesos a través de la
red de interconexión
API para comunicación y sincronización entre los procesos a
través de la red
Programas paralelo PVM
Conjunto de procesos que se comunican entre sí mediante
paso de mensajes
Los procesos pueden acceder en cualquier momento a los
recursos PVM a través de funciones del API
© Manuel Arenaz, 2009
13
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
Modo de trabajo en PVM
Paso 1: El desarrollador escribe uno o varios programas
secuenciales que contienen llamadas al API de PVM
© Manuel Arenaz, 2009
14
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
Ejemplo “Hello world”
#include “pvm3.h”
main()
{
int tid, msgtag, cc;
char buf[100];
#include "pvm3.h"
main()
{
int ptid, msgtag;
char buf[100];
printf("i'm t%x\n", pvm_mytid());
ptid = pvm_parent();
cc = pvm_spawn(”slave", (char**)0, 0, "", 1, &tid);
if (cc == 1) {
msgtag = 1;
pvm_recv(tid, msgtag);
pvm_upkstr(buf);
printf("from t%x: %s\n", tid, buf);
} else
printf("can't start hello_other\n");
pvm_exit();
}
strcpy(buf, "hello, world from ");
gethostname(buf + strlen(buf), 64);
msgtag = 1;
pvm_initsend(PvmDataDefault);
pvm_pkstr(buf);
pvm_send(ptid, msgtag);
pvm_exit();
}
Programa PVM hello.c
Programa PVM slave.c
© Manuel Arenaz, 2009
15
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
Ejemplo “Hello world”
#include “pvm3.h”
main()
{
int tid, msgtag, cc;
char buf[100];
printf("i'm t%x\n", pvm_mytid());
Incluir fichero de cabecera “pvm3.h” que
contiene las declaraciones de las funciones del
API de PVM.
ptid = pvm_parent();
#include "pvm3.h"
main()
{
int ptid, msgtag;
char buf[100];
cc = pvm_spawn(”slave", (char**)0, 0, "", 1, &tid);
if (cc == 1) {
msgtag = 1;
pvm_recv(tid, msgtag);
pvm_upkstr(buf);
printf("from t%x: %s\n", tid, buf);
} else
printf("can't start hello_other\n");
pvm_exit();
}
strcpy(buf, "hello, world from ");
gethostname(buf + strlen(buf), 64);
msgtag = 1;
pvm_initsend(PvmDataDefault);
pvm_pkstr(buf);
pvm_send(ptid, msgtag);
pvm_exit();
}
Programa PVM hello.c
Programa PVM slave.c
© Manuel Arenaz, 2009
16
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
Ejemplo “Hello world”
#include “pvm3.h”
main()
{
int tid, msgtag, cc;
char buf[100];
#include "pvm3.h"
main()
{
int ptid, msgtag;
char buf[100];
ptid = pvm_parent();
Creación e inicialización de los procesos PVM que forman
el programa paralelo (e.g., pvm_spawn()).
printf("i'm t%x\n", pvm_mytid());
cc = pvm_spawn(”slave", (char**)0, 0, "", 1, &tid);
if (cc == 1) {
msgtag = 1;
pvm_recv(tid, msgtag);
pvm_upkstr(buf);
printf("from t%x: %s\n", tid, buf);
} else
printf("can't start hello_other\n");
pvm_exit();
}
strcpy(buf, "hello, world from ");
gethostname(buf + strlen(buf), 64);
msgtag = 1;
pvm_initsend(PvmDataDefault);
pvm_pkstr(buf);
pvm_send(ptid, msgtag);
pvm_exit();
}
Programa PVM hello.c
Programa PVM slave.c
© Manuel Arenaz, 2009
17
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
Ejemplo “Hello world”
#include “pvm3.h”
main()
{
int tid, msgtag, cc;
char buf[100];
#include "pvm3.h"
main()
{
int ptid, msgtag;
char buf[100];
printf("i'm t%x\n", pvm_mytid() );
ptid = pvm_parent();
Identificación unívoca de los procesos PVM
mediante enteros TIDs (Task IDentifiers):
* Proporcionados por PVM (e.g., pvm_mytid())
strcpy(buf, "hello, world from ");
gethostname(buf + strlen(buf), 64);
msgtag = 1;
pvm_initsend(PvmDataDefault);
pvm_pkstr(buf);
pvm_send(ptid, msgtag);
cc = pvm_spawn(”slave", (char**)0, 0, "", 1, &tid);
if (cc == 1) {
msgtag = 1;
pvm_recv(tid, msgtag);
pvm_upkstr(buf);
printf("from t%x: %s\n", tid, buf);
} else
printf("can't start hello_other\n");
pvm_exit();
}
pvm_exit();
}
Programa PVM hello.c
Programa PVM slave.c
© Manuel Arenaz, 2009
18
Paralelización de Programas Secuenciales:
Parallel Virtual Machine (PVM)
Programación con PVM
Ejemplo “Hello world”
#include “pvm3.h”
main()
{
int tid, msgtag, cc;
char buf[100];
printf("i'm t%x\n", pvm_mytid());
Identificación unívoca de los procesos PVM
mediante enteros TIDs (Task IDentifiers):
* Proporcionados por PVM (e.g., pvm_mytid())
* Usados en las comunicaciones (e.g., pvm_send())
ptid = pvm_parent();
#include "pvm3.h"
main()
{
int ptid, msgtag;
char buf[100];
cc = pvm_spawn(”slave", (char**)0, 0, "", 1, &tid);
if (cc == 1) {
msgtag = 1;
pvm_recv(tid, msgtag);
pvm_upkstr(buf);
printf("from t%x: %s\n", tid, buf);
} else
printf("can't start hello_other\n");
pvm_exit();
}
strcpy(buf, "hello, world from ");
gethostname(buf + strlen(buf), 64);
msgtag =
Comentarios de: Paralelización de Programas Secuenciales: Parallel Virtual Machine (PVM) (0)
No hay comentarios