/*********************************************** * PVM Timing - Master Program, File: master_tim.c * PVM Version used: 3.3.x * Comment: This file is an adaptation of one * packaged with the PVM source. ****************************************************/ #include <time.h> /* include file for timing */ #include "pvm3.h" /* PVM version 3.0 include file */ main() { int mytid; /* PVM task id for master */ int wtid; /* PVM task id for worker */ int rtid, rtag, rlen; /* parameters needed by pvm_precv */ struct timeval tv1, tv2; /* for timing */ int delta_t; /* time difference */ int i; /* loop index */ int int_array[10]; /* int for message */ /* initialize and print array */ for (i=0; i<10; i++){ int_array[i] = 1; printf("int_array[%d] = %d\n", i, int_array[i]); } /* enroll this task in PVM */ mytid = pvm_mytid(); /* spawn slave */ pvm_spawn("slave_tim", NULL, PvmTaskDefault, "", 1, &wtid); /* get initial time */ /* before time */ gettimeofday(&tv1, (struct timezone*)0); /* send array to slave */ pvm_psend(wtid, 1, int_array, 10, PVM_INT); /* receive return array */ pvm_precv(wtid, 2, int_array, 10, PVM_INT, &rtid, &rtag, &rlen); /* get final time */ /* after time */ gettimeofday(&tv2, (struct timezone*)0); /* calculate round trip delta_t and print */ delta_t = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec; printf("Array's round trip in uSec = %8d\n", delta_t); /* print final array to show that slave * has changed it */ for (i=0; i<10; i++) printf("int_array[%d] = %d\n", i, int_array[i]); /* exit from PVM */ pvm_exit(); exit(0); }