Paralela9

1,426 views
1,399 views

Published on

Clase 9

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,426
On SlideShare
0
From Embeds
0
Number of Embeds
614
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Paralela9

  1. 1. Programación y Computación paralela MPI y Globus Glen D. Rodríguez R. Basado en Foster y Kesselman 1
  2. 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 2
  3. 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 3
  4. 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 4
  5. 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. 5
  6. 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. 6
  7. 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 7 • Adaptación
  8. 8. Arquitectura en capas 8
  9. 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) 9
  10. 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. 10
  11. 11. MPICH-G2 • Es una implementación de MPI con capacidad de usar Grid, específicamente, de usar servicios del Globus Toolkit • 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) 11
  12. 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 device globus2 y alguno de los “flavors” instalados • ./configure -device=globus2:-flavor=gcc32dbg • Construir el MPICH con “make” o “make install” 12
  13. 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 job manager 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) 13
  14. 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) • ) 14
  15. 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 15
  16. 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 16
  17. 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 17
  18. 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") 18
  19. 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 %sn",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=%dn",rank,number); MPI_Finalize(); } 19
  20. 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 20
  21. 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” 21

×