Olivier GLUCK Jérôme JEANJEAN Responsable : Philippe LALEVEE, Département INF 05/02/1999
3b [0][3] [1][2] hsl56hsl59 hsl57hsl58 5b 1b 3a 1b a5 1a 5b b3 1a 5a 3a Architecture des 4 machines HSL
Plan Introduction Machine MPC PVM standard PVM pour MPC Résultats sur PVM-MPC Conclusion
UserAccess SLR/V SLR/P PUT HSLCMEM Espace Utilisateur Espace Noyau Architecture Logicielle
Interconnexion entre modules sur la machine MPC
Connexions RPC mettant en jeu le nœud 0
/dev/cmem : low level driver for contig. space physical start : 0x103ea000 virtual start : 0xf length : | slot | phys start | virt start | size | name | | 0 | 0x103ea000 | 0xf | | PUT | | 1 | 0x104ea000 | 0xf | | MISALIGN | | 2 | 0x104fb000 | 0xf | | PCIDDC | | 3 | 0x | 0xf56af000 | | SLR/P | | 4 | 0x0 | 0x0 | 0 | | | 5 | 0x0 | 0x0 | 0 | | Contenu de /dev/cmem
Communications HSL Mode Receiver-Driven : transfert sous contrôle du récepteur Transfert initié par Slrpv_recv() => zones mémoires Emetteur : Slrpv_send() Canal de communication : information commune au récepteur et à l émetteur
Couches du système PVM
Pvm Standard Librairies et démon(s) Machines hétérogènes => 1 seul ordinateur Répartition des tâches Primitives de base : Pvm_send et Pvm_recv
[0][3] [1][2] hsl56hsl59 hsl57hsl58 Nœud de service Nœuds de calcul Philosophie de PVM-MPC
Architecture générale de PVM-MPC
Création et initialisation dune tâche PVM
TM TE D Nœud de serviceNœud de calcul SU Communication HSL Un exemple de communication maître-esclave
Tâche 2Tâche 1 Tâche Maître Démon Protocole de connexion HSL
/dev/hsl : kernel drivers and protocols for MPC parallel computer ***** SLR/V - SCP/V calls to send() : 12 calls to recv() : 9 ***** SLR/P - SCP/V calls to send() : 12 calls to recv() : 9 calls to ddslrp_timeout() : 0 timeouts from timeouts : 0 ***** PUT calls to put_add_entry() : 30 hardware interrupts : 51 Contenu de /dev/hsl
Compilation d une application PVM-MPC Tâche maître liée avec librairie standard Tâches esclaves liées avec librairie PVM- MPC master1: $(SDIR)/master1.c $(XDIR) $(CC) $(CFLAGS) -o master1 $(SDIR)/master1.c $(LIBS) slave1: $(SDIR)/slave1.c $(XDIR) $(CC) $(CFLAGS) -o slave1 $(SDIR)/slave1.c $(NODELIBS)
Portage d application Avant portage if (pvm_config(&nh, &na, &hp) < 0) { pvm_perror("config:"); pvm_exit(); exit(1); } printf("Jeton circulant sur %d hosts (%d architectures)\n", nh, na); tids[0] = mytid; moi = 0; for (i=1; i<nh; i++) { pvm_spawn("jeton",0, PvmTaskHost, hp[i].hi_name, 1, &tids[i]); } Après portage nh = 3 ; /* Nombre d'hotes remplace par le nombre de processeurs */ printf("Jeton circulant sur %d processeurs\n", nh); tids[0] = mytid; moi = 0; pvm_spawn("jeton_mpc_s",(char**)0, 0, "", nh, &tids[1]);