source: CIVL/include/headers/mpi.h@ 1aaefd4

main test-branch
Last change on this file since 1aaefd4 was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 31.3 KB
Line 
1#ifndef _MPI_
2#define _MPI_
3#include <op.h>
4#ifndef NULL
5#define NULL ((void*)0)
6#endif
7#define MPIX_NO_OP _NO_OP
8#define MPI_MAX _MAX
9#define MPI_MIN _MIN
10#define MPI_SUM _SUM
11#define MPI_PROD _PROD
12#define MPI_LAND _LAND
13#define MPI_BAND _BAND
14#define MPI_LOR _LOR
15#define MPI_BOR _BOR
16#define MPI_LXOR _LXOR
17#define MPI_BXOR _BXOR
18#define MPI_MINLOC _MINLOC
19#define MPI_MAXLOC _MAXLOC
20#define MPI_REPLACE _REPLACE
21
22typedef enum Operation MPI_Op;
23#define MPI_OP_NULL (-1)
24
25/* MPI definition */
26/* -*- Mode: C; c-basic-offset:4 ; -*- */
27/*
28 * (C) 2001 by Argonne National Laboratory.
29 * See COPYRIGHT in top-level directory.
30 */
31/* src/include/mpi.h. Generated from mpi.h.in by configure. */
32/* Results of the compare operations. */
33#define MPI_IDENT 0
34#define MPI_CONGRUENT 1
35#define MPI_SIMILAR 2
36#define MPI_UNEQUAL 3
37
38#ifdef __MPI_DATATYPE__
39#else
40#define __MPI_DATATYPE__
41typedef enum MPI_Datatype{
42 MPI_CHAR = 0,
43 MPI_CHARACTER = 1,
44 MPI_SIGNED_CHAR,
45 MPI_UNSIGNED_CHAR,
46 MPI_BYTE = 2,
47 MPI_WCHAR,
48 MPI_SHORT = 3,
49 MPI_UNSIGNED_SHORT,
50 MPI_INT = 4,
51 MPI_INT16_T,
52 MPI_INT32_T,
53 MPI_INT64_T,
54 MPI_INT8_T,
55 MPI_INTEGER,
56 MPI_INTEGER1,
57 MPI_INTEGER16,
58 MPI_INTEGER2,
59 MPI_INTEGER4,
60 MPI_INTEGER8,
61 MPI_UNSIGNED,
62 MPI_LONG = 5,
63 MPI_UNSIGNED_LONG,
64 MPI_FLOAT = 9,
65 MPI_DOUBLE = 10,
66 MPI_LONG_DOUBLE = 11,
67 MPI_LONG_LONG_INT = 6,
68 MPI_UNSIGNED_LONG_LONG = 7,
69 MPI_LONG_LONG = 8,
70 MPI_PACKED,
71 MPI_LB,
72 MPI_UB,
73 MPI_UINT16_T,
74 MPI_UINT32_T,
75 MPI_UINT64_T,
76 MPI_UINT8_T,
77 MPI_FLOAT_INT,
78 MPI_DOUBLE_INT,
79 MPI_LONG_INT,
80 MPI_SHORT_INT,
81 MPI_2INT = 12,
82 MPI_LONG_DOUBLE_INT,
83 MPI_AINT,
84 MPI_OFFSET,
85 MPI_2DOUBLE_PRECISION,
86 MPI_2INTEGER,
87 MPI_2REAL,
88 MPI_C_BOOL,
89 MPI_C_COMPLEX,
90 MPI_C_DOUBLE_COMPLEX,
91 MPI_C_FLOAT_COMPLEX,
92 MPI_C_LONG_DOUBLE_COMPLEX,
93 MPI_COMPLEX,
94 MPI_COMPLEX16,
95 MPI_COMPLEX32,
96 MPI_COMPLEX4,
97 MPI_COMPLEX8,
98 MPI_REAL,
99 MPI_REAL16,
100 MPI_REAL2,
101 MPI_REAL4,
102 MPI_REAL8
103} MPI_Datatype;
104#define MPI_DATATYPE_NULL (-1)
105#endif
106
107typedef long MPI_Aint;
108typedef int MPI_Fint;
109typedef struct CIVL_MPI_Comm * MPI_Comm;
110typedef struct MPI_Group MPI_Group;
111typedef struct MPI_Request * MPI_Request;
112typedef struct MPIX_Message MPIX_Message;
113typedef struct MPI_File MPI_File;
114typedef struct MPI_Errhandler MPI_Errhandler;
115typedef struct MPI_User_function MPI_User_function;
116typedef struct MPI_Copy_function MPI_Copy_function;
117typedef struct MPI_Delete_function MPI_Delete_function;
118typedef int MPI_Win;
119typedef int MPI_Info;
120typedef long long MPI_Offset;
121
122/* for subarray and darray constructors */
123#define MPI_ORDER_C 56
124#define MPI_ORDER_FORTRAN 57
125#define MPI_DISTRIBUTE_BLOCK 121
126#define MPI_DISTRIBUTE_CYCLIC 122
127#define MPI_DISTRIBUTE_NONE 123
128#define MPI_DISTRIBUTE_DFLT_DARG -49767
129
130/* Topology types */
131typedef enum MPIR_Topo_type { MPI_GRAPH=1, MPI_CART=2, MPI_DIST_GRAPH=3 } MPIR_Topo_type;
132
133/* for the datatype decoders */
134typedef enum MPIR_Combiner_enum {
135 MPI_COMBINER_NAMED = 1,
136 MPI_COMBINER_DUP = 2,
137 MPI_COMBINER_CONTIGUOUS = 3,
138 MPI_COMBINER_VECTOR = 4,
139 MPI_COMBINER_HVECTOR_INTEGER = 5,
140 MPI_COMBINER_HVECTOR = 6,
141 MPI_COMBINER_INDEXED = 7,
142 MPI_COMBINER_HINDEXED_INTEGER = 8,
143 MPI_COMBINER_HINDEXED = 9,
144 MPI_COMBINER_INDEXED_BLOCK = 10,
145 MPIX_COMBINER_HINDEXED_BLOCK = 11,
146 MPI_COMBINER_STRUCT_INTEGER = 12,
147 MPI_COMBINER_STRUCT = 13,
148 MPI_COMBINER_SUBARRAY = 14,
149 MPI_COMBINER_DARRAY = 15,
150 MPI_COMBINER_F90_REAL = 16,
151 MPI_COMBINER_F90_COMPLEX = 17,
152 MPI_COMBINER_F90_INTEGER = 18,
153 MPI_COMBINER_RESIZED = 19
154}MPIR_Combiner_enum;
155
156/* C functions */
157typedef void (MPI_Handler_function) ( MPI_Comm *, int *, ... );
158typedef int (MPI_Comm_copy_attr_function)(MPI_Comm, int, void *, void *,
159 void *, int *);
160typedef int (MPI_Comm_delete_attr_function)(MPI_Comm, int, void *, void *);
161typedef int (MPI_Type_copy_attr_function)(MPI_Datatype, int, void *, void *,
162 void *, int *);
163typedef int (MPI_Type_delete_attr_function)(MPI_Datatype, int, void *, void *);
164typedef int (MPI_Win_copy_attr_function)(MPI_Win, int, void *, void *, void *,
165 int *);
166typedef int (MPI_Win_delete_attr_function)(MPI_Win, int, void *, void *);
167/* added in MPI-2.2 */
168typedef void (MPI_Comm_errhandler_function)(MPI_Comm *, int *, ...);
169typedef void (MPI_File_errhandler_function)(MPI_File *, int *, ...);
170typedef void (MPI_Win_errhandler_function)(MPI_Win *, int *, ...);
171/* names that were added in MPI-2.0 and deprecated in MPI-2.2 */
172typedef MPI_Comm_errhandler_function MPI_Comm_errhandler_fn;
173typedef MPI_File_errhandler_function MPI_File_errhandler_fn;
174typedef MPI_Win_errhandler_function MPI_Win_errhandler_fn;
175/* Function type defs */
176typedef int (MPI_Datarep_conversion_function)(void *, MPI_Datatype, int,
177 void *, MPI_Offset, void *);
178typedef int (MPI_Datarep_extent_function)(MPI_Datatype datatype, MPI_Aint *,
179 void *);
180#define MPI_CONVERSION_FN_NULL ((MPI_Datarep_conversion_function *)0)
181
182#define MPI_NULL_COPY_FN ((MPI_Copy_function *)0)
183#define MPI_NULL_DELETE_FN ((MPI_Delete_function *)0)
184#define MPI_COMM_NULL_COPY_FN ((MPI_Comm_copy_attr_function*)0)
185#define MPI_COMM_NULL_DELETE_FN ((MPI_Comm_delete_attr_function*)0)
186#define MPI_COMM_DUP_FN ((MPI_Comm_copy_attr_function *)0)
187#define MPI_WIN_NULL_COPY_FN ((MPI_Win_copy_attr_function*)0)
188#define MPI_WIN_NULL_DELETE_FN ((MPI_Win_delete_attr_function*)0)
189#define MPI_WIN_DUP_FN ((MPI_Win_copy_attr_function*)0)
190#define MPI_TYPE_NULL_COPY_FN ((MPI_Type_copy_attr_function*)0)
191#define MPI_TYPE_NULL_DELETE_FN ((MPI_Type_delete_attr_function*)0)
192#define MPI_TYPE_DUP_FN ((MPI_Type_copy_attr_function*)0)
193
194#define MPI_WIN_NULL ((MPI_Win)0)
195/* In addition, there are 5 predefined window attributes that are
196 defined for every window */
197#define MPI_WIN_BASE 1
198#define MPI_WIN_SIZE 3
199#define MPI_WIN_DISP_UNIT 5
200#define MPIX_WIN_CREATE_FLAVOR 7
201#define MPIX_WIN_MODEL 9
202
203/* typeclasses */
204#define MPI_TYPECLASS_REAL 1
205#define MPI_TYPECLASS_INTEGER 2
206#define MPI_TYPECLASS_COMPLEX 3
207
208typedef struct MPI_Status{
209 int MPI_SOURCE;
210 int MPI_TAG;
211 int MPI_ERROR;
212 int size;
213} MPI_Status;
214
215// Implementation should define their own MPI_COMM_NULL:
216#define MPI_COMM_NULL NULL
217#ifndef MPI_IN_PLACE
218extern const int MPI_IN_PLACE_SPOT ;
219/* MPI_IN_PLACE was defined as (void *)-1 in MPICH but that can be
220 wrong. Let it refer to a fixed constant in the library probably is
221 a better idea.*/
222#define MPI_IN_PLACE ((void *) &MPI_IN_PLACE_SPOT)
223#endif
224
225#define MPI_ANY_SOURCE (-1)
226#define MPI_ANY_TAG (-2)
227#define MPI_PROC_NULL (-3)
228#define MPI_ROOT (-4)
229#define MPI_REQUEST_NULL NULL
230#define MPI_STATUS_IGNORE NULL
231#define MPI_STATUSES_IGNORE NULL
232#define MPI_LOCK_EXCLUSIVE 234
233#define MPI_LOCK_SHARED 235
234
235/* Typedefs for generalized requests */
236typedef int (MPI_Grequest_cancel_function)(void *, int);
237typedef int (MPI_Grequest_free_function)(void *);
238typedef int (MPI_Grequest_query_function)(void *, MPI_Status *);
239
240/**************************** Communicators ************************************/
241#ifdef _CIVLMPI_
242CIVL_MPI_Comm CIVL_MPI_COMM_WORLD;
243MPI_Comm MPI_COMM_WORLD = &(CIVL_MPI_COMM_WORLD);
244#else
245MPI_Comm MPI_COMM_WORLD;
246#endif
247
248extern MPI_Comm MPI_COMM_SELF;
249extern MPI_Comm MPI_COMM_PARENT;
250extern MPI_Comm MPI_COMM_TYPE_SHARED;
251
252/* We require that the C compiler support prototypes */
253/* Begin Prototypes */
254int MPI_Send(const void*, int, MPI_Datatype, int, int, MPI_Comm);
255int MPI_Recv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
256int MPI_Get_count( MPI_Status *, MPI_Datatype, int *);
257int MPI_Bsend(void*, int, MPI_Datatype, int, int, MPI_Comm);
258int MPI_Ssend(void*, int, MPI_Datatype, int, int, MPI_Comm);
259int MPI_Rsend(void*, int, MPI_Datatype, int, int, MPI_Comm);
260int MPI_Buffer_attach( void*, int);
261int MPI_Buffer_detach( void*, int *);
262int MPI_Isend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
263int MPI_Ibsend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
264int MPI_Issend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
265int MPI_Irsend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
266int MPI_Irecv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
267int MPI_Wait(MPI_Request *, MPI_Status *);
268int MPI_Test(MPI_Request *, int *, MPI_Status *);
269int MPI_Request_free(MPI_Request *);
270int MPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
271int MPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
272int MPI_Waitall(int, MPI_Request *, MPI_Status *);
273int MPI_Testall(int, MPI_Request *, int *, MPI_Status *);
274int MPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
275int MPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
276int MPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
277int MPI_Probe(int, int, MPI_Comm, MPI_Status *);
278int MPI_Cancel(MPI_Request *);
279int MPI_Test_cancelled(MPI_Status *, int *);
280int MPI_Send_init(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
281int MPI_Bsend_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
282int MPI_Ssend_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
283int MPI_Rsend_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
284int MPI_Recv_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
285int MPI_Start(MPI_Request *);
286int MPI_Startall(int, MPI_Request *);
287int MPI_Sendrecv(void *, int, MPI_Datatype,int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
288int MPI_Sendrecv_replace(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
289int MPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
290int MPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
291int MPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
292int MPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
293int MPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
294int MPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
295int MPI_Address(void*, MPI_Aint *);
296int MPI_Type_extent(MPI_Datatype, MPI_Aint *);
297int MPI_Type_size(MPI_Datatype, int *);
298int MPI_Type_lb(MPI_Datatype, MPI_Aint *);
299int MPI_Type_ub(MPI_Datatype, MPI_Aint *);
300int MPI_Type_commit(MPI_Datatype *);
301int MPI_Type_free(MPI_Datatype *);
302int MPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
303int MPI_Pack(void*, int, MPI_Datatype, void *, int, int *, MPI_Comm);
304int MPI_Unpack(void*, int, int *, void *, int, MPI_Datatype, MPI_Comm);
305int MPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
306int MPI_Barrier(MPI_Comm );
307int MPI_Bcast(void*, int, MPI_Datatype, int, MPI_Comm);
308int MPI_Gather(const void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
309int MPI_Gatherv(const void* , int, MPI_Datatype, void*, const int *,
310 const int *, MPI_Datatype, int, MPI_Comm);
311int MPI_Scatter(const void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
312int MPI_Scatterv(const void* , const int *, const int *, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
313int MPI_Allgather(const void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
314int MPI_Allgatherv(void* , int, MPI_Datatype, void*, int *,
315 int *, MPI_Datatype, MPI_Comm);
316int MPI_Alltoall(const void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
317int MPI_Alltoallv(const void* ,const int *, const int *, MPI_Datatype,
318 void*, const int *, const int *, MPI_Datatype, MPI_Comm);
319int MPI_Reduce(const void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
320int MPI_Op_create(MPI_User_function *, int, MPI_Op *);
321int MPI_Op_free( MPI_Op *);
322int MPI_Allreduce(const void*, void*, int, MPI_Datatype, MPI_Op, MPI_Comm);
323int MPI_Reduce_scatter(const void* , void*, const int *, MPI_Datatype, MPI_Op, MPI_Comm);
324int MPI_Scan(const void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm);
325int MPI_Group_size(MPI_Group, int *);
326int MPI_Group_rank(MPI_Group, int *);
327int MPI_Group_translate_ranks (MPI_Group, int, int *, MPI_Group, int *);
328int MPI_Group_compare(MPI_Group, MPI_Group, int *);
329int MPI_Comm_group(MPI_Comm, MPI_Group *);
330int MPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
331int MPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
332int MPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
333int MPI_Group_incl(MPI_Group, int, int *, MPI_Group *);
334int MPI_Group_excl(MPI_Group, int, int *, MPI_Group *);
335int MPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
336int MPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
337int MPI_Group_free(MPI_Group *);
338int MPI_Comm_size(MPI_Comm, int *);
339int MPI_Comm_rank(MPI_Comm, int *);
340int MPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
341int MPI_Comm_dup(MPI_Comm, MPI_Comm *);
342int MPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
343int MPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
344int MPI_Comm_free(MPI_Comm *);
345int MPI_Comm_test_inter(MPI_Comm, int *);
346int MPI_Comm_remote_size(MPI_Comm, int *);
347int MPI_Comm_remote_group(MPI_Comm, MPI_Group *);
348int MPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm * );
349int MPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
350int MPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void*);
351int MPI_Keyval_free(int *);
352int MPI_Attr_put(MPI_Comm, int, void*);
353int MPI_Attr_get(MPI_Comm, int, void *, int *);
354int MPI_Attr_delete(MPI_Comm, int);
355int MPI_Topo_test(MPI_Comm, int *);
356int MPI_Cart_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
357int MPI_Dims_create(int, int, int *);
358int MPI_Graph_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
359int MPI_Graphdims_get(MPI_Comm, int *, int *);
360int MPI_Graph_get(MPI_Comm, int, int, int *, int *);
361int MPI_Cartdim_get(MPI_Comm, int *);
362int MPI_Cart_get(MPI_Comm, int, int *, int *, int *);
363int MPI_Cart_rank(MPI_Comm, int *, int *);
364int MPI_Cart_coords(MPI_Comm, int, int, int *);
365int MPI_Graph_neighbors_count(MPI_Comm, int, int *);
366int MPI_Graph_neighbors(MPI_Comm, int, int, int *);
367int MPI_Cart_shift(MPI_Comm, int, int, int *, int *);
368int MPI_Cart_sub(MPI_Comm, int *, MPI_Comm *);
369int MPI_Cart_map(MPI_Comm, int, int *, int *, int *);
370int MPI_Graph_map(MPI_Comm, int, int *, int *, int *);
371int MPI_Get_processor_name(char *, int *);
372int MPI_Get_version(int *, int *);
373int MPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
374int MPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
375int MPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
376int MPI_Errhandler_free(MPI_Errhandler *);
377int MPI_Error_string(int, char *, int *);
378int MPI_Error_class(int, int *);
379double MPI_Wtime(void);
380double MPI_Wtick(void);
381int MPI_Init(int *, char ***);
382int MPI_Finalize(void);
383int MPI_Initialized(int *);
384$system int MPI_Abort(MPI_Comm, int);
385
386
387/* Note that we may need to define a @PCONTROL_LIST@ depending on whether
388 stdargs are supported */
389int MPI_Pcontrol(const int, ...);
390
391int MPI_DUP_FN ( MPI_Comm, int, void *, void *, void *, int * );
392
393
394/* MPI-2 functions */
395
396/* Process Creation and Management */
397int MPI_Close_port( char *);
398int MPI_Comm_accept( char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
399int MPI_Comm_connect( char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
400int MPI_Comm_disconnect(MPI_Comm *);
401int MPI_Comm_get_parent(MPI_Comm *);
402int MPI_Comm_join(int, MPI_Comm *);
403int MPI_Comm_spawn( char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *,
404 int []);
405int MPI_Comm_spawn_multiple(int, char *[], char **[], int [], MPI_Info [], int,
406 MPI_Comm, MPI_Comm *, int []);
407int MPI_Lookup_name( char *, MPI_Info, char *);
408int MPI_Open_port(MPI_Info, char *);
409int MPI_Publish_name( char *, MPI_Info, char *);
410int MPI_Unpublish_name( char *, MPI_Info, char *);
411
412/* One-Sided Communications */
413int MPI_Accumulate( void *, int, MPI_Datatype, int, MPI_Aint, int,
414 MPI_Datatype, MPI_Op, MPI_Win) ;
415int MPI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
416 MPI_Win) ;
417int MPI_Put( void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
418 MPI_Win) ;
419int MPI_Win_complete(MPI_Win);
420int MPI_Win_create(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
421int MPI_Win_fence(int, MPI_Win);
422int MPI_Win_free(MPI_Win *);
423int MPI_Win_get_group(MPI_Win, MPI_Group *);
424int MPI_Win_lock(int, int, int, MPI_Win);
425int MPI_Win_post(MPI_Group, int, MPI_Win);
426int MPI_Win_start(MPI_Group, int, MPI_Win);
427int MPI_Win_test(MPI_Win, int *);
428int MPI_Win_unlock(int, MPI_Win);
429int MPI_Win_wait(MPI_Win);
430
431/* Extended Collective Operations */
432int MPI_Alltoallw(const void *, const int [], const int [],
433 const MPI_Datatype [], void *, const int [],
434 const int [], const MPI_Datatype [], MPI_Comm);
435int MPI_Exscan(const void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
436
437/* External Interfaces */
438int MPI_Add_error_class(int *);
439int MPI_Add_error_code(int, int *);
440int MPI_Add_error_string(int, char *);
441int MPI_Comm_call_errhandler(MPI_Comm, int);
442int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *,
443 MPI_Comm_delete_attr_function *, int *, void *);
444int MPI_Comm_delete_attr(MPI_Comm, int);
445int MPI_Comm_free_keyval(int *);
446int MPI_Comm_get_attr(MPI_Comm, int, void *, int *);
447int MPI_Comm_get_name(MPI_Comm, char *, int *);
448int MPI_Comm_set_attr(MPI_Comm, int, void *);
449int MPI_Comm_set_name(MPI_Comm, char *);
450int MPI_File_call_errhandler(MPI_File, int);
451int MPI_Grequest_complete(MPI_Request);
452int MPI_Grequest_start(MPI_Grequest_query_function *,
453 MPI_Grequest_free_function *,
454 MPI_Grequest_cancel_function *, void *, MPI_Request *);
455int MPI_Init_thread(int *, char ***, int, int *);
456int MPI_Is_thread_main(int *);
457int MPI_Query_thread(int *);
458int MPI_Status_set_cancelled(MPI_Status *, int);
459int MPI_Status_set_elements(MPI_Status *, MPI_Datatype, int);
460int MPI_Type_create_keyval(MPI_Type_copy_attr_function *,
461 MPI_Type_delete_attr_function *, int *, void *);
462int MPI_Type_delete_attr(MPI_Datatype, int);
463int MPI_Type_dup(MPI_Datatype, MPI_Datatype *);
464int MPI_Type_free_keyval(int *);
465int MPI_Type_get_attr(MPI_Datatype, int, void *, int *);
466int MPI_Type_get_contents(MPI_Datatype, int, int, int, int [], MPI_Aint [],
467 MPI_Datatype []);
468int MPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
469int MPI_Type_get_name(MPI_Datatype, char *, int *);
470int MPI_Type_set_attr(MPI_Datatype, int, void *);
471int MPI_Type_set_name(MPI_Datatype, char *);
472int MPI_Type_match_size( int, int, MPI_Datatype *);
473int MPI_Win_call_errhandler(MPI_Win, int);
474int MPI_Win_create_keyval(MPI_Win_copy_attr_function *,
475 MPI_Win_delete_attr_function *, int *, void *);
476int MPI_Win_delete_attr(MPI_Win, int);
477int MPI_Win_free_keyval(int *);
478int MPI_Win_get_attr(MPI_Win, int, void *, int *);
479int MPI_Win_get_name(MPI_Win, char *, int *);
480int MPI_Win_set_attr(MPI_Win, int, void *);
481int MPI_Win_set_name(MPI_Win, char *);
482
483/* Miscellany */
484MPI_Comm MPI_Comm_f2c(MPI_Fint);
485MPI_Datatype MPI_Type_f2c(MPI_Fint);
486MPI_File MPI_File_f2c(MPI_Fint);
487MPI_Fint MPI_Comm_c2f(MPI_Comm);
488MPI_Fint MPI_File_c2f(MPI_File);
489MPI_Fint MPI_Group_c2f(MPI_Group);
490MPI_Fint MPI_Info_c2f(MPI_Info);
491MPI_Fint MPI_Op_c2f(MPI_Op);
492MPI_Fint MPI_Request_c2f(MPI_Request);
493MPI_Fint MPI_Type_c2f(MPI_Datatype);
494MPI_Fint MPI_Win_c2f(MPI_Win);
495MPI_Group MPI_Group_f2c(MPI_Fint);
496MPI_Info MPI_Info_f2c(MPI_Fint);
497MPI_Op MPI_Op_f2c(MPI_Fint);
498MPI_Request MPI_Request_f2c(MPI_Fint);
499MPI_Win MPI_Win_f2c(MPI_Fint);
500
501int MPI_Alloc_mem(MPI_Aint, MPI_Info info, void *baseptr);
502int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *, MPI_Errhandler *);
503int MPI_Comm_get_errhandler(MPI_Comm, MPI_Errhandler *);
504int MPI_Comm_set_errhandler(MPI_Comm, MPI_Errhandler);
505int MPI_File_create_errhandler(MPI_File_errhandler_function *, MPI_Errhandler *);
506int MPI_File_get_errhandler(MPI_File, MPI_Errhandler *);
507int MPI_File_set_errhandler(MPI_File, MPI_Errhandler);
508int MPI_Finalized(int *);
509int MPI_Free_mem(void *);
510int MPI_Get_address( void *, MPI_Aint *);
511int MPI_Info_create(MPI_Info *);
512int MPI_Info_delete(MPI_Info, char *);
513int MPI_Info_dup(MPI_Info, MPI_Info *);
514int MPI_Info_free(MPI_Info *info);
515int MPI_Info_get(MPI_Info, char *, int, char *, int *);
516int MPI_Info_get_nkeys(MPI_Info, int *);
517int MPI_Info_get_nthkey(MPI_Info, int, char *);
518int MPI_Info_get_valuelen(MPI_Info, char *, int *, int *);
519int MPI_Info_set(MPI_Info, char *, char *);
520int MPI_Pack_external( char *, void *, int, MPI_Datatype, void *,
521 MPI_Aint, MPI_Aint *);
522int MPI_Pack_external_size( char *, int, MPI_Datatype, MPI_Aint *);
523int MPI_Request_get_status(MPI_Request, int *, MPI_Status *);
524int MPI_Status_c2f( MPI_Status *, MPI_Fint *);
525int MPI_Status_f2c( MPI_Fint *, MPI_Status *);
526int MPI_Type_create_darray(int, int, int, int [], int [],
527 int [], int [], int,
528 MPI_Datatype, MPI_Datatype *);
529int MPI_Type_create_hindexed(int, int [], MPI_Aint [], MPI_Datatype,
530 MPI_Datatype *);
531int MPI_Type_create_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
532int MPI_Type_create_indexed_block(int, int, int [], MPI_Datatype,
533 MPI_Datatype *);
534int MPIX_Type_create_hindexed_block(int, int, const MPI_Aint [], MPI_Datatype, MPI_Datatype *);
535int MPI_Type_create_resized(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *);
536int MPI_Type_create_struct(int, int [], MPI_Aint [],
537 MPI_Datatype [], MPI_Datatype *);
538int MPI_Type_create_subarray(int, int [], int [], int [],
539 int, MPI_Datatype, MPI_Datatype *);
540int MPI_Type_get_extent(MPI_Datatype, MPI_Aint *, MPI_Aint *);
541int MPI_Type_get_true_extent(MPI_Datatype, MPI_Aint *, MPI_Aint *);
542int MPI_Unpack_external( char *, void *, MPI_Aint, MPI_Aint *, void *,
543 int, MPI_Datatype);
544int MPI_Win_create_errhandler(MPI_Win_errhandler_function *, MPI_Errhandler *);
545int MPI_Win_get_errhandler(MPI_Win, MPI_Errhandler *);
546int MPI_Win_set_errhandler(MPI_Win, MPI_Errhandler);
547
548/* Fortran 90-related functions. These routines are available only if
549 Fortran 90 support is enabled
550*/
551int MPI_Type_create_f90_integer( int, MPI_Datatype * );
552int MPI_Type_create_f90_real( int, int, MPI_Datatype * );
553int MPI_Type_create_f90_complex( int, int, MPI_Datatype * );
554
555/* MPI-2.2 functions */
556int MPI_Reduce_local( void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op);
557int MPI_Op_commutative(MPI_Op op, int *commute);
558int MPI_Reduce_scatter_block( void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm);
559int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, int [], int [], int outdegree, int [], int [], MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
560int MPI_Dist_graph_create(MPI_Comm comm_old, int n, int [], int [], int [], int [], MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
561int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted);
562int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int [], int [], int maxoutdegree, int [], int []);
563
564
565/* Permanent key values */
566/* C Versions (return pointer to value),
567 Fortran Versions (return integer value).
568 Handled directly by the attribute value routine
569
570 DO NOT CHANGE THESE. The values encode:
571 builtin kind (0x1 in bit 30-31)
572 Keyval object (0x9 in bits 26-29)
573 for communicator (0x1 in bits 22-25)
574
575 Fortran versions of the attributes are formed by adding one to
576 the C version.
577 */
578#define MPI_TAG_UB 0x64400001
579#define MPI_HOST 0x64400003
580#define MPI_IO 0x64400005
581#define MPI_WTIME_IS_GLOBAL 0x64400007
582#define MPI_UNIVERSE_SIZE 0x64400009
583#define MPI_LASTUSEDCODE 0x6440000b
584#define MPI_APPNUM 0x6440000d
585
586/* for info */
587#define MPI_INFO_NULL ((MPI_Info)-1)
588#define MPI_MAX_INFO_KEY 255
589#define MPI_MAX_INFO_VAL 1024
590
591/* MPI Handles and Constants */
592#define MPI_ARGV_NULL 0
593#define MPI_ARGVS_NULL 0
594#define MPI_BOTTOM (void *)0
595extern int * const MPI_UNWEIGHTED;
596#define MPI_BSEND_OVERHEAD 88
597#define MPI_FILE_NULL (MPI_File *)0
598#define MPI_GROUP_EMPTY (MPI_Group *)0
599#define MPI_GROUP_NULL (MPI_Group *)0
600
601/* Pre-defined constants */
602#define MPI_UNDEFINED (-32766)
603#define MPI_KEYVAL_INVALID 0
604
605/* MPI's error classes */
606#define MPI_SUCCESS 0 /* Successful return code */
607/* Communication argument parameters */
608#define MPI_ERR_BUFFER 1 /* Invalid buffer pointer */
609#define MPI_ERR_COUNT 2 /* Invalid count argument */
610#define MPI_ERR_TYPE 3 /* Invalid datatype argument */
611#define MPI_ERR_TAG 4 /* Invalid tag argument */
612#define MPI_ERR_COMM 5 /* Invalid communicator */
613#define MPI_ERR_RANK 6 /* Invalid rank */
614#define MPI_ERR_ROOT 7 /* Invalid root */
615#define MPI_ERR_TRUNCATE 14 /* Message truncated on receive */
616
617/* MPI Objects (other than COMM) */
618#define MPI_ERR_GROUP 8 /* Invalid group */
619#define MPI_ERR_OP 9 /* Invalid operation */
620#define MPI_ERR_REQUEST 19 /* Invalid mpi_request handle */
621
622/* Special topology argument parameters */
623#define MPI_ERR_TOPOLOGY 10 /* Invalid topology */
624#define MPI_ERR_DIMS 11 /* Invalid dimension argument */
625
626/* All other arguments. This is a class with many kinds */
627#define MPI_ERR_ARG 12 /* Invalid argument */
628
629/* Other errors that are not simply an invalid argument */
630#define MPI_ERR_OTHER 15 /* Other error; use Error_string */
631
632#define MPI_ERR_UNKNOWN 13 /* Unknown error */
633#define MPI_ERR_INTERN 16 /* Internal error code */
634
635/* Multiple completion has two special error classes */
636#define MPI_ERR_IN_STATUS 17 /* Look in status for error value */
637#define MPI_ERR_PENDING 18 /* Pending request */
638
639/* New MPI-2 Error classes */
640#define MPI_ERR_FILE 27 /* */
641#define MPI_ERR_ACCESS 20 /* */
642#define MPI_ERR_AMODE 21 /* */
643#define MPI_ERR_BAD_FILE 22 /* */
644#define MPI_ERR_FILE_EXISTS 25 /* */
645#define MPI_ERR_FILE_IN_USE 26 /* */
646#define MPI_ERR_NO_SPACE 36 /* */
647#define MPI_ERR_NO_SUCH_FILE 37 /* */
648#define MPI_ERR_IO 32 /* */
649#define MPI_ERR_READ_ONLY 40 /* */
650#define MPI_ERR_CONVERSION 23 /* */
651#define MPI_ERR_DUP_DATAREP 24 /* */
652#define MPI_ERR_UNSUPPORTED_DATAREP 43 /* */
653
654/* MPI_ERR_INFO is NOT defined in the MPI-2 standard. I believe that
655 this is an oversight */
656#define MPI_ERR_INFO 28 /* */
657#define MPI_ERR_INFO_KEY 29 /* */
658#define MPI_ERR_INFO_VALUE 30 /* */
659#define MPI_ERR_INFO_NOKEY 31 /* */
660
661#define MPI_ERR_NAME 33 /* */
662#define MPI_ERR_NO_MEM 34 /* Alloc_mem could not allocate memory */
663#define MPI_ERR_NOT_SAME 35 /* */
664#define MPI_ERR_PORT 38 /* */
665#define MPI_ERR_QUOTA 39 /* */
666#define MPI_ERR_SERVICE 41 /* */
667#define MPI_ERR_SPAWN 42 /* */
668#define MPI_ERR_UNSUPPORTED_OPERATION 44 /* */
669#define MPI_ERR_WIN 45 /* */
670
671#define MPI_ERR_BASE 46 /* */
672#define MPI_ERR_LOCKTYPE 47 /* */
673#define MPI_ERR_KEYVAL 48 /* Erroneous attribute key */
674#define MPI_ERR_RMA_CONFLICT 49 /* */
675#define MPI_ERR_RMA_SYNC 50 /* */
676#define MPI_ERR_SIZE 51 /* */
677#define MPI_ERR_DISP 52 /* */
678#define MPI_ERR_ASSERT 53 /* */
679
680#define MPIX_ERR_PROC_FAIL_STOP 54 /* Process failure */
681
682#define MPIX_ERR_RMA_RANGE 55 /* */
683#define MPIX_ERR_RMA_ATTACH 56 /* */
684#define MPIX_ERR_RMA_SHARED 57 /* */
685#define MPIX_ERR_RMA_WRONG_FLAVOR 58 /* */
686
687#define MPI_ERR_LASTCODE 0x3fffffff /* Last valid error code for a
688 predefined error class */
689/* WARNING: this is also defined in mpishared.h. Update both locations */
690#define MPICH_ERR_LAST_CLASS 58 /* It is also helpful to know the
691 last valid class */
692/* End of MPI's error classes */
693
694/* See 4.12.5 for MPI_F_STATUS(ES)_IGNORE */
695#define MPIU_DLL_SPEC
696extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUS_IGNORE;
697extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUSES_IGNORE;
698
699/* asserts for one-sided communication */
700#define MPI_MODE_NOCHECK 1024
701#define MPI_MODE_NOSTORE 2048
702#define MPI_MODE_NOPUT 4096
703#define MPI_MODE_NOPRECEDE 8192
704#define MPI_MODE_NOSUCCEED 16384
705
706/* predefined types for MPIX_Comm_split_type */
707#define MPIX_COMM_TYPE_SHARED 1
708
709/* extra const at front would be safer, but is incompatible with MPIX_T_ prototypes */
710extern struct MPIR_T_pvar_handle * const MPI_T_PVAR_ALL_HANDLES;
711
712#define MPI_T_ENUM_NULL ((MPI_T_enum)NULL)
713#define MPI_T_CVAR_HANDLE_NULL ((MPI_T_cvar_handle)NULL)
714#define MPI_T_PVAR_HANDLE_NULL ((MPI_T_pvar_handle)NULL)
715#define MPI_T_PVAR_SESSION_NULL ((MPI_T_pvar_session)NULL)
716
717/* the MPI_T_ interface requires that these VERBOSITY constants occur in this
718 * relative order with increasing values */
719typedef enum MPIR_T_verbosity_t {
720 /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
721 * extension */
722 MPI_T_VERBOSITY_INVALID = 0,
723
724 /* arbitrarily shift values to aid debugging and reduce accidental errors */
725 MPI_T_VERBOSITY_USER_BASIC = 221,
726 MPI_T_VERBOSITY_USER_DETAIL,
727 MPI_T_VERBOSITY_USER_ALL,
728
729 MPI_T_VERBOSITY_TUNER_BASIC,
730 MPI_T_VERBOSITY_TUNER_DETAIL,
731 MPI_T_VERBOSITY_TUNER_ALL,
732
733 MPI_T_VERBOSITY_MPIDEV_BASIC,
734 MPI_T_VERBOSITY_MPIDEV_DETAIL,
735 MPI_T_VERBOSITY_MPIDEV_ALL
736}MPIR_T_verbosity_t;
737
738typedef enum MPIR_T_bind_t {
739 /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
740 * extension */
741 MPI_T_BIND_INVALID = 0,
742
743 /* arbitrarily shift values to aid debugging and reduce accidental errors */
744 MPI_T_BIND_NO_OBJECT = 9700,
745 MPI_T_BIND_MPI_COMM,
746 MPI_T_BIND_MPI_DATATYPE,
747 MPI_T_BIND_MPI_ERRHANDLER,
748 MPI_T_BIND_MPI_FILE,
749 MPI_T_BIND_MPI_GROUP,
750 MPI_T_BIND_MPI_OP,
751 MPI_T_BIND_MPI_REQUEST,
752 MPI_T_BIND_MPI_WIN,
753 MPI_T_BIND_MPI_MESSAGE,
754 MPI_T_BIND_MPI_INFO
755}MPIR_T_bind_t;
756
757typedef enum MPIR_T_scope_t {
758 /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
759 * extension */
760 MPI_T_SCOPE_INVALID = 0,
761
762 /* arbitrarily shift values to aid debugging and reduce accidental errors */
763 MPI_T_SCOPE_READONLY = 60439,
764 MPI_T_SCOPE_LOCAL,
765 MPI_T_SCOPE_GROUP,
766 MPI_T_SCOPE_GROUP_EQ,
767 MPI_T_SCOPE_ALL,
768 MPI_T_SCOPE_ALL_EQ
769}MPIR_T_scope_t;
770
771typedef enum MPIR_T_pvar_class_t {
772 /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
773 * extension */
774 MPI_T_PVAR_CLASS_INVALID = 0,
775
776 /* arbitrarily shift values to aid debugging and reduce accidental errors */
777 MPI_T_PVAR_CLASS_STATE = 240,
778 MPI_T_PVAR_CLASS_LEVEL,
779 MPI_T_PVAR_CLASS_SIZE,
780 MPI_T_PVAR_CLASS_PERCENTAGE,
781 MPI_T_PVAR_CLASS_HIGHWATERMARK,
782 MPI_T_PVAR_CLASS_LOWWATERMARK,
783 MPI_T_PVAR_CLASS_COUNTER,
784 MPI_T_PVAR_CLASS_AGGREGATE,
785 MPI_T_PVAR_CLASS_TIMER,
786 MPI_T_PVAR_CLASS_GENERIC
787}MPIR_T_pvar_class_t;
788
789/* For supported thread levels */
790#define MPI_THREAD_SINGLE 0
791#define MPI_THREAD_FUNNELED 1
792#define MPI_THREAD_SERIALIZED 2
793#define MPI_THREAD_MULTIPLE 3
794
795#define MPI_VERSION "CIVL_MPI"
796
797#endif
Note: See TracBrowser for help on using the repository browser.