]> Simple PVM performance measurement program example

Simple PVM performance measurement program example


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);}

Thu, 07 Aug 2014 00:56:57 +0200

Stephan K.H. Seidl