Hello! Programare PVM

Pentru a exemplifica unele din conceptele programarii PVM, vom considera un exemplu de program simplu numit hello (celebrul hello!).

#include "pvm3.h"
main() { int cc,tid,msgtag; char buf[100]; 
printf("I am t%x\n", pvm_mytid()); 
cc=pvm_spawn("hello_other", (char**)0,0,"",1,&tid); 
if (cc == 1){ msgtag=1;
 pvm_recv(tid,msgtag);
 pvm_upkstr(buf);
 printf("from t%x: %s\n",tid,buf); }
else printf("can't start hello_other\n"); 
pvm_exit(); }

Acest program va fi lansat de utilizator; dupa afisarea identificatorului sau de task (obtinut cu functia pvm_mytid()), el initiaza o copie a unui alt task numit hello_other utilizând functia pvm_spawn(). Daca programul hello_other a fost initiat cu succes se va astepta receptionarea unui mesaj, se va despacheta acest mesaj (cu functia pvm_upkstr()), apoi se va afisa. În final pvm_exit() determina eliminarea programului din PVM.

#include "pvm3.h"
main() { int ptid,msgtag; char buf[100]; 
ptid=pvm_parent(); 
strcpy(buf, "hello, world from ");
 gethostname(buf+strlen(buf), 64); 
msgtag=1;
 pvm_initsend(PvmDataDefault); 
pvm_pkstr(buf); pvm_send(ptid,msgtag);
 pvm_exit(); }

Programul slave: întâi va obtine cu ajutorul functiei pvm_parent tid-ul master-ului, apoi va obtine numele gazdei pe care ruleaza si îl va transmite masterului. Transmiterea se va face utilizând o secventa de trei apeluri: pvm_initsend() pentru a initializa buffer-ul de transmisie, pvm_pkstr() pentru a plasa sirul, într-o maniera independenta de arhitectura, în buffer-ul de transmitere, iar cu pvm_send() se va trimite mesajul marcat cu msgtag la procesul specificat prin ptid.


(C) Copyright Computer Press Agora