Paralela9

21
1 Programación y Computación paralela MPI y Globus Glen D. Rodríguez R. Basado en Foster y Kesselman

description

Clase 9

Transcript of Paralela9

Page 1: Paralela9

1

Programación y Computación paralela

MPI y Globus

Glen D. Rodríguez R.

Basado en Foster y Kesselman

Page 2: Paralela9

2

Por qué usar el GRID?

• Han aparecido nuevas aplicaciones basadas en el uso coordinado de gente, computadoras, bases de datos, sensores, instrumentos, pero a ALTA VELOCIDAD

• Instrumentos manejados por computadoras

• Ingeniería colaborativa

• Exploración de bases de datos remotas

• Uso de software remoto

• Computación que usa data en forma intensiva

• Simulación a enormes escalas

• Estudios con parámetros de gran escala

Page 3: Paralela9

3

Ejemplo: SF express

• Simulación distribuida e interactiva

• Necesita:

• Descubrir recursos de cómputo

• Configuración

• Muchos métodos de comunicación

• MPI

• Escalabilidad

• Tolerancia a fallos

Page 4: Paralela9

4

El Grid

• “Acceso fiable, consistente, pervasivo y difundido a recursos de alta performance”

• Fiable: puede proporcionar garantías de performance y funcionalidad.

• Consistente: interfaces uniformes para acceder a una gran variedad de recursos

• Difundido: habilidad de “enchufarse” al Grid desde cualquier lugar

Page 5: Paralela9

5

Desafíos técnicos

• Estructuras de las aplicaciones son complejas, combinando aspectos de computo paralelo, multimedia, computo distribuido, computo colaborativo.

• Las características de los recursos varían dinámicamente, tanto en el tiempo como en el espacio

• Se necesita una garantía de alta performance de “extremo a extremo”, a pesar de lo heterogéneo de los recursos y la falta de control global

• Seguridad, políticas de uso, pago por el uso.

Page 6: Paralela9

6

Globus

• Investigación básica en tecnologías de Grid• Administración de recursos, QoS, redes, almacenamiento,

seguridad, adaptación, políticas, etc.

• Se ha hecho el TOOLKIT GLOBUS• Servicios centrales para programación usando Grid (de

aplicaciones y de herramientas)

• Hay un “test bed” grande: GUSTO• Muy grande en términos de sites y aplicaciones

• Experimentos con varias aplicaciones• Tele inmersión, computo distribuido, etc.

Page 7: Paralela9

7

Enfoque del Globus

• Un toolkit y una colección de servicios que soluciona varios problemas técnicos vitales

• Modelo de “bolsa de servicios”

• No es una solución integrada verticalmente (no cubre todas las necesidad a lo largo del desarrollo del software)

• Se distingue entre servicios locales y remotos

• Modelo de “reloj de arena”

• Se enfoca en la arquitectura

• Servicios centrales son la infraestructura básica.

• Las soluciones más específicas y de mayor nivel se construye sobre esos servicios como base.

• Principios de su diseño

• Bajo costo de participación

• Control local

• Adaptación

Page 8: Paralela9

8

Arquitectura en capas

Page 9: Paralela9

9

Servicios centrales de Globus

• Infraestructura de comunicación (Nexus, IO)

• Servicios de Información (MDS)

• Monitoreo de la performance de la red (Gloperf)

• Monitoreo de proceso (HBM)

• Administración de archivos y ejecutables remotos (GASS y GEM)

• Administración de recursos (GRAM)

• Seguridad (GSI)

Page 10: Paralela9

10

Ejemplo de servicios de alto nivel

• Librerías de comunicación y de I/O• MPICH, PAWS, MPI-IO, PPFS, MOL

• Lenguajes paralelos• CC++, HPC++

• Ambientes colaborativos• CavernSoft, ManyWorlds

• Otros• MetaNEOS, NetSolve, LSA, Autopilot, WebFlow

• OJO: el testbed de GUSTO permite probar el GRID con máquinas en USA, Europa y Asia.

Page 11: Paralela9

11

MPICH-G2

• Es una implementación de MPI con capacidad de usar Grid, específicamente, de usar servicios del GlobusToolkit

• Permite usar máquinas remotas en grupos MPI y correr aplicaciones MPI

• La conversión de datos en diferentes arquitecturas y formatos es automática.

• Entre máquinas de diferentes arquitecturas o sites la comunicación es vía TCP. En un site, puede ser por otros mecanismos.

• Está implementada como un MPI que corre usando un dispositivo virtual de comunicación “globus2”

• Ejemplos de uso: Cactus (framework para simulaciones numéricas)

Page 12: Paralela9

12

Instalación de MPICH-G2

• La librería del Globus toolkit v.2.x debe estar instalada

• Probar que Globus v.2.x o posterior funcione con el programa “hello world”

• La variable GLOBUS_LOCATION debe apuntar al directorio donde está instalado Globus

• Bajarse el MPICH v.1.2.5.3 o posterior, descomprimir

• Configurar el MPICH especificando que use el deviceglobus2 y alguno de los “flavors” instalados

• ./configure -device=globus2:-flavor=gcc32dbg

• Construir el MPICH con “make” o “make install”

Page 13: Paralela9

13

Pasos extra

• Tener una cuenta en Globus

• En las maquinas en que se corra el mpirun debe hacerse antes:

• source $GLOBUS_LOCATION/etc/globus-user-env.csh, ó

• $GLOBUS_LOCATION/etc/globus-user-env.sh

