return to first page linux journal archive
keywordscontents

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