charj: get rid of extra malloc in jacobi implementation
[charm.git] / src / langs / pvmc / pvm3.h
1 #ifndef __PVM3_H__
2 #define __PVM3_H__
3
4 struct pvmhostinfo {
5         int hi_tid;                     /* pvmd tid */
6         char *hi_name;          /* host name */
7         char *hi_arch;          /* host arch */
8         int hi_speed;           /* cpu relative speed */
9 };
10
11 struct pvmtaskinfo {
12         int ti_tid;                             /* task id */
13         int ti_ptid;                    /* parent tid */
14         int ti_host;                    /* pvmd tid */
15         int ti_flag;                    /* status flags */
16         char *ti_a_out;                 /* a.out name */
17         int ti_pid;                             /* task (O/S dependent) process id */
18 };
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 void pvmc_init(void);
25 int pvm_mkbuf(int encoding);
26 int pvm_freebuf(int bufid);
27 int pvm_getsbuf(void);
28 int pvm_setsbuf(int bufid);
29 int pvm_getrbuf(void);
30 int pvm_setrbuf(int bufid);
31 int pvm_initsend(int encoding);
32 int pvm_bufinfo(int bufid, int *bytes, int *msgtag, int *tid);
33
34 int pvm_send(int tid, int tag);
35 int pvm_mcast(int *tids, int ntask, int msgtag);
36 int pvm_nrecv(int tid, int tag);
37 int pvm_recv(int tid, int tag);
38 int pvm_probe(int tid, int tag);
39
40 int pvm_mytid(void);
41 int pvm_exit(void);
42 int pvm_kill(int tid);
43 int pvm_spawn(char *task, char **argv, int flag,
44               char *where, int ntask, int *tids);
45 int pvm_parent(void);
46 int pvm_config(int *nhost, int *narch, struct pvmhostinfo **hostp);
47 int pvm_tasks(int which, int *ntask, struct pvmtaskinfo **taskp);
48 int pvm_setopt(int what, int val);
49 int pvm_gsize(char *group);
50 int pvm_gettid(char *group, int inum);
51
52 int pvm_upkbyte(char *cp, int cnt, int std);
53 int pvm_upkcplx(float *xp, int cnt, int std);
54 int pvm_upkdcplx(double *zp, int cnt, int std);
55 int pvm_upkdouble(double *dp, int cnt, int std);
56 int pvm_upkfloat(float *fp, int cnt, int std);
57 int pvm_upkint(int *np, int cnt, int std);
58 int pvm_upklong(long *np, int cnt, int std);
59 int pvm_upkshort(short *np, int cnt, int std);
60 int pvm_upkuint(unsigned int *np, int cnt, int std);
61 int pvm_upkulong(unsigned long *np, int cnt, int std);
62 int pvm_upkushort(unsigned short *np, int cnt, int std);
63 int pvm_upkstr(char *cp);
64
65 int pvm_pkbyte(char *cp, int cnt, int std);
66 int pvm_pkcplx(float *xp, int cnt, int std);
67 int pvm_pkdcplx(double *zp, int cnt, int std);
68 int pvm_pkdouble(double *dp, int cnt, int std);
69 int pvm_pkfloat(float *fp, int cnt, int std);
70 int pvm_pkint(int *np, int cnt, int std);
71 int pvm_pklong(long *np, int cnt, int std);
72 int pvm_pkshort(short *np, int cnt, int std);
73 int pvm_pkuint(unsigned int *np, int cnt, int std);
74 int pvm_pkulong(unsigned long *np, int cnt, int std);
75 int pvm_pkushort(unsigned short *np, int cnt, int std);
76 int pvm_pkstr(char *cp);
77
78 int pvm_bcast(const char *group, int msgtag);
79 int pvm_joingroup(const char *group);
80 int pvm_lvgroup(const char *group);
81 int pvm_barrier(const char *group, int count);
82 #ifdef __cplusplus
83 }
84 #endif
85
86
87
88 /* defines from pvm3.h */
89
90 /*
91 *       Data packing styles for pvm_initsend()
92 */
93
94 #define PvmDataDefault  0
95 #define PvmDataRaw              1
96 #define PvmDataInPlace  2
97 #define PvmDataFoo              3
98
99 /*
100 *       pvm_spawn options
101 */
102
103 #define PvmTaskDefault  0
104 #define PvmTaskHost             1       /* specify host */
105 #define PvmTaskArch             2       /* specify architecture */
106 #define PvmTaskDebug    4       /* start task in debugger */
107 #define PvmTaskTrace    8       /* process generates trace data */
108 /* for MPP ports */
109 #define PvmMppFront             16      /* spawn task on service node */
110 #define PvmHostCompl    32      /* complement host set */
111
112 /*
113 *       pvm_notify types
114 */
115
116 #define PvmTaskExit             1       /* on task exit */
117 #define PvmHostDelete   2       /* on host fail/delete */
118 #define PvmHostAdd              3       /* on host startup */
119
120 /*
121 *       for pvm_setopt and pvm_getopt
122 */
123
124 #define PvmRoute                        1       /* routing policy */
125 #define         PvmDontRoute            1       /* don't allow direct task-task links */
126 #define         PvmAllowDirect          2       /* allow direct links, but don't request */
127 #define         PvmRouteDirect          3       /* request direct links */
128 #define PvmDebugMask            2       /* debugmask */
129 #define PvmAutoErr                      3       /* auto error reporting */
130 #define PvmOutputTid            4       /* stdout destination for children */
131 #define PvmOutputCode           5       /* stdout message tag */
132 #define PvmTraceTid                     6       /* trace destination for children */
133 #define PvmTraceCode            7       /* trace message tag */
134 #define PvmFragSize                     8       /* message fragment size */
135 #define PvmResvTids                     9       /* allow reserved message tids and codes */
136 #define PvmSelfOutputTid        10      /* stdout destination for task */
137 #define PvmSelfOutputCode       11      /* stdout message tag */
138 #define PvmSelfTraceTid         12      /* trace destination for task */
139 #define PvmSelfTraceCode        13      /* trace message tag */
140 #define PvmShowTids                     14      /* pvm_catchout prints task ids with output */
141 #define PvmPollType                     15      /* shared memory wait method */
142 #define         PvmPollConstant 1
143 #define         PvmPollSleep    2
144 #define PvmPollTime                     16      /* time before sleep if PvmPollSleep */
145
146 /*
147 *       for pvm_[sg]ettmask
148 */
149
150 #define PvmTaskSelf             0       /* this task */
151 #define PvmTaskChild    1       /* (future) child tasks */
152
153 /*
154 *       Libpvm error codes
155 */
156
157 #define PvmOk                   0       /* Error 0 */
158 #define PvmBadParam             -2      /* Bad parameter */
159 #define PvmMismatch             -3      /* Count mismatch */
160 #define PvmOverflow             -4      /* Value too large */
161 #define PvmNoData               -5      /* End of buffer */
162 #define PvmNoHost               -6      /* No such host */
163 #define PvmNoFile               -7      /* No such file */
164 #define PvmNoMem                -10     /* Malloc failed */
165 #define PvmBadMsg               -12     /* Can't decode message */
166 #define PvmSysErr               -14     /* Can't contact local daemon */
167 #define PvmNoBuf                -15     /* No current buffer */
168 #define PvmNoSuchBuf    -16     /* No such buffer */
169 #define PvmNullGroup    -17     /* Null group name */
170 #define PvmDupGroup             -18     /* Already in group */
171 #define PvmNoGroup              -19     /* No such group */
172 #define PvmNotInGroup   -20     /* Not in group */
173 #define PvmNoInst               -21     /* No such instance */
174 #define PvmHostFail             -22     /* Host failed */
175 #define PvmNoParent             -23     /* No parent task */
176 #define PvmNotImpl              -24     /* Not implemented */
177 #define PvmDSysErr              -25     /* Pvmd system error */
178 #define PvmBadVersion   -26     /* Version mismatch */
179 #define PvmOutOfRes             -27     /* Out of resources */
180 #define PvmDupHost              -28     /* Duplicate host */
181 #define PvmCantStart    -29     /* Can't start pvmd */
182 #define PvmAlready              -30     /* Already in progress */
183 #define PvmNoTask               -31     /* No such task */
184 #define PvmNoEntry              -32     /* No such entry */
185 #define PvmDupEntry             -33     /* Duplicate entry */
186
187 /*
188 *       Data types for pvm_reduce(), pvm_psend(), pvm_precv()
189 */
190
191 #define PVM_STR                 0       /* string */
192 #define PVM_BYTE                1       /* byte */
193 #define PVM_SHORT               2       /* short */
194 #define PVM_INT                 3       /* int */
195 #define PVM_FLOAT               4       /* real */
196 #define PVM_CPLX                5       /* complex */
197 #define PVM_DOUBLE              6       /* double */
198 #define PVM_DCPLX               7       /* double complex */
199 #define PVM_LONG                8       /* long integer */
200 #define PVM_USHORT              9       /* unsigned short int */
201 #define PVM_UINT                10      /* unsigned int */
202 #define PVM_ULONG               11      /* unsigned long int */
203
204 #endif