• El deamon Globus con por lo menos un servicio de jobmanager debe estar activo

• Compilar con mpicc o similar, para cada arquitectura donde se desee correr la aplicación.

• Ejecutar con mpirun

• Se debe crear un script RSL. Se puede dejar que el mpirun lo haga por uno (solo si todas las maquinas ya tienen una copia del ejecutable compilado para la CPU respectiva)

Page 14: Paralela9

14

Pasos extra

• Caso contrario, hay que crear ese archivo RSL a mano. Ejemplo:• +• ( &(resourceManagerContact="m1.utech.edu") • (count=10)• (jobtype=mpi)• (label="subjob 0")• (environment=(GLOBUS_DUROC_SUBJOB_INDEX 0)• (MY_ENV 246))• (arguments=" 123 456")• (directory=/homes/users/smith)• (executable=/homes/users/smith/myapp)• )• ( &(resourceManagerContact="m2.utech.edu") • (count=2)• (jobtype=mpi)• (label="subjob 1")• (environment=(GLOBUS_DUROC_SUBJOB_INDEX 1))• (arguments=" 123 456")• (directory=/homes/users/smith)• (executable=/homes/users/smith/myapp)• )

Page 15: Paralela9

15

RSL

• Y se ejecuta así:

• mpirun -globusrsl archivo.rsl

• Si se quiere ver el RSL pero no ejecutar nada, correr el mpirun con opción –dumprsl

• Componentes del RSL:

• resourceManagerContact = valor , dirección de la máquina y job manager bajo el cuál el job empieza

• count = valor, número de CPUs

• label = “subjob N”, una etiqueta única como identificar de este subjob

• environment = valores, son las variables de ambiente del job

• directory = … es el path donde se corre el programa

• executable = … es el programa con todo y path en la computadora remota

Page 16: Paralela9

16

RSL

• maxMemory = … , tamaño de memoría a usar en Mb

• maxWallTime = …, tiempo asignado en minutos

• jobType= single | multiple | mpi | condor

• Arguments = valores, son los argumentos de la línea de comandos

Page 17: Paralela9

17

Modificando el archivo RSL

• Una modificación típica es para que las comunicaciones colectivas del MPICH-G2 sepan más sobre la topología del grid.

• Otra, cuando varias computadoras quieren escribir su output a su propia pantalla en vez de al mismo dispositivo (pantalla del procesador 0). A veces, por razones de supervisión o monitoreo, es mejor que sean los administradoes locales los que vena el stdout y el stderr.

• Ver siguiente ejemplo

Page 18: Paralela9

18

Ejemplo RSL

+( &(resourceManagerContact="agt-login.epn.osc.edu/jobmanager-pbs")

(count=2)

(label="subjob0")

(stdout="/home/jimg/dje/bones/stdout.osc")

(stderr="/home/jimg/dje/bones/stderr.osc")

(environment=(GLOBUS_DUROC_SUBJOB_INDEX 0)(LD_LIBRARY_PATH/apps/vdt/globus/lib:@PREFIX@/lib/shared))

(directory="/home/jimg/dje/bones")

(executable="/home/jimg/dje/bones/dice")

)

( &(resourceManagerContact="agt-login.ccs.uky.edu/jobmanager-pbs")

(count=2)

(label="subjob2")

(stdout="/home/jimg/dje/bones/stdout.uky")

(stderr="/home/jimg/dje/bones/stderr.uky")

(environment=(GLOBUS_DUROC_SUBJOB_INDEX 1)(LD_LIBRARY_PATH/apps/vdt/globus/lib:@PREFIX@/lib/shared))

(directory="/home/jimg/dje/bones")

(executable="/home/jimg/dje/bones/dice")

Page 19: Paralela9

19

Programa ejemplo MPI

#include <mpi.h>#include <stdio.h>void main(int argc, char*argv[]) {intrank, nprocs, number; charbuf[1024]; MPI_Status report;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&nprocs);gethostname(buf,sizeof(buf));printf("hello from %d/%d name %s\n",rank,nprocs,buf);if (rank < (nprocs/2)) {number=(rank+1)*10+rank+1;MPI_Send(&number,1,MPI_INT,nprocs-

(rank+1),12,MPI_COMM_WORLD); } else {MPI_Recv(&number,1,MPI_INT,MPI_ANY_SOURCE,12,MPI_COMM

_WORLD,&report);}printf("P:%d my number=%d\n",rank,number);MPI_Finalize(); }

Page 20: Paralela9

20

Programa ejemplo

• El output de ese ejemplo es:

hello from 0/6 comp1.uni.edu.pe

P:0 my number=11

hello from 1/6 comp0

P:1 my number=22

hello from 2/6 comp0.unmsm.edu.pe

P:2 my number=33

hello from 3/6 comp1.uni.edu.pe

P:3 my number=33

hello from 4/6 comp0

P:4 my number=22

hello from 5/6 comp0. unmsm.edu.pe

P:5 my number=11

Page 21: Paralela9

21

Programa ejemplo

• Si vemos la salida, ha habido transferencia de datos entre 2 sites remotos, uni y unmsm

• MPICH-G2 agrupa a las comunicaciones de las más lentas a las más rápidas:

• WAN-TCP

• LAN-TCP

• Intra-machine-TCP

• vMPI

• Los mensajes en WAN-TCP (ejemplo: Internet) cuando son largos hay la opción de pasarlos por el streaming(múltiples conexiones)

• Para eso, consulta “MPI communicator attributes”