Subscribe:

Ads 468x60px

Sample text

Sample Text

Social Icons

miércoles, 24 de octubre de 2012

Máquina Virtual Paralela


Máquina Virtual Paralela

La Máquina Virtual Paralela (conocida como PVM por sus siglas en inglés de Parallel Virtual Machine) es una biblioteca para el cómputo paralelo en un sistema distribuido de computadoras. Está diseñado para permitir que una red de computadoras heterogénea comparta sus recursos de cómputo (como el procesador y la memoria RAM) con el fin de aprovechar esto para disminuir el tiempo de ejecución de un programa al distribuir la carga de trabajo en varias computadoras.

Consiste en un software y un conjunto de librerías, que permiten establecer una colección de uno o más sistemas de computación, con el fin de poder integrar dichos sistemas en un esquema de una sola máquina virtual.

Opera sobre diferentes plataformas de UNIX y Windows, sobretodo en el ambiente de Internet.

Ventajas

Es una de las librerías de paso de mensajes más fáciles de usar.
Flexible: Control arbitrario de dependencia de estructuras.

 La aplicación decide:

Ø  Donde y cuando ejecutar o terminar las tareas.
Ø  Que maquinas se añaden o se eliminan desde la máquina virtual paralela.
Ø  Que tareas se pueden comunicar y/o sincronizar con otras.

 
Flexible: Control arbitrario de dependencia de estructuras.

 
Desventajas

v  Al ser un esquema heterogéneo de ordenadores, el rendimiento depende de la capacidad de procesamiento de los ordenadores vinculados al esquema de la máquina virtual (lo que era una ventaja tiene una su desventaja).
 
v  Es algo deficiente en cuanto al paso de mensajes se refiere.


Configuración

Ø  Para configurar la MV utilizamos el programa “pvm” en cualquiera de los ordenadores que forman parte de la MV.

Ø  Nos aparecerá un promt donde podremos introducir comandos para interactuar con la MV.

 Los comandos más interesantes son:

ü  add/delete hostname: Anade/Quita el ordenador con nombre hostname a la máquina virtual.
ü   conf: Para ver la configuración actual.
ü   ps –a: Para ver los procesos en ejecución en la máquina virtual.
      ü   quit: Para salir de la consola pero dejar la máquina virtual activa.
ü  halt: Para detener la máquina virtual y salir de la consola.
 

Áreas de Aplicación:

Es muy utilizado para realizar y desarrollar aplicaciones científicas complejas que requieren un esquema de programación en paralelo, dada su compatibilidad entre sistemas operativos, es muy portable y fácil de instalar.


Ejemplo:

El ejemplo que se muestra a continuación es una aplicación PVM que se ha separado en dos tipos de programa.

Un programa maestro es ejecutado por el usuario en una de las computadoras. Este programa provoca la ejecución de programas esclavos en otras computadoras de la máquina virtual y son estos los que llevan a cabo el trabajo. Una vez que han analizado reportan sus resultados al maestro. Para efectos del ejemplo, los programas esclavos simplemente envían un mensaje con información local al maestro, el cual la desplegara por la pantalla.


El maestro hace lo siguiente:


Determina cuales computadores forman parte de la máquina virtual
Inicia un proceso esclavo en cada computador
Recolecta los resultados enviados por los esclavos
Despliega en pantalla la información recibida

El esclavo hace lo siguiente:

Determina el nombre del computador en que se está ejecutando
Determina la hora en ese computador
Envía un mensaje al maestro con la información anterior

 
Programa maestro (master.c):

#include <stdio.h>
#include <pvm3.h>

main() {

struct pvmhostinfo *hostp;
int result, check, i, nhosts, narch, stid;
char buf[64];
pvm_setopt(PvmRoute, PvmRouteDirect); /* canal para comunicacion */
gethostname(buf, 20); /* obtiene nombre del maestro */
printf("El programa maestro se ejecuta en %s\n", buf);

/* Obtiene y despliega la configuracion de la maquina paralela */

pvm_config(&nhosts, &narch, &hostp); /* Obtiene configuracion */
printf("Se encontraron los siguientes computadores en la maquina paralela:\n");
for (i=0; i<nhosts; i++)
printf("\t%s\n", hostp[i].hi_name);
/* Ejecuta los procesos en todas las maquinas */
for (i=0; i<nhosts; i++) {
check = pvm_spawn("slave", 0, PvmTaskHost, hostp[i].hi_name, 1, &stid);
if (!check) printf("No se pudo iniciar proceso en %s\n", hostp[i].hi_name);
}

/* Espera las respuestas de todas las maquinas e imprime su contenido */

result=0;
while (result<nhosts) {
pvm_recv(-1, 2); /* Espera por mensaje de respuesta */
pvm_upkstr(buf); /* Desempaca el mensaje */
printf("%s\n", buf); /* Despliega el contenido en pantalla */
result++; /* Siguiente mensaje */
}
pvm_exit; /* Maestro finalizando */
}

Programa esclavo (slave.c):

#include <stdio.h>
#include <pvm3.h>
#include <time.h>

main() {

time_t now;
char name[12], buf[60];
int ptid;
ptid = pvm_parent(); /* El ID del proceso maestro */
pvm_setopt(PvmRoute, PvmRouteDirect);
gethostname(name, 64); /* Obtiene nombre de la maquina */
now = time(NULL); /* Obtiene hora de la maquina */
strcpy(buf, name); /* Coloca el nombre en el string */
strcat(buf, "'s time is ");
strcat(buf, ctime(&now)); /* Agrega la hora al string */
pvm_initsend(PvmDataDefault); /* Asigna buffer para el mensaje */
pvm_pkstr(buf); /* Empaca el string en el buffer */
pvm_send(ptid, 2); /* Envia el buffer al maestro */
pvm_exit; /* Esclavo finalizando */
}

0 comentarios:

Publicar un comentario