File: thb.c

package info (click to toggle)
pvm 3.4beta6-3
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 5,168 kB
  • ctags: 5,872
  • sloc: ansic: 65,239; makefile: 1,405; fortran: 631; sh: 417; csh: 67; asm: 37
file content (126 lines) | stat: -rw-r--r-- 3,408 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126

static char rcsid[] =
	"$Id: thb.c,v 1.2 1997/07/09 13:28:01 pvmsrc Exp $";

/*
 *         PVM version 3.4:  Parallel Virtual Machine System
 *               University of Tennessee, Knoxville TN.
 *           Oak Ridge National Laboratory, Oak Ridge TN.
 *                   Emory University, Atlanta GA.
 *      Authors:  J. J. Dongarra, G. E. Fagg, M. Fischer
 *          G. A. Geist, J. A. Kohl, R. J. Manchek, P. Mucci,
 *         P. M. Papadopoulos, S. L. Scott, and V. S. Sunderam
 *                   (C) 1997 All Rights Reserved
 *
 *                              NOTICE
 *
 * Permission to use, copy, modify, and distribute this software and
 * its documentation for any purpose and without fee is hereby granted
 * provided that the above copyright notice appear in all copies and
 * that both the copyright notice and this permission notice appear in
 * supporting documentation.
 *
 * Neither the Institutions (Emory University, Oak Ridge National
 * Laboratory, and University of Tennessee) nor the Authors make any
 * representations about the suitability of this software for any
 * purpose.  This software is provided ``as is'' without express or
 * implied warranty.
 *
 * PVM version 3 was funded in part by the U.S. Department of Energy,
 * the National Science Foundation and the State of Tennessee.
 */

/*
	Join a bunch of groups and do some barriers
*/

#include <stdio.h>
#include "pvm3.h"

#define MAXGNAME 32 /* used to be a constant, length not important */
#define MAXGTIDS 32 /* used to be a constant, Number not important */
#define MAXNGROUPS 32 /* used to be constant, Number not important */

int
main(argc, argv)
int argc;
char *argv[];
{
	int mytid, ctid[MAXGTIDS];
	int nproc;
	char g[MAXGNAME];
	int cc;
	int gid[MAXNGROUPS], gs;
	int i;

	if (argc != 2) goto usage;
	if ((nproc = atoi(argv[1])) < 1) goto usage;
		
	mytid = pvm_mytid();
	if (mytid < 0) {
		pvm_perror(argv[0]);
		return -1;
		}

	/* join a bunch of groups */
	for (i = 0; i < MAXNGROUPS; i++) {
		sprintf(g, "group%d", i);
		if((gid[i] = pvm_joingroup(g)) < 0) {
			pvm_perror("joining");
			}
		fprintf(stderr, "joined %s\n", g);
		}

	/* test that i'm in the groups */
	for (i = MAXNGROUPS-1; i  >= 0; i--) {
		sprintf(g, "group%d", i);
		if(gid[i] != (cc = pvm_getinst(g, mytid))) {
			fprintf(stderr, "I'm not myself %d %s\n", cc, g);
			pvm_perror("getinst");
			}
		if(mytid != (cc = pvm_gettid(g, gid[i]))) {
			fprintf(stderr, "I'm not myself %d %s\n", cc, g);
			pvm_perror("gettid");
			}
		}

	/* start a bunch of children */
    printf("spawning ... ");
    pvm_spawn("tnb", (char**)0, 0, "", nproc, ctid);

    for (i = 0; i < nproc; i++) {
        if (ctid[i] < 0) {
            fprintf(stderr, "trouble on spawn number %d\n", ctid[i]);
            pvm_perror("th:");
            }
		else {
			int foo;
			foo = nproc+1;
			/* send a group name to the child */
			pvm_initsend(PvmDataDefault);
			pvm_pkstr(g);
			pvm_pkint(&foo, 1, 1);
			pvm_send(ctid[i], 5);
			}

		}

        printf ("barrier on %s \n", g);
	pvm_barrier(g, nproc+1);
	pvm_initsend(PvmDataDefault);
	pvm_bcast(g, 77);

        printf(" leaving all the groups \n");
	/* leave the groups */
	for (i = 0; i < MAXNGROUPS; i++) {
		sprintf(g, "group%d", i);
		if(pvm_lvgroup(g) < 0)
			pvm_perror("pvm_lvgroup");
		}

	pvm_exit();
	printf("done.\n");
	return 0;
usage:
	fprintf(stderr, "usage: %s <nproc>\n", argv[0]);
}