]>
If Cut/Copy and Paste fails, then click here for download.
#include <sys/time.h> #include <pvm3.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdio.h> int main (int argc,char**argv){ int tid[3],size,rank,me,from,to,i,atid,atag,alen; char*buf;struct timeval tv0,tv1;double t0,t1; size=(int)(sizeof(tid)/sizeof(tid[0]));rank=pvm_joingroup("pvmtest"); #if (!defined(_CRAYMPP)) if (rank==0) {char binbuf[4096],pwdbuf[4096]; (void)strcpy(binbuf,getcwd(pwdbuf,sizeof(pwdbuf))); (void)strcat(binbuf,(char*)"/"); (void)strcat(binbuf,*argv); if (pvm_spawn(binbuf,argv,0,(char*)0,size-1,&tid[1])<size-1) (void)exit(1);} #endif if (pvm_barrier("pvmtest",size)<0) (void)exit(1); buf=malloc(100000*sizeof(char)); (void)memset(buf,0,100000*sizeof(char)); me=pvm_mytid(); from=pvm_gettid("pvmtest",(rank+size-1)%size); to=pvm_gettid("pvmtest",(rank+size+1)%size); for(i=1;i<100000;i++){ if (rank==0 && size>1){ (void)pvm_hostsync(me,&tv0,0); (void)pvm_psend(to, 0,(char*)buf,i*sizeof(char),PVM_BYTE); (void)pvm_precv(from,0,(char*)buf,i*sizeof(char),PVM_BYTE,&atid,&atag,&alen); (void)pvm_hostsync(me,&tv1,0); t0=tv0.tv_sec+(double)tv0.tv_usec*1.0e-6; t1=tv1.tv_sec+(double)tv1.tv_usec*1.0e-6; (void)printf("message size = %d, norm comm time = %g\n",i,(t1-t0)/(double)size);} else if (rank!=0 && size>1){ (void)pvm_precv(from,0,(char*)buf,i*sizeof(char),PVM_BYTE,&atid,&atag,&alen); (void)pvm_psend(to, 0,(char*)buf,i*sizeof(char),PVM_BYTE);}} (void)pvm_exit(); return(0);}