Remember to invoke SETUP PVM first.
PVMINC=$(PVM_ROOT)/include PVMLIB=$(PVM_ROOT)/lib/$(PVM_ARCH) all: $(PVM_HOME)/master $(PVM_HOME)/slave run: $(PVM_HOME)/master $(PVM_HOME)/master: master.c def.h cc -g master.c -o $(PVM_HOME)/master -L$(PVMLIB) -I$(PVMINC) -lpvm3 -lgpvm3 $(PVM_HOME)/slave: slave.c def.h cc -g slave.c -o $(PVM_HOME)/slave -L$(PVMLIB) -I$(PVMINC) -lpvm3 -lgpvm3 clean: rm $(PVM_HOME)/master $(PVM_HOME)/slave rm -f *.o
#include <stdio.h> #include <pvm3.h> #define SLAVENAME "slave" #define SLAVENUM 10 #define NAMESIZE 64 #define MSG_MSTR 1 #define MSG_SLV 2
compile with: make
#include "def.h"
main()
{
int mytid;
int tids[SLAVENUM]; /* slave task ids */
char slave_name[NAMESIZE];
int nproc, i, who;
mytid=pvm_mytid();
nproc=pvm_spawn(SLAVENAME, NULL, PvmTaskDefault, "", SLAVENUM, tids);
for( i=0 ; i<nproc ; i++ )
{
pvm_initsend(PvmDataDefault);
pvm_pkint(&mytid, 1, 1);
pvm_pkint(&i, 1, 1);
pvm_send(tids[i], MSG_MSTR);
}
for( i=0 ; i<nproc ; i++ )
{
pvm_recv( -1, MSG_SLV );
pvm_upkint(&who, 1, 1 );
pvm_upkstr(slave_name );
printf("%d: %s\n",who, slave_name);
}
pvm_exit();
}