Download Introducción

Document related concepts
no text concepts found
Transcript
Algoritmos paralelos
Lab. 1: Introducción
Glen Rodríguez
Máquinas virtuales


Vamos a usar máquinas virtuales en el laboratorio de
este curso
El concepto de máquina virtual surge con el sistema
VM/370 de IBM en 1972. La idea principal es la de
permitir ejecutar varios sistemas operativos
simultáneamente sobre el mismo hardware. Para ello,
separa las dos funciones básicas que realiza un
sistema moderno: multiprogramación y abstracción
del hardware. El corazón del sistema es conocido
como monitor de máquina virtual, y se ejecuta sobre
el hardware proporcionando varias máquinas
virtuales al siguiente nivel de software (S.O.). Estas
máquinas virtuales, son copias exactas del hardware
desnudo. Por esto, cada una puede estar ejecutando
cualquier sistema operativo.
Por qué?


Recientemente, ha surgido VmWare, Xen,
Virtual Box. Permiten ejecutar Windows,
Linux, BSD, etc. de forma simultánea en la
misma computadora.
Por qué usarlo? Siempre es mejor probar
las cosas en una máquina que no es crítica
para el negocio y que, como en el caso de
las máquinas virtuales, se puede recuperar
en muy poco tiempo.
Definiciones

Sistema operativo anfitrión o host



Es el S.O. que realmente corre en la
computadora
Junto con la capa de virtualización, simula
un “hardware virtual” donde corre el:
Sistema operativo invitado o guest

Corre en un ambiente simulado
Funcionamiento (1)



En primer lugar se crea una máquina virtual,
para lo que se dispone de un asistente
donde se indican varios detalles como el
tamaño del disco duro, cantidad de RAM,
conexiones de red, etc.
El siguiente paso es, instalar el sistema
operativo y luego el software restante. El
proceso es idéntico a instalarlo en una
computadora recién salida de fábrica.
Esos pasos ya los hizo el personal FC. El
resultado es un archivo donde esta
contenido el sistema instalado
Funcionamiento (2)






Inicie el sistema operativo anfitrión
(host)
Copie la carpeta DebianCC con todos
sus archivos a su disco duro
Instale Virtual Box
Corra Virtual Box
Abra el archivo DebianCC.vbox
(Máquina – Agregar)
Ignore el mensaje de error
Funcionamiento (3)

Haga los siguientes cambios en la configuración,
haciendo click al botón “Configuración”
 En sistema, pestaña procesador, ponga 2 ó 4
procesadores (lo que soporte su computadora)
y límite ejecución = 100
 En sistema, placa base, suba la memoria a
512
 En la pestaña de Aceleración activa las dos
opciones que hay.
 En Almacenamiento, elimine el CDROM del
IDE Controller
Funcionamiento (4)




En USB, desactive el controlador USB
2.9
Cree en el sistema operativo host el
directorio cc301 (por ejemplo en windows
cree el directorio o carpeta c:\cc301)
Añada esa carpeta, en la opción carpetas
compartidas, el directorio cc301
Acepte y cierre configuración
Funcionamiento (5)






Ya puede usar su máquina virtual dando
click en Iniciar (flecha verde)
De aceptar a las ventanas de mensajes
Bootee la primera opción
Login: usuario= root, password= admincc
Ejecute: mount -t vboxsf cc301 /mnt
TIENE que hacer mount cada vez que
encienda este máquina virtual
Ejemplo de programa paralelo
con MPI




Vaya al directorio /home/user (Haga:
cd /home/user)
Inicie el deamon de mip (haga: mpd &)
Vea el programa hello.c
Ejeciute el programa en 1 solo CPU y
en 2 CPUs


mpiexec –n 1 ./hello
mpiexec –n 2 ./hello
#include <mpi.h>
#include <stdio.h>
#include <string.h>
#define BUFSIZE 128
#define TAG 0
int main(int argc, char *argv[])
{
char idstr[32];
char buff[BUFSIZE];
int numprocs;
int myid;
int i;
MPI_Status stat;
MPI_Init(&argc,&argv); /* all MPI programs start with MPI_Init; all 'N'
processes exist thereafter */
MPI_Comm_size(MPI_COMM_WORLD,&numprocs); /* find out how big
the SPMD world is */
MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* and this processes'
rank is */
/* At this point, all programs are running equivalently, the rank
distinguishes
the roles of the programs in the SPMD model, with rank 0 often used
specially... */
if(myid == 0)
{
printf("%d: We have %d processors\n", myid, numprocs);
for(i=1;i<numprocs;i++)
{
sprintf(buff, "Hello %d! ", i);
MPI_Send(buff, BUFSIZE, MPI_CHAR, i, TAG,
MPI_COMM_WORLD);
}
for(i=1;i<numprocs;i++)
{
MPI_Recv(buff, BUFSIZE, MPI_CHAR, i, TAG,
MPI_COMM_WORLD, &stat);
printf("%d: %s\n", myid, buff);
}
}
else
{
/* receive from rank 0: */
MPI_Recv(buff, BUFSIZE, MPI_CHAR, 0, TAG,
MPI_COMM_WORLD, &stat);
sprintf(idstr, "Processor %d ", myid);
strncat(buff, idstr, BUFSIZE-1);
strncat(buff, "reporting for duty\n", BUFSIZE-1);
/* send to rank 0: */
MPI_Send(buff, BUFSIZE, MPI_CHAR, 0, TAG,
MPI_COMM_WORLD);
}
MPI_Finalize(); /* MPI Programs end with MPI Finalize; this is a
weak synchronization point */
return 0;
}