Listing 1. PVM Timing Master Program
/***********************************************
* 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);
}