1/* -*- Mode: C; c-basic-offset:4 ; -*- */
2/*
3 *  (C) 2001 by Argonne National Laboratory.
4 *      See COPYRIGHT in top-level directory.
5 */
6/* @configure_input@ */
7#ifndef MPI_INCLUDED
8#define MPI_INCLUDED
9
10/* user include file for MPI programs */
11
12/* Keep C++ compilers from getting confused */
13#if defined(__cplusplus)
14extern "C" {
15#endif
16
17#if defined(__has_attribute)
18#  if __has_attribute(pointer_with_type_tag) && \
19      __has_attribute(type_tag_for_datatype) && \
20      !defined(MPICH_NO_ATTR_TYPE_TAGS)
21#    define MPICH_ATTR_POINTER_WITH_TYPE_TAG(buffer_idx, type_idx)  __attribute__((pointer_with_type_tag(MPI,buffer_idx,type_idx)))
22#    define MPICH_ATTR_TYPE_TAG(type)                               __attribute__((type_tag_for_datatype(MPI,type)))
23#    define MPICH_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(type)             __attribute__((type_tag_for_datatype(MPI,type,layout_compatible)))
24#    define MPICH_ATTR_TYPE_TAG_MUST_BE_NULL()                      __attribute__((type_tag_for_datatype(MPI,void,must_be_null)))
25#    include <stddef.h>
26#  endif
27#endif
28
29#if !defined(MPICH_ATTR_POINTER_WITH_TYPE_TAG)
30#  define MPICH_ATTR_POINTER_WITH_TYPE_TAG(buffer_idx, type_idx)
31#  define MPICH_ATTR_TYPE_TAG(type)
32#  define MPICH_ATTR_TYPE_TAG_LAYOUT_COMPATIBLE(type)
33#  define MPICH_ATTR_TYPE_TAG_MUST_BE_NULL()
34#endif
35
36#if !defined(INT8_C)
37/* stdint.h was not included, see if we can get it */
38#  if defined(__cplusplus)
39#    if __cplusplus >= 201103
40#      include <cstdint>
41#    endif
42#  endif
43#endif
44
45#if !defined(INT8_C)
46/* stdint.h was not included, see if we can get it */
47#  if defined(__STDC_VERSION__)
48#    if __STDC_VERSION__ >= 199901
49#      include <stdint.h>
50#    endif
51#  endif
52#endif
53
54#if defined(INT8_C)
55/* stdint.h was included, so we can annotate these types */
56#  define MPICH_ATTR_TYPE_TAG_STDINT(type) MPICH_ATTR_TYPE_TAG(type)
57#else
58#  define MPICH_ATTR_TYPE_TAG_STDINT(type)
59#endif
60
61#ifdef __STDC_VERSION__
62#if __STDC_VERSION__ >= 199901
63#  define MPICH_ATTR_TYPE_TAG_C99(type) MPICH_ATTR_TYPE_TAG(type)
64#else
65#  define MPICH_ATTR_TYPE_TAG_C99(type)
66#endif
67#else
68#  define MPICH_ATTR_TYPE_TAG_C99(type)
69#endif
70
71#if defined(__cplusplus)
72#  define MPICH_ATTR_TYPE_TAG_CXX(type) MPICH_ATTR_TYPE_TAG(type)
73#else
74#  define MPICH_ATTR_TYPE_TAG_CXX(type)
75#endif
76
77/* Results of the compare operations. */
78#define MPI_IDENT     0
79#define MPI_CONGRUENT 1
80#define MPI_SIMILAR   2
81#define MPI_UNEQUAL   3
82
83typedef int MPI_Datatype;
84#define MPI_CHAR           ((MPI_Datatype)@MPI_CHAR@)
85#define MPI_SIGNED_CHAR    ((MPI_Datatype)@MPI_SIGNED_CHAR@)
86#define MPI_UNSIGNED_CHAR  ((MPI_Datatype)@MPI_UNSIGNED_CHAR@)
87#define MPI_BYTE           ((MPI_Datatype)@MPI_BYTE@)
88#define MPI_WCHAR          ((MPI_Datatype)@MPI_WCHAR@)
89#define MPI_SHORT          ((MPI_Datatype)@MPI_SHORT@)
90#define MPI_UNSIGNED_SHORT ((MPI_Datatype)@MPI_UNSIGNED_SHORT@)
91#define MPI_INT            ((MPI_Datatype)@MPI_INT@)
92#define MPI_UNSIGNED       ((MPI_Datatype)@MPI_UNSIGNED_INT@)
93#define MPI_LONG           ((MPI_Datatype)@MPI_LONG@)
94#define MPI_UNSIGNED_LONG  ((MPI_Datatype)@MPI_UNSIGNED_LONG@)
95#define MPI_FLOAT          ((MPI_Datatype)@MPI_FLOAT@)
96#define MPI_DOUBLE         ((MPI_Datatype)@MPI_DOUBLE@)
97#define MPI_LONG_DOUBLE    ((MPI_Datatype)@MPI_LONG_DOUBLE@)
98#define MPI_LONG_LONG_INT  ((MPI_Datatype)@MPI_LONG_LONG@)
99#define MPI_UNSIGNED_LONG_LONG ((MPI_Datatype)@MPI_UNSIGNED_LONG_LONG@)
100#define MPI_LONG_LONG      MPI_LONG_LONG_INT
101
102static const MPI_Datatype mpich_mpi_char               MPICH_ATTR_TYPE_TAG(char)               = MPI_CHAR;
103static const MPI_Datatype mpich_mpi_signed_char        MPICH_ATTR_TYPE_TAG(signed char)        = MPI_SIGNED_CHAR;
104static const MPI_Datatype mpich_mpi_unsigned_char      MPICH_ATTR_TYPE_TAG(unsigned char)      = MPI_UNSIGNED_CHAR;
105/*static const MPI_Datatype mpich_mpi_byte               MPICH_ATTR_TYPE_TAG(char)               = MPI_BYTE;*/
106static const MPI_Datatype mpich_mpi_wchar              MPICH_ATTR_TYPE_TAG(wchar_t)            = MPI_WCHAR;
107static const MPI_Datatype mpich_mpi_short              MPICH_ATTR_TYPE_TAG(short)              = MPI_SHORT;
108static const MPI_Datatype mpich_mpi_unsigned_short     MPICH_ATTR_TYPE_TAG(unsigned short)     = MPI_UNSIGNED_SHORT;
109static const MPI_Datatype mpich_mpi_int                MPICH_ATTR_TYPE_TAG(int)                = MPI_INT;
110static const MPI_Datatype mpich_mpi_unsigned           MPICH_ATTR_TYPE_TAG(unsigned)           = MPI_UNSIGNED;
111static const MPI_Datatype mpich_mpi_long               MPICH_ATTR_TYPE_TAG(long)               = MPI_LONG;
112static const MPI_Datatype mpich_mpi_unsigned_long      MPICH_ATTR_TYPE_TAG(unsigned long)      = MPI_UNSIGNED_LONG;
113static const MPI_Datatype mpich_mpi_float              MPICH_ATTR_TYPE_TAG(float)              = MPI_FLOAT;
114static const MPI_Datatype mpich_mpi_double             MPICH_ATTR_TYPE_TAG(double)             = MPI_DOUBLE;
115static const MPI_Datatype mpich_mpi_long_double        MPICH_ATTR_TYPE_TAG(long double)        = MPI_LONG_DOUBLE;
116static const MPI_Datatype mpich_mpi_long_long_int      MPICH_ATTR_TYPE_TAG(long long int)      = MPI_LONG_LONG_INT;
117static const MPI_Datatype mpich_mpi_unsigned_long_long MPICH_ATTR_TYPE_TAG(unsigned long long) = MPI_UNSIGNED_LONG_LONG;
118
119#define MPI_PACKED         ((MPI_Datatype)@MPI_PACKED@)
120#define MPI_LB             ((MPI_Datatype)@MPI_LB@)
121#define MPI_UB             ((MPI_Datatype)@MPI_UB@)
122
123/*
124   The layouts for the types MPI_DOUBLE_INT etc are simply
125   struct {
126       double var;
127       int    loc;
128   }
129   This is documented in the man pages on the various datatypes.
130 */
131#define MPI_FLOAT_INT         ((MPI_Datatype)@MPI_FLOAT_INT@)
132#define MPI_DOUBLE_INT        ((MPI_Datatype)@MPI_DOUBLE_INT@)
133#define MPI_LONG_INT          ((MPI_Datatype)@MPI_LONG_INT@)
134#define MPI_SHORT_INT         ((MPI_Datatype)@MPI_SHORT_INT@)
135#define MPI_2INT              ((MPI_Datatype)@MPI_2INT@)
136#define MPI_LONG_DOUBLE_INT   ((MPI_Datatype)@MPI_LONG_DOUBLE_INT@)
137
138struct mpich_struct_mpi_float_int       { float f; int i; };
139struct mpich_struct_mpi_double_int      { double d; int i; };
140struct mpich_struct_mpi_long_int        { long l; int i; };
141struct mpich_struct_mpi_short_int       { short s; int i; };
142struct mpich_struct_mpi_2int            { int i1; int i2; };
143struct mpich_struct_mpi_long_double_int { long double ld; int i; };
144
145static const MPI_Datatype mpich_mpi_float_int       MPICH_ATTR_TYPE_TAG(struct mpich_struct_mpi_float_int)       = MPI_FLOAT_INT;
146static const MPI_Datatype mpich_mpi_double_int      MPICH_ATTR_TYPE_TAG(struct mpich_struct_mpi_double_int)      = MPI_DOUBLE_INT;
147static const MPI_Datatype mpich_mpi_long_int        MPICH_ATTR_TYPE_TAG(struct mpich_struct_mpi_long_int)        = MPI_LONG_INT;
148static const MPI_Datatype mpich_mpi_short_int       MPICH_ATTR_TYPE_TAG(struct mpich_struct_mpi_short_int)       = MPI_SHORT_INT;
149static const MPI_Datatype mpich_mpi_2int            MPICH_ATTR_TYPE_TAG(struct mpich_struct_mpi_2int)            = MPI_2INT;
150static const MPI_Datatype mpich_mpi_long_double_int MPICH_ATTR_TYPE_TAG(struct mpich_struct_mpi_long_double_int) = MPI_LONG_DOUBLE_INT;
151
152/* Fortran types */
153#define MPI_COMPLEX           ((MPI_Datatype)@MPI_COMPLEX@)
154#define MPI_DOUBLE_COMPLEX    ((MPI_Datatype)@MPI_DOUBLE_COMPLEX@)
155#define MPI_LOGICAL           ((MPI_Datatype)@MPI_LOGICAL@)
156#define MPI_REAL              ((MPI_Datatype)@MPI_REAL@)
157#define MPI_DOUBLE_PRECISION  ((MPI_Datatype)@MPI_DOUBLE_PRECISION@)
158#define MPI_INTEGER           ((MPI_Datatype)@MPI_INTEGER@)
159#define MPI_2INTEGER          ((MPI_Datatype)@MPI_2INTEGER@)
160/*
161 * MPI_2COMPLEX and MPI_2DOUBLE_COMPLEX were defined by accident in
162 * MPI 1.0 and removed in MPI 1.1.
163 *
164 * This definition provides backward compatibility.  These definitions
165 * will be removed in a subsequent MPICH release
166 */
167#ifdef MPICH_DEFINE_2COMPLEX
168#define MPI_2COMPLEX          ((MPI_Datatype)@MPI_2COMPLEX@)
169#define MPI_2DOUBLE_COMPLEX   ((MPI_Datatype)@MPI_2DOUBLE_COMPLEX@)
170#endif
171#define MPI_2REAL             ((MPI_Datatype)@MPI_2REAL@)
172#define MPI_2DOUBLE_PRECISION ((MPI_Datatype)@MPI_2DOUBLE_PRECISION@)
173#define MPI_CHARACTER         ((MPI_Datatype)@MPI_CHARACTER@)
174
175/* Size-specific types (see MPI-2, 10.2.5) */
176#define MPI_REAL4             ((MPI_Datatype)@MPI_REAL4@)
177#define MPI_REAL8             ((MPI_Datatype)@MPI_REAL8@)
178#define MPI_REAL16            ((MPI_Datatype)@MPI_REAL16@)
179#define MPI_COMPLEX8          ((MPI_Datatype)@MPI_COMPLEX8@)
180#define MPI_COMPLEX16         ((MPI_Datatype)@MPI_COMPLEX16@)
181#define MPI_COMPLEX32         ((MPI_Datatype)@MPI_COMPLEX32@)
182#define MPI_INTEGER1          ((MPI_Datatype)@MPI_INTEGER1@)
183#define MPI_INTEGER2          ((MPI_Datatype)@MPI_INTEGER2@)
184#define MPI_INTEGER4          ((MPI_Datatype)@MPI_INTEGER4@)
185#define MPI_INTEGER8          ((MPI_Datatype)@MPI_INTEGER8@)
186#define MPI_INTEGER16         ((MPI_Datatype)@MPI_INTEGER16@)
187
188/* C99 fixed-width datatypes */
189#define MPI_INT8_T            ((MPI_Datatype)@MPI_INT8_T@)
190#define MPI_INT16_T           ((MPI_Datatype)@MPI_INT16_T@)
191#define MPI_INT32_T           ((MPI_Datatype)@MPI_INT32_T@)
192#define MPI_INT64_T           ((MPI_Datatype)@MPI_INT64_T@)
193#define MPI_UINT8_T           ((MPI_Datatype)@MPI_UINT8_T@)
194#define MPI_UINT16_T          ((MPI_Datatype)@MPI_UINT16_T@)
195#define MPI_UINT32_T          ((MPI_Datatype)@MPI_UINT32_T@)
196#define MPI_UINT64_T          ((MPI_Datatype)@MPI_UINT64_T@)
197
198static const MPI_Datatype mpich_mpi_int8_t   MPICH_ATTR_TYPE_TAG_STDINT(int8_t)   = MPI_INT8_T;
199static const MPI_Datatype mpich_mpi_int16_t  MPICH_ATTR_TYPE_TAG_STDINT(int16_t)  = MPI_INT16_T;
200static const MPI_Datatype mpich_mpi_int32_t  MPICH_ATTR_TYPE_TAG_STDINT(int32_t)  = MPI_INT32_T;
201static const MPI_Datatype mpich_mpi_int64_t  MPICH_ATTR_TYPE_TAG_STDINT(int64_t)  = MPI_INT64_T;
202static const MPI_Datatype mpich_mpi_uint8_t  MPICH_ATTR_TYPE_TAG_STDINT(uint8_t)  = MPI_UINT8_T;
203static const MPI_Datatype mpich_mpi_uint16_t MPICH_ATTR_TYPE_TAG_STDINT(uint16_t) = MPI_UINT16_T;
204static const MPI_Datatype mpich_mpi_uint32_t MPICH_ATTR_TYPE_TAG_STDINT(uint32_t) = MPI_UINT32_T;
205static const MPI_Datatype mpich_mpi_uint64_t MPICH_ATTR_TYPE_TAG_STDINT(uint64_t) = MPI_UINT64_T;
206
207/* other C99 types */
208#define MPI_C_BOOL                 ((MPI_Datatype)@MPI_C_BOOL@)
209#define MPI_C_FLOAT_COMPLEX        ((MPI_Datatype)@MPI_C_FLOAT_COMPLEX@)
210#define MPI_C_COMPLEX              MPI_C_FLOAT_COMPLEX
211#define MPI_C_DOUBLE_COMPLEX       ((MPI_Datatype)@MPI_C_DOUBLE_COMPLEX@)
212#define MPI_C_LONG_DOUBLE_COMPLEX  ((MPI_Datatype)@MPI_C_LONG_DOUBLE_COMPLEX@)
213
214static const MPI_Datatype mpich_mpi_c_bool                MPICH_ATTR_TYPE_TAG_C99(_Bool)           = MPI_C_BOOL;
215static const MPI_Datatype mpich_mpi_c_float_complex       MPICH_ATTR_TYPE_TAG_C99(float _Complex)  = MPI_C_FLOAT_COMPLEX;
216static const MPI_Datatype mpich_mpi_c_double_complex      MPICH_ATTR_TYPE_TAG_C99(double _Complex) = MPI_C_DOUBLE_COMPLEX;
217static const MPI_Datatype mpich_mpi_c_long_double_complex MPICH_ATTR_TYPE_TAG_C99(double _Complex) = MPI_C_LONG_DOUBLE_COMPLEX;
218
219/* address/offset types */
220#define MPI_AINT          ((MPI_Datatype)@MPI_AINT_DATATYPE@)
221#define MPI_OFFSET        ((MPI_Datatype)@MPI_OFFSET_DATATYPE@)
222
223/* typeclasses */
224#define MPI_TYPECLASS_REAL 1
225#define MPI_TYPECLASS_INTEGER 2
226#define MPI_TYPECLASS_COMPLEX 3
227
228/* Communicators */
229typedef int MPI_Comm;
230#define MPI_COMM_WORLD ((MPI_Comm)0x44000000)
231#define MPI_COMM_SELF  ((MPI_Comm)0x44000001)
232
233/* Groups */
234typedef int MPI_Group;
235#define MPI_GROUP_EMPTY ((MPI_Group)0x48000000)
236
237/* RMA and Windows */
238typedef int MPI_Win;
239#define MPI_WIN_NULL ((MPI_Win)0x20000000)
240
241/* File and IO */
242/* This define lets ROMIO know that MPI_File has been defined */
243#define MPI_FILE_DEFINED
244/* ROMIO uses a pointer for MPI_File objects.  This must be the same definition
245   as in src/mpi/romio/include/mpio.h.in  */
246typedef struct ADIOI_FileD *MPI_File;
247#define MPI_FILE_NULL ((MPI_File)0)
248
249/* Collective operations */
250typedef int MPI_Op;
251
252#define MPI_MAX     (MPI_Op)(0x58000001)
253#define MPI_MIN     (MPI_Op)(0x58000002)
254#define MPI_SUM     (MPI_Op)(0x58000003)
255#define MPI_PROD    (MPI_Op)(0x58000004)
256#define MPI_LAND    (MPI_Op)(0x58000005)
257#define MPI_BAND    (MPI_Op)(0x58000006)
258#define MPI_LOR     (MPI_Op)(0x58000007)
259#define MPI_BOR     (MPI_Op)(0x58000008)
260#define MPI_LXOR    (MPI_Op)(0x58000009)
261#define MPI_BXOR    (MPI_Op)(0x5800000a)
262#define MPI_MINLOC  (MPI_Op)(0x5800000b)
263#define MPI_MAXLOC  (MPI_Op)(0x5800000c)
264#define MPI_REPLACE (MPI_Op)(0x5800000d)
265#define MPIX_NO_OP  (MPI_Op)(0x5800000e)
266
267/* Permanent key values */
268/* C Versions (return pointer to value),
269   Fortran Versions (return integer value).
270   Handled directly by the attribute value routine
271
272   DO NOT CHANGE THESE.  The values encode:
273   builtin kind (0x1 in bit 30-31)
274   Keyval object (0x9 in bits 26-29)
275   for communicator (0x1 in bits 22-25)
276
277   Fortran versions of the attributes are formed by adding one to
278   the C version.
279 */
280#define MPI_TAG_UB           0x64400001
281#define MPI_HOST             0x64400003
282#define MPI_IO               0x64400005
283#define MPI_WTIME_IS_GLOBAL  0x64400007
284#define MPI_UNIVERSE_SIZE    0x64400009
285#define MPI_LASTUSEDCODE     0x6440000b
286#define MPI_APPNUM           0x6440000d
287
288/* In addition, there are 5 predefined window attributes that are
289   defined for every window */
290#define MPI_WIN_BASE          0x66000001
291#define MPI_WIN_SIZE          0x66000003
292#define MPI_WIN_DISP_UNIT     0x66000005
293#define MPIX_WIN_CREATE_FLAVOR 0x66000007
294#define MPIX_WIN_MODEL         0x66000009
295
296/* Define some null objects */
297#define MPI_COMM_NULL      ((MPI_Comm)0x04000000)
298#define MPI_OP_NULL        ((MPI_Op)0x18000000)
299#define MPI_GROUP_NULL     ((MPI_Group)0x08000000)
300#define MPI_DATATYPE_NULL  ((MPI_Datatype)0x0c000000)
301#define MPI_REQUEST_NULL   ((MPI_Request)0x2c000000)
302#define MPI_ERRHANDLER_NULL ((MPI_Errhandler)0x14000000)
303#define MPIX_MESSAGE_NULL   ((MPIX_Message)MPI_REQUEST_NULL)
304#define MPIX_MESSAGE_NO_PROC ((MPIX_Message)0x6c000000)
305
306static const MPI_Datatype mpich_mpi_datatype_null MPICH_ATTR_TYPE_TAG_MUST_BE_NULL() = MPI_DATATYPE_NULL;
307
308/* These are only guesses; make sure you change them in mpif.h as well */
309#define MPI_MAX_PROCESSOR_NAME @MPI_MAX_PROCESSOR_NAME@
310#define MPI_MAX_ERROR_STRING   @MPI_MAX_ERROR_STRING@
311#define MPI_MAX_PORT_NAME      256
312#define MPI_MAX_OBJECT_NAME    128
313
314/* Pre-defined constants */
315#define MPI_UNDEFINED      (-32766)
316#define MPI_KEYVAL_INVALID 0x24000000
317
318/* MPI-3 window flavors */
319typedef enum MPIR_Win_flavor_e {
320    MPIX_WIN_FLAVOR_CREATE      = 1,
321    MPIX_WIN_FLAVOR_ALLOCATE    = 2,
322    MPIX_WIN_FLAVOR_DYNAMIC     = 3,
323    MPIX_WIN_FLAVOR_SHARED      = 4
324} MPIR_Win_flavor_t;
325
326/* MPI-3 window consistency models */
327typedef enum MPIR_Win_model_e {
328    MPIX_WIN_SEPARATE   = 1,
329    MPIX_WIN_UNIFIED    = 2
330} MPIR_Win_model_t;
331
332/* Upper bound on the overhead in bsend for each message buffer */
333#define MPI_BSEND_OVERHEAD @BSEND_OVERHEAD@
334
335/* Topology types */
336typedef enum MPIR_Topo_type { MPI_GRAPH=1, MPI_CART=2, MPI_DIST_GRAPH=3 } MPIR_Topo_type;
337
338#define MPI_BOTTOM      (void *)0
339extern int * const MPI_UNWEIGHTED;
340
341#define MPI_PROC_NULL   (-1)
342#define MPI_ANY_SOURCE 	(-2)
343#define MPI_ROOT        (-3)
344#define MPI_ANY_TAG     (-1)
345
346#define MPI_LOCK_EXCLUSIVE  234
347#define MPI_LOCK_SHARED     235
348
349#ifndef MPICH2_CONST
350/* #define MPICH2_CONST    const */
351#define MPICH2_CONST
352#endif
353
354/* C functions */
355typedef void (MPI_Handler_function) ( MPI_Comm *, int *, ... );
356typedef int (MPI_Comm_copy_attr_function)(MPI_Comm, int, void *, void *,
357					  void *, int *);
358typedef int (MPI_Comm_delete_attr_function)(MPI_Comm, int, void *, void *);
359typedef int (MPI_Type_copy_attr_function)(MPI_Datatype, int, void *, void *,
360					  void *, int *);
361typedef int (MPI_Type_delete_attr_function)(MPI_Datatype, int, void *, void *);
362typedef int (MPI_Win_copy_attr_function)(MPI_Win, int, void *, void *, void *,
363					 int *);
364typedef int (MPI_Win_delete_attr_function)(MPI_Win, int, void *, void *);
365/* added in MPI-2.2 */
366typedef void (MPI_Comm_errhandler_function)(MPI_Comm *, int *, ...);
367typedef void (MPI_File_errhandler_function)(MPI_File *, int *, ...);
368typedef void (MPI_Win_errhandler_function)(MPI_Win *, int *, ...);
369/* names that were added in MPI-2.0 and deprecated in MPI-2.2 */
370typedef MPI_Comm_errhandler_function MPI_Comm_errhandler_fn;
371typedef MPI_File_errhandler_function MPI_File_errhandler_fn;
372typedef MPI_Win_errhandler_function MPI_Win_errhandler_fn;
373
374/* Built in (0x1 in 30-31), errhandler (0x5 in bits 26-29, allkind (0
375   in 22-25), index in the low bits */
376#define MPI_ERRORS_ARE_FATAL ((MPI_Errhandler)0x54000000)
377#define MPI_ERRORS_RETURN    ((MPI_Errhandler)0x54000001)
378/* MPIR_ERRORS_THROW_EXCEPTIONS is not part of the MPI standard, it is here to
379   facilitate the c++ binding which has MPI::ERRORS_THROW_EXCEPTIONS.
380   Using the MPIR prefix preserved the MPI_ names for objects defined by
381   the standard. */
382#define MPIR_ERRORS_THROW_EXCEPTIONS ((MPI_Errhandler)0x54000002)
383typedef int MPI_Errhandler;
384
385/* Make the C names for the dup function mixed case.
386   This is required for systems that use all uppercase names for Fortran
387   externals.  */
388/* MPI 1 names */
389#define MPI_NULL_COPY_FN   ((MPI_Copy_function *)0)
390#define MPI_NULL_DELETE_FN ((MPI_Delete_function *)0)
391#define MPI_DUP_FN         MPIR_Dup_fn
392/* MPI 2 names */
393#define MPI_COMM_NULL_COPY_FN ((MPI_Comm_copy_attr_function*)0)
394#define MPI_COMM_NULL_DELETE_FN ((MPI_Comm_delete_attr_function*)0)
395#define MPI_COMM_DUP_FN  ((MPI_Comm_copy_attr_function *)MPI_DUP_FN)
396#define MPI_WIN_NULL_COPY_FN ((MPI_Win_copy_attr_function*)0)
397#define MPI_WIN_NULL_DELETE_FN ((MPI_Win_delete_attr_function*)0)
398#define MPI_WIN_DUP_FN   ((MPI_Win_copy_attr_function*)MPI_DUP_FN)
399#define MPI_TYPE_NULL_COPY_FN ((MPI_Type_copy_attr_function*)0)
400#define MPI_TYPE_NULL_DELETE_FN ((MPI_Type_delete_attr_function*)0)
401#define MPI_TYPE_DUP_FN ((MPI_Type_copy_attr_function*)MPI_DUP_FN)
402
403/* MPI request opjects */
404typedef int MPI_Request;
405
406/* MPI message objects for Mprobe and related functions */
407typedef int MPIX_Message;
408
409/* User combination function */
410typedef void (MPI_User_function) ( void *, void *, int *, MPI_Datatype * );
411
412/* MPI Attribute copy and delete functions */
413typedef int (MPI_Copy_function) ( MPI_Comm, int, void *, void *, void *, int * );
414typedef int (MPI_Delete_function) ( MPI_Comm, int, void *, void * );
415
416#define MPI_VERSION    2
417#define MPI_SUBVERSION 2
418#define MPICH_NAME     2
419#define MPICH2         1
420#define MPICH_HAS_C2F  1
421
422
423/* MPICH2_VERSION is the version string. MPICH2_NUMVERSION is the
424 * numeric version that can be used in numeric comparisons.
425 *
426 * MPICH2_VERSION uses the following format:
427 * Version: [MAJ].[MIN].[REV][EXT][EXT_NUMBER]
428 * Example: 1.0.7rc1 has
429 *          MAJ = 1
430 *          MIN = 0
431 *          REV = 7
432 *          EXT = rc
433 *          EXT_NUMBER = 1
434 *
435 * MPICH2_NUMVERSION will convert EXT to a format number:
436 *          ALPHA (a) = 0
437 *          BETA (b)  = 1
438 *          RC (rc)   = 2
439 *          PATCH (p) = 3
440 * Regular releases are treated as patch 0
441 *
442 * Numeric version will have 1 digit for MAJ, 2 digits for MIN, 2
443 * digits for REV, 1 digit for EXT and 2 digits for EXT_NUMBER. So,
444 * 1.0.7rc1 will have the numeric version 10007201.
445 */
446#define MPICH2_VERSION "@MPICH2_VERSION@"
447#define MPICH2_NUMVERSION @MPICH2_NUMVERSION@
448
449#define MPICH2_RELEASE_TYPE_ALPHA  0
450#define MPICH2_RELEASE_TYPE_BETA   1
451#define MPICH2_RELEASE_TYPE_RC     2
452#define MPICH2_RELEASE_TYPE_PATCH  3
453
454#define MPICH2_CALC_VERSION(MAJOR, MINOR, REVISION, TYPE, PATCH) \
455    (((MAJOR) * 10000000) + ((MINOR) * 100000) + ((REVISION) * 1000) + ((TYPE) * 100) + (PATCH))
456
457/* for the datatype decoders */
458enum MPIR_Combiner_enum {
459    MPI_COMBINER_NAMED            = 1,
460    MPI_COMBINER_DUP              = 2,
461    MPI_COMBINER_CONTIGUOUS       = 3,
462    MPI_COMBINER_VECTOR           = 4,
463    MPI_COMBINER_HVECTOR_INTEGER  = 5,
464    MPI_COMBINER_HVECTOR          = 6,
465    MPI_COMBINER_INDEXED          = 7,
466    MPI_COMBINER_HINDEXED_INTEGER = 8,
467    MPI_COMBINER_HINDEXED         = 9,
468    MPI_COMBINER_INDEXED_BLOCK    = 10,
469    MPIX_COMBINER_HINDEXED_BLOCK  = 11,
470    MPI_COMBINER_STRUCT_INTEGER   = 12,
471    MPI_COMBINER_STRUCT           = 13,
472    MPI_COMBINER_SUBARRAY         = 14,
473    MPI_COMBINER_DARRAY           = 15,
474    MPI_COMBINER_F90_REAL         = 16,
475    MPI_COMBINER_F90_COMPLEX      = 17,
476    MPI_COMBINER_F90_INTEGER      = 18,
477    MPI_COMBINER_RESIZED          = 19
478};
479
480/* for info */
481typedef int MPI_Info;
482#define MPI_INFO_NULL         ((MPI_Info)0x1c000000)
483#define MPI_MAX_INFO_KEY       255
484#define MPI_MAX_INFO_VAL      1024
485
486/* for subarray and darray constructors */
487#define MPI_ORDER_C              56
488#define MPI_ORDER_FORTRAN        57
489#define MPI_DISTRIBUTE_BLOCK    121
490#define MPI_DISTRIBUTE_CYCLIC   122
491#define MPI_DISTRIBUTE_NONE     123
492#define MPI_DISTRIBUTE_DFLT_DARG -49767
493
494#define MPI_IN_PLACE  (void *) -1
495
496/* asserts for one-sided communication */
497#define MPI_MODE_NOCHECK      1024
498#define MPI_MODE_NOSTORE      2048
499#define MPI_MODE_NOPUT        4096
500#define MPI_MODE_NOPRECEDE    8192
501#define MPI_MODE_NOSUCCEED   16384
502
503/* predefined types for MPIX_Comm_split_type */
504#define MPIX_COMM_TYPE_SHARED    1
505
506/* Definitions that are determined by configure. */
507typedef @MPI_AINT@ MPI_Aint;
508typedef @MPI_FINT@ MPI_Fint;
509
510static const MPI_Datatype mpich_mpi_aint   MPICH_ATTR_TYPE_TAG(MPI_Aint)   = MPI_AINT;
511
512/* FIXME: The following two definition are not defined by MPI and must not be
513   included in the mpi.h file, as the MPI namespace is reserved to the MPI
514   standard */
515#define MPI_AINT_FMT_DEC_SPEC "@MPI_AINT_FMT_DEC_SPEC@"
516#define MPI_AINT_FMT_HEX_SPEC "@MPI_AINT_FMT_HEX_SPEC@"
517
518/* Let ROMIO know that MPI_Offset is already defined */
519#define HAVE_MPI_OFFSET
520/* MPI_OFFSET_TYPEDEF is set in configure and is
521      typedef $MPI_OFFSET MPI_Offset;
522   where $MPI_OFFSET is the correct C type */
523@MPI_OFFSET_TYPEDEF@
524
525static const MPI_Datatype mpich_mpi_offset MPICH_ATTR_TYPE_TAG(MPI_Offset) = MPI_OFFSET;
526
527/* The order of these elements must match that in mpif.h */
528typedef struct MPI_Status {
529    int count;
530    int cancelled;
531    int MPI_SOURCE;
532    int MPI_TAG;
533    int MPI_ERROR;
534    @EXTRA_STATUS_DECL@
535} MPI_Status;
536
537/* types for the MPIX_T_ interface */
538struct MPIR_T_enum;
539typedef struct MPIR_T_enum * MPIX_T_enum;
540struct MPIR_T_cvar_handle;
541typedef struct MPIR_T_cvar_handle * MPIX_T_cvar_handle;
542struct MPIR_T_pvar_handle;
543typedef struct MPIR_T_pvar_handle * MPIX_T_pvar_handle;
544struct MPIR_T_pvar_session;
545typedef struct MPIR_T_pvar_session * MPIX_T_pvar_session;
546
547/* extra const at front would be safer, but is incompatible with MPIX_T_ prototypes */
548extern struct MPIR_T_pvar_handle * const MPIX_T_PVAR_ALL_HANDLES;
549
550#define MPIX_T_ENUM_NULL         ((MPIX_T_enum)NULL)
551#define MPIX_T_CVAR_HANDLE_NULL  ((MPIX_T_cvar_handle)NULL)
552#define MPIX_T_PVAR_HANDLE_NULL  ((MPIX_T_pvar_handle)NULL)
553#define MPIX_T_PVAR_SESSION_NULL ((MPIX_T_pvar_session)NULL)
554
555/* the MPI_T_ interface requires that these VERBOSITY constants occur in this
556 * relative order with increasing values */
557enum MPIR_T_verbosity_t {
558    /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
559     * extension */
560    MPIX_T_VERBOSITY_INVALID = 0,
561
562    /* arbitrarily shift values to aid debugging and reduce accidental errors */
563    MPIX_T_VERBOSITY_USER_BASIC = 221,
564    MPIX_T_VERBOSITY_USER_DETAIL,
565    MPIX_T_VERBOSITY_USER_ALL,
566
567    MPIX_T_VERBOSITY_TUNER_BASIC,
568    MPIX_T_VERBOSITY_TUNER_DETAIL,
569    MPIX_T_VERBOSITY_TUNER_ALL,
570
571    MPIX_T_VERBOSITY_MPIDEV_BASIC,
572    MPIX_T_VERBOSITY_MPIDEV_DETAIL,
573    MPIX_T_VERBOSITY_MPIDEV_ALL
574};
575
576enum MPIR_T_bind_t {
577    /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
578     * extension */
579    MPIX_T_BIND_INVALID = 0,
580
581    /* arbitrarily shift values to aid debugging and reduce accidental errors */
582    MPIX_T_BIND_NO_OBJECT = 9700,
583    MPIX_T_BIND_MPI_COMM,
584    MPIX_T_BIND_MPI_DATATYPE,
585    MPIX_T_BIND_MPI_ERRHANDLER,
586    MPIX_T_BIND_MPI_FILE,
587    MPIX_T_BIND_MPI_GROUP,
588    MPIX_T_BIND_MPI_OP,
589    MPIX_T_BIND_MPI_REQUEST,
590    MPIX_T_BIND_MPI_WIN,
591    MPIX_T_BIND_MPI_MESSAGE,
592    MPIX_T_BIND_MPI_INFO
593};
594
595enum MPIR_T_scope_t {
596    /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
597     * extension */
598    MPIX_T_SCOPE_INVALID = 0,
599
600    /* arbitrarily shift values to aid debugging and reduce accidental errors */
601    MPIX_T_SCOPE_READONLY = 60439,
602    MPIX_T_SCOPE_LOCAL,
603    MPIX_T_SCOPE_GROUP,
604    MPIX_T_SCOPE_GROUP_EQ,
605    MPIX_T_SCOPE_ALL,
606    MPIX_T_SCOPE_ALL_EQ
607};
608
609enum MPIR_T_pvar_class_t {
610    /* don't name-shift this if/when MPI_T_ is accepted, this is an MPICH2-only
611     * extension */
612    MPIX_T_PVAR_CLASS_INVALID = 0,
613
614    /* arbitrarily shift values to aid debugging and reduce accidental errors */
615    MPIX_T_PVAR_CLASS_STATE = 240,
616    MPIX_T_PVAR_CLASS_LEVEL,
617    MPIX_T_PVAR_CLASS_SIZE,
618    MPIX_T_PVAR_CLASS_PERCENTAGE,
619    MPIX_T_PVAR_CLASS_HIGHWATERMARK,
620    MPIX_T_PVAR_CLASS_LOWWATERMARK,
621    MPIX_T_PVAR_CLASS_COUNTER,
622    MPIX_T_PVAR_CLASS_AGGREGATE,
623    MPIX_T_PVAR_CLASS_TIMER,
624    MPIX_T_PVAR_CLASS_GENERIC
625};
626
627/* Handle conversion types/functions */
628
629/* Programs that need to convert types used in MPICH should use these */
630#define MPI_Comm_c2f(comm) (MPI_Fint)(comm)
631#define MPI_Comm_f2c(comm) (MPI_Comm)(comm)
632#define MPI_Type_c2f(datatype) (MPI_Fint)(datatype)
633#define MPI_Type_f2c(datatype) (MPI_Datatype)(datatype)
634#define MPI_Group_c2f(group) (MPI_Fint)(group)
635#define MPI_Group_f2c(group) (MPI_Group)(group)
636#define MPI_Info_c2f(info) (MPI_Fint)(info)
637#define MPI_Info_f2c(info) (MPI_Info)(info)
638#define MPI_Request_f2c(request) (MPI_Request)(request)
639#define MPI_Request_c2f(request) (MPI_Fint)(request)
640#define MPI_Op_c2f(op) (MPI_Fint)(op)
641#define MPI_Op_f2c(op) (MPI_Op)(op)
642#define MPI_Errhandler_c2f(errhandler) (MPI_Fint)(errhandler)
643#define MPI_Errhandler_f2c(errhandler) (MPI_Errhandler)(errhandler)
644#define MPI_Win_c2f(win)   (MPI_Fint)(win)
645#define MPI_Win_f2c(win)   (MPI_Win)(win)
646#define MPIX_Message_c2f(msg) ((MPI_Fint)(msg))
647#define MPIX_Message_f2c(msg) ((MPIX_Message)(msg))
648
649/* PMPI versions of the handle transfer functions.  See section 4.17 */
650#define PMPI_Comm_c2f(comm) (MPI_Fint)(comm)
651#define PMPI_Comm_f2c(comm) (MPI_Comm)(comm)
652#define PMPI_Type_c2f(datatype) (MPI_Fint)(datatype)
653#define PMPI_Type_f2c(datatype) (MPI_Datatype)(datatype)
654#define PMPI_Group_c2f(group) (MPI_Fint)(group)
655#define PMPI_Group_f2c(group) (MPI_Group)(group)
656#define PMPI_Info_c2f(info) (MPI_Fint)(info)
657#define PMPI_Info_f2c(info) (MPI_Info)(info)
658#define PMPI_Request_f2c(request) (MPI_Request)(request)
659#define PMPI_Request_c2f(request) (MPI_Fint)(request)
660#define PMPI_Op_c2f(op) (MPI_Fint)(op)
661#define PMPI_Op_f2c(op) (MPI_Op)(op)
662#define PMPI_Errhandler_c2f(errhandler) (MPI_Fint)(errhandler)
663#define PMPI_Errhandler_f2c(errhandler) (MPI_Errhandler)(errhandler)
664#define PMPI_Win_c2f(win)   (MPI_Fint)(win)
665#define PMPI_Win_f2c(win)   (MPI_Win)(win)
666#define PMPIX_Message_c2f(msg) ((MPI_Fint)(msg))
667#define PMPIX_Message_f2c(msg) ((MPIX_Message)(msg))
668
669#define MPI_STATUS_IGNORE (MPI_Status *)1
670#define MPI_STATUSES_IGNORE (MPI_Status *)1
671#define MPI_ERRCODES_IGNORE (int *)0
672
673/* See 4.12.5 for MPI_F_STATUS(ES)_IGNORE */
674@MPIU_DLL_SPEC_DEF@
675extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUS_IGNORE;
676extern MPIU_DLL_SPEC MPI_Fint * MPI_F_STATUSES_IGNORE;
677/* The annotation MPIU_DLL_SPEC to the extern statements is used
678   as a hook for systems that require C extensions to correctly construct
679   DLLs, and is defined as an empty string otherwise
680 */
681
682/* The MPI standard requires that the ARGV_NULL values be the same as
683   NULL (see 5.3.2) */
684#define MPI_ARGV_NULL (char **)0
685#define MPI_ARGVS_NULL (char ***)0
686
687/* For supported thread levels */
688#define MPI_THREAD_SINGLE 0
689#define MPI_THREAD_FUNNELED 1
690#define MPI_THREAD_SERIALIZED 2
691#define MPI_THREAD_MULTIPLE 3
692
693/* Typedefs for generalized requests */
694typedef int (MPI_Grequest_cancel_function)(void *, int);
695typedef int (MPI_Grequest_free_function)(void *);
696typedef int (MPI_Grequest_query_function)(void *, MPI_Status *);
697
698/* MPI's error classes */
699#define MPI_SUCCESS          0      /* Successful return code */
700/* Communication argument parameters */
701#define MPI_ERR_BUFFER       1      /* Invalid buffer pointer */
702#define MPI_ERR_COUNT        2      /* Invalid count argument */
703#define MPI_ERR_TYPE         3      /* Invalid datatype argument */
704#define MPI_ERR_TAG          4      /* Invalid tag argument */
705#define MPI_ERR_COMM         5      /* Invalid communicator */
706#define MPI_ERR_RANK         6      /* Invalid rank */
707#define MPI_ERR_ROOT         7      /* Invalid root */
708#define MPI_ERR_TRUNCATE    14      /* Message truncated on receive */
709
710/* MPI Objects (other than COMM) */
711#define MPI_ERR_GROUP        8      /* Invalid group */
712#define MPI_ERR_OP           9      /* Invalid operation */
713#define MPI_ERR_REQUEST     19      /* Invalid mpi_request handle */
714
715/* Special topology argument parameters */
716#define MPI_ERR_TOPOLOGY    10      /* Invalid topology */
717#define MPI_ERR_DIMS        11      /* Invalid dimension argument */
718
719/* All other arguments.  This is a class with many kinds */
720#define MPI_ERR_ARG         12      /* Invalid argument */
721
722/* Other errors that are not simply an invalid argument */
723#define MPI_ERR_OTHER       15      /* Other error; use Error_string */
724
725#define MPI_ERR_UNKNOWN     13      /* Unknown error */
726#define MPI_ERR_INTERN      16      /* Internal error code    */
727
728/* Multiple completion has two special error classes */
729#define MPI_ERR_IN_STATUS   17      /* Look in status for error value */
730#define MPI_ERR_PENDING     18      /* Pending request */
731
732/* New MPI-2 Error classes */
733#define MPI_ERR_FILE        27      /* */
734#define MPI_ERR_ACCESS      20      /* */
735#define MPI_ERR_AMODE       21      /* */
736#define MPI_ERR_BAD_FILE    22      /* */
737#define MPI_ERR_FILE_EXISTS 25      /* */
738#define MPI_ERR_FILE_IN_USE 26      /* */
739#define MPI_ERR_NO_SPACE    36      /* */
740#define MPI_ERR_NO_SUCH_FILE 37     /* */
741#define MPI_ERR_IO          32      /* */
742#define MPI_ERR_READ_ONLY   40      /* */
743#define MPI_ERR_CONVERSION  23      /* */
744#define MPI_ERR_DUP_DATAREP 24      /* */
745#define MPI_ERR_UNSUPPORTED_DATAREP   43  /* */
746
747/* MPI_ERR_INFO is NOT defined in the MPI-2 standard.  I believe that
748   this is an oversight */
749#define MPI_ERR_INFO        28      /* */
750#define MPI_ERR_INFO_KEY    29      /* */
751#define MPI_ERR_INFO_VALUE  30      /* */
752#define MPI_ERR_INFO_NOKEY  31      /* */
753
754#define MPI_ERR_NAME        33      /* */
755#define MPI_ERR_NO_MEM      34      /* Alloc_mem could not allocate memory */
756#define MPI_ERR_NOT_SAME    35      /* */
757#define MPI_ERR_PORT        38      /* */
758#define MPI_ERR_QUOTA       39      /* */
759#define MPI_ERR_SERVICE     41      /* */
760#define MPI_ERR_SPAWN       42      /* */
761#define MPI_ERR_UNSUPPORTED_OPERATION 44 /* */
762#define MPI_ERR_WIN         45      /* */
763
764#define MPI_ERR_BASE        46      /* */
765#define MPI_ERR_LOCKTYPE    47      /* */
766#define MPI_ERR_KEYVAL      48      /* Erroneous attribute key */
767#define MPI_ERR_RMA_CONFLICT 49     /* */
768#define MPI_ERR_RMA_SYNC    50      /* */
769#define MPI_ERR_SIZE        51      /* */
770#define MPI_ERR_DISP        52      /* */
771#define MPI_ERR_ASSERT      53      /* */
772
773#define MPIX_ERR_PROC_FAIL_STOP 54   /* Process failure */
774
775#define MPIX_ERR_RMA_RANGE  55      /* */
776#define MPIX_ERR_RMA_ATTACH 56      /* */
777#define MPIX_ERR_RMA_SHARED 57      /* */
778#define MPIX_ERR_RMA_WRONG_FLAVOR 58    /* */
779
780#define MPI_ERR_LASTCODE    0x3fffffff  /* Last valid error code for a
781					   predefined error class */
782/* WARNING: this is also defined in mpishared.h.  Update both locations */
783#define MPICH_ERR_LAST_CLASS 58     /* It is also helpful to know the
784				       last valid class */
785/* End of MPI's error classes */
786
787/* Function type defs */
788typedef int (MPI_Datarep_conversion_function)(void *, MPI_Datatype, int,
789             void *, MPI_Offset, void *);
790typedef int (MPI_Datarep_extent_function)(MPI_Datatype datatype, MPI_Aint *,
791					  void *);
792#define MPI_CONVERSION_FN_NULL ((MPI_Datarep_conversion_function *)0)
793
794/*
795   For systems that may need to add additional definitions to support
796   different declaration styles and options (e.g., different calling
797   conventions or DLL import/export controls).
798*/
799/* --Insert Additional Definitions Here-- */
800
801/* Include any device specific definitions */
802@INCLUDE_MPIDDEFS_H@
803
804/*
805 * Normally, we provide prototypes for all MPI routines.  In a few weird
806 * cases, we need to suppress the prototypes.
807 */
808#ifndef MPICH_SUPPRESS_PROTOTYPES
809/* We require that the C compiler support prototypes */
810/* Begin Prototypes */
811int MPI_Send(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
812int MPI_Recv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
813int MPI_Get_count(MPICH2_CONST MPI_Status *, MPI_Datatype, int *);
814int MPI_Bsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
815int MPI_Ssend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
816int MPI_Rsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
817int MPI_Buffer_attach( void*, int);
818int MPI_Buffer_detach( void*, int *);
819int MPI_Isend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
820int MPI_Ibsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
821int MPI_Issend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
822int MPI_Irsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
823int MPI_Irecv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
824int MPI_Wait(MPI_Request *, MPI_Status *);
825int MPI_Test(MPI_Request *, int *, MPI_Status *);
826int MPI_Request_free(MPI_Request *);
827int MPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
828int MPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
829int MPI_Waitall(int, MPI_Request *, MPI_Status *);
830int MPI_Testall(int, MPI_Request *, int *, MPI_Status *);
831int MPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
832int MPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
833int MPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
834int MPI_Probe(int, int, MPI_Comm, MPI_Status *);
835int MPI_Cancel(MPI_Request *);
836int MPI_Test_cancelled(MPICH2_CONST MPI_Status *, int *);
837int MPI_Send_init(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
838int MPI_Bsend_init(MPICH2_CONST void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
839int MPI_Ssend_init(MPICH2_CONST void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
840int MPI_Rsend_init(MPICH2_CONST void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
841int MPI_Recv_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
842int MPI_Start(MPI_Request *);
843int MPI_Startall(int, MPI_Request *);
844int MPI_Sendrecv(MPICH2_CONST void *, int, MPI_Datatype,int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8);
845int MPI_Sendrecv_replace(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
846int MPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
847int MPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
848int MPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
849int MPI_Type_indexed(int, MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype, MPI_Datatype *);
850int MPI_Type_hindexed(int, MPICH2_CONST int *, MPICH2_CONST MPI_Aint *, MPI_Datatype, MPI_Datatype *);
851int MPI_Type_struct(int, MPICH2_CONST int *, MPICH2_CONST MPI_Aint *, MPICH2_CONST MPI_Datatype *, MPI_Datatype *);
852int MPI_Address(MPICH2_CONST void*, MPI_Aint *);
853/* We could add __attribute__((deprecated)) to routines like MPI_Type_extent */
854int MPI_Type_extent(MPI_Datatype, MPI_Aint *);
855/* See the 1.1 version of the Standard.  The standard made an
856   unfortunate choice here, however, it is the standard.  The size returned
857   by MPI_Type_size is specified as an int, not an MPI_Aint */
858int MPI_Type_size(MPI_Datatype, int *);
859/* MPI_Type_count was withdrawn in MPI 1.1 */
860int MPI_Type_lb(MPI_Datatype, MPI_Aint *);
861int MPI_Type_ub(MPI_Datatype, MPI_Aint *);
862int MPI_Type_commit(MPI_Datatype *);
863int MPI_Type_free(MPI_Datatype *);
864int MPI_Get_elements(MPICH2_CONST MPI_Status *, MPI_Datatype, int *);
865int MPI_Pack(MPICH2_CONST void*, int, MPI_Datatype, void *, int, int *,  MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
866int MPI_Unpack(MPICH2_CONST void*, int, int *, void *, int, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
867int MPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
868int MPI_Barrier(MPI_Comm );
869int MPI_Bcast(void*, int, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
870int MPI_Gather(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
871int MPI_Gatherv(MPICH2_CONST void* , int, MPI_Datatype, void*, MPICH2_CONST int *,
872                MPICH2_CONST int *, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
873int MPI_Scatter(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
874int MPI_Scatterv(MPICH2_CONST void* , MPICH2_CONST int *, MPICH2_CONST int *,  MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
875int MPI_Allgather(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
876int MPI_Allgatherv(MPICH2_CONST void* , int, MPI_Datatype, void*, MPICH2_CONST int *,
877                   MPICH2_CONST int *, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
878int MPI_Alltoall(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
879int MPI_Alltoallv(MPICH2_CONST void* , MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype,
880                  void*, MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
881int MPI_Reduce(MPICH2_CONST void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
882int MPI_Op_create(MPI_User_function *, int, MPI_Op *);
883int MPI_Op_free( MPI_Op *);
884int MPI_Allreduce(MPICH2_CONST void*, void*, int, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
885int MPI_Reduce_scatter(MPICH2_CONST void* , void*, MPICH2_CONST int *, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
886int MPI_Scan(MPICH2_CONST void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
887int MPI_Group_size(MPI_Group, int *);
888int MPI_Group_rank(MPI_Group, int *);
889int MPI_Group_translate_ranks (MPI_Group, int, MPICH2_CONST int *, MPI_Group, int *);
890int MPI_Group_compare(MPI_Group, MPI_Group, int *);
891int MPI_Comm_group(MPI_Comm, MPI_Group *);
892int MPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
893int MPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
894int MPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
895int MPI_Group_incl(MPI_Group, int, MPICH2_CONST int *, MPI_Group *);
896int MPI_Group_excl(MPI_Group, int, MPICH2_CONST int *, MPI_Group *);
897int MPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
898int MPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
899int MPI_Group_free(MPI_Group *);
900int MPI_Comm_size(MPI_Comm, int *);
901int MPI_Comm_rank(MPI_Comm, int *);
902int MPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
903int MPI_Comm_dup(MPI_Comm, MPI_Comm *);
904int MPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
905int MPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
906int MPI_Comm_free(MPI_Comm *);
907int MPI_Comm_test_inter(MPI_Comm, int *);
908int MPI_Comm_remote_size(MPI_Comm, int *);
909int MPI_Comm_remote_group(MPI_Comm, MPI_Group *);
910int MPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm * );
911int MPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
912int MPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void*);
913int MPI_Keyval_free(int *);
914int MPI_Attr_put(MPI_Comm, int, void*);
915int MPI_Attr_get(MPI_Comm, int, void *, int *);
916int MPI_Attr_delete(MPI_Comm, int);
917int MPI_Topo_test(MPI_Comm, int *);
918int MPI_Cart_create(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int, MPI_Comm *);
919int MPI_Dims_create(int, int, int *);
920int MPI_Graph_create(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int, MPI_Comm *);
921int MPI_Graphdims_get(MPI_Comm, int *, int *);
922int MPI_Graph_get(MPI_Comm, int, int, int *, int *);
923int MPI_Cartdim_get(MPI_Comm, int *);
924int MPI_Cart_get(MPI_Comm, int, int *, int *, int *);
925int MPI_Cart_rank(MPI_Comm, MPICH2_CONST int *, int *);
926int MPI_Cart_coords(MPI_Comm, int, int, int *);
927int MPI_Graph_neighbors_count(MPI_Comm, int, int *);
928int MPI_Graph_neighbors(MPI_Comm, int, int, int *);
929int MPI_Cart_shift(MPI_Comm, int, int, int *, int *);
930int MPI_Cart_sub(MPI_Comm, MPICH2_CONST int *, MPI_Comm *);
931int MPI_Cart_map(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int *);
932int MPI_Graph_map(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int *);
933int MPI_Get_processor_name(char *, int *);
934int MPI_Get_version(int *, int *);
935int MPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
936int MPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
937int MPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
938int MPI_Errhandler_free(MPI_Errhandler *);
939int MPI_Error_string(int, char *, int *);
940int MPI_Error_class(int, int *);
941double MPI_Wtime(void);
942double MPI_Wtick(void);
943#ifndef MPI_Wtime
944double PMPI_Wtime(void);
945double PMPI_Wtick(void);
946#endif
947int MPI_Init(int *, char ***);
948int MPI_Finalize(void);
949int MPI_Initialized(int *);
950int MPI_Abort(MPI_Comm, int);
951
952
953/* Note that we may need to define a @PCONTROL_LIST@ depending on whether
954   stdargs are supported */
955int MPI_Pcontrol(const int, ...);
956
957int MPI_DUP_FN ( MPI_Comm, int, void *, void *, void *, int * );
958
959
960/* MPI-2 functions */
961
962/* Process Creation and Management */
963int MPI_Close_port(MPICH2_CONST char *);
964int MPI_Comm_accept(MPICH2_CONST char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
965int MPI_Comm_connect(MPICH2_CONST char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
966int MPI_Comm_disconnect(MPI_Comm *);
967int MPI_Comm_get_parent(MPI_Comm *);
968int MPI_Comm_join(int, MPI_Comm *);
969int MPI_Comm_spawn(MPICH2_CONST char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *,
970                   int []);
971int MPI_Comm_spawn_multiple(int, char *[], char **[], MPICH2_CONST int [], MPICH2_CONST MPI_Info [], int,
972			    MPI_Comm, MPI_Comm *, int []);
973int MPI_Lookup_name(MPICH2_CONST char *, MPI_Info, char *);
974int MPI_Open_port(MPI_Info, char *);
975int MPI_Publish_name(MPICH2_CONST char *, MPI_Info, MPICH2_CONST char *);
976int MPI_Unpublish_name(MPICH2_CONST char *, MPI_Info, MPICH2_CONST char *);
977
978/* One-Sided Communications */
979int MPI_Accumulate(MPICH2_CONST void *, int, MPI_Datatype, int, MPI_Aint, int,
980                   MPI_Datatype,  MPI_Op, MPI_Win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
981int MPI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
982            MPI_Win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
983int MPI_Put(MPICH2_CONST void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
984            MPI_Win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
985int MPI_Win_complete(MPI_Win);
986int MPI_Win_create(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
987int MPI_Win_fence(int, MPI_Win);
988int MPI_Win_free(MPI_Win *);
989int MPI_Win_get_group(MPI_Win, MPI_Group *);
990int MPI_Win_lock(int, int, int, MPI_Win);
991int MPI_Win_post(MPI_Group, int, MPI_Win);
992int MPI_Win_start(MPI_Group, int, MPI_Win);
993int MPI_Win_test(MPI_Win, int *);
994int MPI_Win_unlock(int, MPI_Win);
995int MPI_Win_wait(MPI_Win);
996
997/* MPI-3 One-Sided Communication Routines */
998int MPIX_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info,
999                      MPI_Comm comm, void *baseptr, MPI_Win *win);
1000int MPIX_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
1001                             void *baseptr, MPI_Win *win);
1002int MPIX_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr);
1003int MPIX_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win);
1004int MPIX_Win_attach(MPI_Win win, void *base, MPI_Aint size);
1005int MPIX_Win_detach(MPI_Win win, const void *base);
1006
1007int MPIX_Get_accumulate(const void *origin_addr, int origin_count,
1008                        MPI_Datatype origin_datatype, void *result_addr, int result_count,
1009                        MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
1010                        int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win);
1011int MPIX_Fetch_and_op(const void *origin_addr, void *result_addr,
1012                      MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
1013                      MPI_Op op, MPI_Win win);
1014int MPIX_Compare_and_swap(const void *origin_addr, const void *compare_addr,
1015                          void *result_addr, MPI_Datatype datatype, int target_rank,
1016                          MPI_Aint target_disp, MPI_Win win);
1017int MPIX_Rput(const void *origin_addr, int origin_count,
1018              MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
1019              int target_count, MPI_Datatype target_datatype, MPI_Win win,
1020              MPI_Request *request);
1021int MPIX_Rget(void *origin_addr, int origin_count,
1022              MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
1023              int target_count, MPI_Datatype target_datatype, MPI_Win win,
1024              MPI_Request *request);
1025int MPIX_Raccumulate(const void *origin_addr, int origin_count,
1026                     MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
1027                     int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
1028                     MPI_Request *request);
1029int MPIX_Rget_accumulate(const void *origin_addr, int origin_count,
1030                         MPI_Datatype origin_datatype, void *result_addr, int result_count,
1031                         MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
1032                         int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
1033                         MPI_Request *request);
1034
1035int MPIX_Win_lock_all(int assert, MPI_Win win);
1036int MPIX_Win_unlock_all(MPI_Win win);
1037int MPIX_Win_flush(int rank, MPI_Win win);
1038int MPIX_Win_flush_all(MPI_Win win);
1039int MPIX_Win_flush_local(int rank, MPI_Win win);
1040int MPIX_Win_flush_local_all(MPI_Win win);
1041int MPIX_Win_sync(MPI_Win win);
1042
1043
1044/* Extended Collective Operations */
1045int MPI_Alltoallw(MPICH2_CONST void *, MPICH2_CONST int [], MPICH2_CONST int [],
1046                  MPICH2_CONST MPI_Datatype [], void *, MPICH2_CONST int [],
1047		  MPICH2_CONST int [], MPICH2_CONST MPI_Datatype [], MPI_Comm);
1048int MPI_Exscan(MPICH2_CONST void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1049
1050/* External Interfaces */
1051int MPI_Add_error_class(int *);
1052int MPI_Add_error_code(int, int *);
1053int MPI_Add_error_string(int, MPICH2_CONST char *);
1054int MPI_Comm_call_errhandler(MPI_Comm, int);
1055int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *,
1056                           MPI_Comm_delete_attr_function *, int *, void *);
1057int MPI_Comm_delete_attr(MPI_Comm, int);
1058int MPI_Comm_free_keyval(int *);
1059int MPI_Comm_get_attr(MPI_Comm, int, void *, int *);
1060int MPI_Comm_get_name(MPI_Comm, char *, int *);
1061int MPI_Comm_set_attr(MPI_Comm, int, void *);
1062int MPI_Comm_set_name(MPI_Comm, MPICH2_CONST char *);
1063int MPI_File_call_errhandler(MPI_File, int);
1064int MPI_Grequest_complete(MPI_Request);
1065int MPI_Grequest_start(MPI_Grequest_query_function *,
1066                       MPI_Grequest_free_function *,
1067                       MPI_Grequest_cancel_function *, void *, MPI_Request *);
1068int MPI_Init_thread(int *, char ***, int, int *);
1069int MPI_Is_thread_main(int *);
1070int MPI_Query_thread(int *);
1071int MPI_Status_set_cancelled(MPI_Status *, int);
1072int MPI_Status_set_elements(MPI_Status *, MPI_Datatype, int);
1073int MPI_Type_create_keyval(MPI_Type_copy_attr_function *,
1074                           MPI_Type_delete_attr_function *, int *, void *);
1075int MPI_Type_delete_attr(MPI_Datatype, int);
1076int MPI_Type_dup(MPI_Datatype, MPI_Datatype *);
1077int MPI_Type_free_keyval(int *);
1078int MPI_Type_get_attr(MPI_Datatype, int, void *, int *);
1079int MPI_Type_get_contents(MPI_Datatype, int, int, int, int [], MPI_Aint [],
1080                          MPI_Datatype []);
1081int MPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
1082int MPI_Type_get_name(MPI_Datatype, char *, int *);
1083int MPI_Type_set_attr(MPI_Datatype, int, void *);
1084int MPI_Type_set_name(MPI_Datatype, MPICH2_CONST char *);
1085int MPI_Type_match_size( int, int, MPI_Datatype *);
1086int MPI_Win_call_errhandler(MPI_Win, int);
1087int MPI_Win_create_keyval(MPI_Win_copy_attr_function *,
1088                         MPI_Win_delete_attr_function *, int *, void *);
1089int MPI_Win_delete_attr(MPI_Win, int);
1090int MPI_Win_free_keyval(int *);
1091int MPI_Win_get_attr(MPI_Win, int, void *, int *);
1092int MPI_Win_get_name(MPI_Win, char *, int *);
1093int MPI_Win_set_attr(MPI_Win, int, void *);
1094int MPI_Win_set_name(MPI_Win, MPICH2_CONST char *);
1095
1096/* Miscellany */
1097#ifdef FOO
1098MPI_Comm MPI_Comm_f2c(MPI_Fint);
1099MPI_Datatype MPI_Type_f2c(MPI_Fint);
1100MPI_File MPI_File_f2c(MPI_Fint);
1101MPI_Fint MPI_Comm_c2f(MPI_Comm);
1102MPI_Fint MPI_File_c2f(MPI_File);
1103MPI_Fint MPI_Group_c2f(MPI_Group);
1104MPI_Fint MPI_Info_c2f(MPI_Info);
1105MPI_Fint MPI_Op_c2f(MPI_Op);
1106MPI_Fint MPI_Request_c2f(MPI_Request);
1107MPI_Fint MPI_Type_c2f(MPI_Datatype);
1108MPI_Fint MPI_Win_c2f(MPI_Win);
1109MPI_Group MPI_Group_f2c(MPI_Fint);
1110MPI_Info MPI_Info_f2c(MPI_Fint);
1111MPI_Op MPI_Op_f2c(MPI_Fint);
1112MPI_Request MPI_Request_f2c(MPI_Fint);
1113MPI_Win MPI_Win_f2c(MPI_Fint);
1114#endif
1115
1116int MPI_Alloc_mem(MPI_Aint, MPI_Info info, void *baseptr);
1117int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *, MPI_Errhandler *);
1118int MPI_Comm_get_errhandler(MPI_Comm, MPI_Errhandler *);
1119int MPI_Comm_set_errhandler(MPI_Comm, MPI_Errhandler);
1120int MPI_File_create_errhandler(MPI_File_errhandler_function *, MPI_Errhandler *);
1121int MPI_File_get_errhandler(MPI_File, MPI_Errhandler *);
1122int MPI_File_set_errhandler(MPI_File, MPI_Errhandler);
1123int MPI_Finalized(int *);
1124int MPI_Free_mem(void *);
1125int MPI_Get_address(MPICH2_CONST void *, MPI_Aint *);
1126int MPI_Info_create(MPI_Info *);
1127int MPI_Info_delete(MPI_Info, MPICH2_CONST char *);
1128int MPI_Info_dup(MPI_Info, MPI_Info *);
1129int MPI_Info_free(MPI_Info *info);
1130int MPI_Info_get(MPI_Info, MPICH2_CONST char *, int, char *, int *);
1131int MPI_Info_get_nkeys(MPI_Info, int *);
1132int MPI_Info_get_nthkey(MPI_Info, int, char *);
1133int MPI_Info_get_valuelen(MPI_Info, MPICH2_CONST char *, int *, int *);
1134int MPI_Info_set(MPI_Info, MPICH2_CONST char *, MPICH2_CONST char *);
1135int MPI_Pack_external(MPICH2_CONST char *, MPICH2_CONST void *, int, MPI_Datatype, void *,
1136                      MPI_Aint, MPI_Aint *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1137int MPI_Pack_external_size(MPICH2_CONST char *, int, MPI_Datatype, MPI_Aint *);
1138int MPI_Request_get_status(MPI_Request, int *, MPI_Status *);
1139int MPI_Status_c2f(MPICH2_CONST MPI_Status *, MPI_Fint *);
1140int MPI_Status_f2c(MPICH2_CONST MPI_Fint *, MPI_Status *);
1141int MPI_Type_create_darray(int, int, int, MPICH2_CONST int [], MPICH2_CONST int [],
1142                           MPICH2_CONST int [], MPICH2_CONST int [], int,
1143                           MPI_Datatype, MPI_Datatype *);
1144int MPI_Type_create_hindexed(int, MPICH2_CONST int [], MPICH2_CONST MPI_Aint [], MPI_Datatype,
1145                             MPI_Datatype *);
1146int MPI_Type_create_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
1147int MPI_Type_create_indexed_block(int, int, MPICH2_CONST int [], MPI_Datatype,
1148                                  MPI_Datatype *);
1149int MPIX_Type_create_hindexed_block(int, int, const MPI_Aint [], MPI_Datatype, MPI_Datatype *);
1150int MPI_Type_create_resized(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *);
1151int MPI_Type_create_struct(int, MPICH2_CONST int [], MPICH2_CONST MPI_Aint [],
1152                           MPICH2_CONST MPI_Datatype [], MPI_Datatype *);
1153int MPI_Type_create_subarray(int, MPICH2_CONST int [], MPICH2_CONST int [], MPICH2_CONST int [],
1154                             int, MPI_Datatype, MPI_Datatype *);
1155int MPI_Type_get_extent(MPI_Datatype, MPI_Aint *, MPI_Aint *);
1156int MPI_Type_get_true_extent(MPI_Datatype, MPI_Aint *, MPI_Aint *);
1157int MPI_Unpack_external(MPICH2_CONST char *, MPICH2_CONST void *, MPI_Aint, MPI_Aint *, void *,
1158                        int, MPI_Datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
1159int MPI_Win_create_errhandler(MPI_Win_errhandler_function *, MPI_Errhandler *);
1160int MPI_Win_get_errhandler(MPI_Win, MPI_Errhandler *);
1161int MPI_Win_set_errhandler(MPI_Win, MPI_Errhandler);
1162
1163/* Fortran 90-related functions.  These routines are available only if
1164   Fortran 90 support is enabled
1165*/
1166int MPI_Type_create_f90_integer( int, MPI_Datatype * );
1167int MPI_Type_create_f90_real( int, int, MPI_Datatype * );
1168int MPI_Type_create_f90_complex( int, int, MPI_Datatype * );
1169
1170/* MPI-2.2 functions */
1171int MPI_Reduce_local(MPICH2_CONST void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1172int MPI_Op_commutative(MPI_Op op, int *commute);
1173int MPI_Reduce_scatter_block(MPICH2_CONST void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1174int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, MPICH2_CONST int [], MPICH2_CONST int [], int outdegree, MPICH2_CONST int [], MPICH2_CONST int [], MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
1175int MPI_Dist_graph_create(MPI_Comm comm_old, int n, MPICH2_CONST int [], MPICH2_CONST int [], MPICH2_CONST int [], MPICH2_CONST int [], MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
1176int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted);
1177int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int [], int [], int maxoutdegree, int [], int []);
1178
1179/* MPI-3 matched probe functionality, currently MPIX_ extensions */
1180int MPIX_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPIX_Message *message, MPI_Status *status);
1181int MPIX_Imrecv(void *buf, int count, MPI_Datatype datatype, MPIX_Message *message, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1182int MPIX_Mprobe(int source, int tag, MPI_Comm comm, MPIX_Message *message, MPI_Status *status);
1183int MPIX_Mrecv(void *buf, int count, MPI_Datatype datatype, MPIX_Message *message, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1184
1185/* MPI-3 nonblocking comm dup */
1186int MPIX_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request);
1187
1188/* MPI-3 nonblocking collectives, currently MPIX_ extensions */
1189int MPIX_Ibarrier(MPI_Comm comm, MPI_Request *request);
1190int MPIX_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1191int MPIX_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1192int MPIX_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1193int MPIX_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1194int MPIX_Iscatterv(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
1195int MPIX_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1196int MPIX_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1197int MPIX_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1198int MPIX_Ialltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
1199int MPIX_Ialltoallw(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPI_Comm comm, MPI_Request *request);
1200int MPIX_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1201int MPIX_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1202int MPIX_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1203int MPIX_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1204int MPIX_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1205int MPIX_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1206
1207/* MPI-3 neighborhood collectives */
1208int MPIX_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1209int MPIX_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1210int MPIX_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1211int MPIX_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
1212int MPIX_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request);
1213int MPIX_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1214int MPIX_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1215int MPIX_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1216int MPIX_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
1217int MPIX_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
1218
1219/* MPI-3 shared memory */
1220int MPIX_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm);
1221
1222/* MPI-3 noncollective communicator creation */
1223int MPIX_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm * newcomm);
1224
1225/* MPI-3 FT */
1226int MPIX_Comm_group_failed(MPI_Comm, MPI_Group *);
1227int MPIX_Comm_remote_group_failed(MPI_Comm, MPI_Group *);
1228int MPIX_Comm_reenable_anysource(MPI_Comm, MPI_Group *);
1229
1230/* RMA Mutexes extension declarations: */
1231struct mpixi_mutex_s;
1232typedef struct mpixi_mutex_s * MPIX_Mutex;
1233
1234int MPIX_Mutex_create(int count, MPI_Comm comm, MPIX_Mutex *hdl);
1235int MPIX_Mutex_free(MPIX_Mutex *hdl);
1236int MPIX_Mutex_lock(MPIX_Mutex hdl, int mutex, int proc);
1237int MPIX_Mutex_unlock(MPIX_Mutex hdl, int mutex, int proc);
1238
1239/* MPI-3 MPI_T interface, currently available as MPIX_T extensions */
1240
1241/* The MPI_T routines are available only in C bindings - tell tools that they
1242   can skip these prototypes */
1243/* Begin Skip Prototypes */
1244int MPIX_T_init_thread(int required, int *provided);
1245int MPIX_T_finalize(void);
1246int MPIX_T_enum_get_info(MPIX_T_enum enumtype, int num, char *name, int *name_len);
1247int MPIX_T_enum_get_item(MPIX_T_enum enumtype, int num, int *value, char *name, int *name_len);
1248int MPIX_T_cvar_get_num(int *num_cvar);
1249int MPIX_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity, MPI_Datatype *datatype, MPIX_T_enum *enumtype, char *desc, int *desc_len, int *bind, int *scope);
1250int MPIX_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPIX_T_cvar_handle *handle, int *count);
1251int MPIX_T_cvar_handle_free(MPIX_T_cvar_handle *handle);
1252int MPIX_T_cvar_read(MPIX_T_cvar_handle handle, void *buf);
1253int MPIX_T_cvar_write(MPIX_T_cvar_handle handle, void *buf);
1254int MPIX_T_pvar_get_num(int *num_pvar);
1255int MPIX_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class, MPI_Datatype *datatype, MPIX_T_enum *enumtype, char *desc, int *desc_len, int *bind, int *readonly, int *continuous, int *atomic);
1256int MPIX_T_pvar_session_create(MPIX_T_pvar_session *session);
1257int MPIX_T_pvar_session_free(MPIX_T_pvar_session *session);
1258int MPIX_T_pvar_handle_alloc(MPIX_T_pvar_session session, int pvar_index, void *obj_handle, MPIX_T_pvar_handle *handle, int *count);
1259int MPIX_T_pvar_handle_free(MPIX_T_pvar_session session, MPIX_T_pvar_handle *handle);
1260int MPIX_T_pvar_start(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle);
1261int MPIX_T_pvar_stop(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle);
1262int MPIX_T_pvar_read(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle, void *buf);
1263int MPIX_T_pvar_write(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle, void *buf);
1264int MPIX_T_pvar_reset(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle);
1265int MPIX_T_pvar_readreset(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle, void *buf);
1266int MPIX_T_category_get_num(int *num_cat);
1267int MPIX_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len, int *num_controlvars, int *num_pvars, int *num_categories);
1268int MPIX_T_category_get_cvars(int cat_index, int len, int indices[]);
1269int MPIX_T_category_get_pvars(int cat_index[], int len, int indices[]);
1270int MPIX_T_category_get_categories(int cat_index, int len, int indices[]);
1271int MPIX_T_category_changed(int *stamp);
1272/* End Skip Prototypes */
1273/* End Prototypes */
1274#endif /* MPICH_SUPPRESS_PROTOTYPES */
1275
1276
1277
1278/* Here are the bindings of the profiling routines */
1279#if !defined(MPI_BUILD_PROFILING)
1280int PMPI_Send(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1281int PMPI_Recv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1282int PMPI_Get_count(MPICH2_CONST MPI_Status *, MPI_Datatype, int *);
1283int PMPI_Bsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1284int PMPI_Ssend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1285int PMPI_Rsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1286int PMPI_Buffer_attach( void* buffer, int);
1287int PMPI_Buffer_detach( void* buffer, int *);
1288int PMPI_Isend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1289int PMPI_Ibsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1290int PMPI_Issend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1291int PMPI_Irsend(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1292int PMPI_Irecv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1293int PMPI_Wait(MPI_Request *, MPI_Status *);
1294int PMPI_Test(MPI_Request *, int *, MPI_Status *);
1295int PMPI_Request_free(MPI_Request *);
1296int PMPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
1297int PMPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
1298int PMPI_Waitall(int, MPI_Request *, MPI_Status *);
1299int PMPI_Testall(int, MPI_Request *, int *, MPI_Status *);
1300int PMPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
1301int PMPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
1302int PMPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
1303int PMPI_Probe(int, int, MPI_Comm, MPI_Status *);
1304int PMPI_Cancel(MPI_Request *);
1305int PMPI_Test_cancelled(MPICH2_CONST MPI_Status *, int *);
1306int PMPI_Send_init(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1307int PMPI_Bsend_init(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1308int PMPI_Ssend_init(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1309int PMPI_Rsend_init(MPICH2_CONST void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1310int PMPI_Recv_init(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1311int PMPI_Start(MPI_Request *);
1312int PMPI_Startall(int, MPI_Request *);
1313int PMPI_Sendrecv(MPICH2_CONST void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8);
1314int PMPI_Sendrecv_replace(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1315int PMPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
1316int PMPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
1317int PMPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
1318int PMPI_Type_indexed(int, MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype, MPI_Datatype *);
1319int PMPI_Type_hindexed(int, MPICH2_CONST int *, MPICH2_CONST MPI_Aint *, MPI_Datatype, MPI_Datatype *);
1320int PMPI_Type_struct(int, MPICH2_CONST int *, MPICH2_CONST MPI_Aint *, MPICH2_CONST MPI_Datatype *, MPI_Datatype *);
1321int PMPI_Address(MPICH2_CONST void*, MPI_Aint *);
1322int PMPI_Type_extent(MPI_Datatype, MPI_Aint *);
1323int PMPI_Type_size(MPI_Datatype, int *);
1324int PMPI_Type_lb(MPI_Datatype, MPI_Aint *);
1325int PMPI_Type_ub(MPI_Datatype, MPI_Aint *);
1326int PMPI_Type_commit(MPI_Datatype *);
1327int PMPI_Type_free(MPI_Datatype *);
1328int PMPI_Get_elements(MPICH2_CONST MPI_Status *, MPI_Datatype, int *);
1329int PMPI_Pack(MPICH2_CONST void*, int, MPI_Datatype, void *, int, int *,  MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1330int PMPI_Unpack(MPICH2_CONST void*, int, int *, void *, int, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1331int PMPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
1332int PMPI_Barrier(MPI_Comm );
1333int PMPI_Bcast(void* buffer, int, MPI_Datatype, int, MPI_Comm );
1334int PMPI_Gather(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1335int PMPI_Gatherv(MPICH2_CONST void* , int, MPI_Datatype, void*, MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1336int PMPI_Scatter(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1337int PMPI_Scatterv(MPICH2_CONST void* , MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
1338int PMPI_Allgather(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1339int PMPI_Allgatherv(MPICH2_CONST void* , int, MPI_Datatype, void*, MPICH2_CONST int *,
1340                    MPICH2_CONST int *, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1341int PMPI_Alltoall(MPICH2_CONST void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1342int PMPI_Alltoallv(MPICH2_CONST void* , MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype,
1343                   void*, MPICH2_CONST int *, MPICH2_CONST int *, MPI_Datatype, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
1344int PMPI_Reduce(MPICH2_CONST void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1345int PMPI_Op_create(MPI_User_function *, int, MPI_Op *);
1346int PMPI_Op_free( MPI_Op *);
1347int PMPI_Allreduce(MPICH2_CONST void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1348int PMPI_Reduce_scatter(MPICH2_CONST void* , void*, MPICH2_CONST int *, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1349int PMPI_Scan(MPICH2_CONST void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1350int PMPI_Group_size(MPI_Group, int *);
1351int PMPI_Group_rank(MPI_Group, int *);
1352int PMPI_Group_translate_ranks(MPI_Group, int, MPICH2_CONST int *, MPI_Group, int *);
1353int PMPI_Group_compare(MPI_Group, MPI_Group, int *);
1354int PMPIX_Comm_group_failed(MPI_Comm, MPI_Group *);
1355int PMPIX_Comm_reenable_anysource(MPI_Comm, MPI_Group *);
1356int PMPIX_Comm_remote_group_failed(MPI_Comm, MPI_Group *);
1357int PMPIX_Mutex_create(int count, MPI_Comm comm, MPIX_Mutex *hdl);
1358int PMPIX_Mutex_free(MPIX_Mutex *hdl);
1359int PMPIX_Mutex_lock(MPIX_Mutex hdl, int mutex, int proc);
1360int PMPIX_Mutex_unlock(MPIX_Mutex hdl, int mutex, int proc);
1361int PMPI_Comm_group(MPI_Comm, MPI_Group *);
1362int PMPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
1363int PMPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
1364int PMPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
1365int PMPI_Group_incl(MPI_Group, int, MPICH2_CONST int *, MPI_Group *);
1366int PMPI_Group_excl(MPI_Group, int, MPICH2_CONST int *, MPI_Group *);
1367int PMPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
1368int PMPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
1369int PMPI_Group_free(MPI_Group *);
1370int PMPI_Comm_size(MPI_Comm, int *);
1371int PMPI_Comm_rank(MPI_Comm, int *);
1372int PMPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
1373int PMPI_Comm_dup(MPI_Comm, MPI_Comm *);
1374int PMPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
1375int PMPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
1376int PMPI_Comm_free(MPI_Comm *);
1377int PMPI_Comm_test_inter(MPI_Comm, int *);
1378int PMPI_Comm_remote_size(MPI_Comm, int *);
1379int PMPI_Comm_remote_group(MPI_Comm, MPI_Group *);
1380int PMPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
1381int PMPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
1382int PMPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void*);
1383int PMPI_Keyval_free(int *);
1384int PMPI_Attr_put(MPI_Comm, int, void*);
1385int PMPI_Attr_get(MPI_Comm, int, void *, int *);
1386int PMPI_Attr_delete(MPI_Comm, int);
1387int PMPI_Topo_test(MPI_Comm, int *);
1388int PMPI_Cart_create(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int, MPI_Comm *);
1389int PMPI_Dims_create(int, int, int *);
1390int PMPI_Graph_create(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int, MPI_Comm *);
1391int PMPI_Graphdims_get(MPI_Comm, int *, int *);
1392int PMPI_Graph_get(MPI_Comm, int, int, int *, int *);
1393int PMPI_Cartdim_get(MPI_Comm, int *);
1394int PMPI_Cart_get(MPI_Comm, int, int *, int *, int *);
1395int PMPI_Cart_rank(MPI_Comm, MPICH2_CONST int *, int *);
1396int PMPI_Cart_coords(MPI_Comm, int, int, int *);
1397int PMPI_Graph_neighbors_count(MPI_Comm, int, int *);
1398int PMPI_Graph_neighbors(MPI_Comm, int, int, int *);
1399int PMPI_Cart_shift(MPI_Comm, int, int, int *, int *);
1400int PMPI_Cart_sub(MPI_Comm, MPICH2_CONST int *, MPI_Comm *);
1401int PMPI_Cart_map(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int *);
1402int PMPI_Graph_map(MPI_Comm, int, MPICH2_CONST int *, MPICH2_CONST int *, int *);
1403int PMPI_Get_processor_name(char *, int *);
1404int PMPI_Get_version(int *, int *);
1405int PMPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
1406int PMPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
1407int PMPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
1408int PMPI_Errhandler_free(MPI_Errhandler *);
1409int PMPI_Error_string(int, char *, int *);
1410int PMPI_Error_class(int, int *);
1411
1412/* Wtime done above */
1413int PMPI_Init(int *, char ***);
1414int PMPI_Finalize(void);
1415int PMPI_Initialized(int *);
1416int PMPI_Abort(MPI_Comm, int);
1417
1418int PMPI_Pcontrol(const int, ...);
1419
1420/* MPI-2 functions */
1421
1422/* Process Creation and Management */
1423int PMPI_Close_port(MPICH2_CONST char *);
1424int PMPI_Comm_accept(MPICH2_CONST char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
1425int PMPI_Comm_connect(MPICH2_CONST char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
1426int PMPI_Comm_disconnect(MPI_Comm *);
1427int PMPI_Comm_get_parent(MPI_Comm *);
1428int PMPI_Comm_join(int, MPI_Comm *);
1429int PMPI_Comm_spawn(MPICH2_CONST char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *,
1430                   int []);
1431int PMPI_Comm_spawn_multiple(int, char *[], char **[], MPICH2_CONST int [], MPICH2_CONST MPI_Info [], int,
1432			    MPI_Comm, MPI_Comm *, int []);
1433int PMPI_Lookup_name(MPICH2_CONST char *, MPI_Info, char *);
1434int PMPI_Open_port(MPI_Info, char *);
1435int PMPI_Publish_name(MPICH2_CONST char *, MPI_Info, MPICH2_CONST char *);
1436int PMPI_Unpublish_name(MPICH2_CONST char *, MPI_Info, MPICH2_CONST char *);
1437
1438/* One-Sided Communications */
1439int PMPI_Accumulate(MPICH2_CONST void *, int, MPI_Datatype, int, MPI_Aint, int,
1440		   MPI_Datatype,  MPI_Op, MPI_Win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1441int PMPI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
1442	    MPI_Win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1443int PMPI_Put(MPICH2_CONST void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
1444	    MPI_Win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1445int PMPI_Win_complete(MPI_Win);
1446int PMPI_Win_create(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
1447int PMPI_Win_fence(int, MPI_Win);
1448int PMPI_Win_free(MPI_Win *);
1449int PMPI_Win_get_group(MPI_Win, MPI_Group *);
1450int PMPI_Win_lock(int, int, int, MPI_Win);
1451int PMPI_Win_post(MPI_Group, int, MPI_Win);
1452int PMPI_Win_start(MPI_Group, int, MPI_Win);
1453int PMPI_Win_test(MPI_Win, int *);
1454int PMPI_Win_unlock(int, MPI_Win);
1455int PMPI_Win_wait(MPI_Win);
1456
1457/* MPI-3 One-Sided Communication Routines */
1458int PMPIX_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info,
1459                       MPI_Comm comm, void *baseptr, MPI_Win *win);
1460int PMPIX_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
1461                              void *baseptr, MPI_Win *win);
1462int PMPIX_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr);
1463int PMPIX_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win);
1464int PMPIX_Win_attach(MPI_Win win, void *base, MPI_Aint size);
1465int PMPIX_Win_detach(MPI_Win win, const void *base);
1466
1467int PMPIX_Get_accumulate(const void *origin_addr, int origin_count,
1468                         MPI_Datatype origin_datatype, void *result_addr, int result_count,
1469                         MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
1470                         int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win);
1471int PMPIX_Fetch_and_op(const void *origin_addr, void *result_addr,
1472                       MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
1473                       MPI_Op op, MPI_Win win);
1474int PMPIX_Compare_and_swap(const void *origin_addr, const void *compare_addr,
1475                           void *result_addr, MPI_Datatype datatype, int target_rank,
1476                           MPI_Aint target_disp, MPI_Win win);
1477int PMPIX_Rput(const void *origin_addr, int origin_count,
1478               MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
1479               int target_count, MPI_Datatype target_datatype, MPI_Win win,
1480               MPI_Request *request);
1481int PMPIX_Rget(void *origin_addr, int origin_count,
1482               MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
1483               int target_count, MPI_Datatype target_datatype, MPI_Win win,
1484               MPI_Request *request);
1485int PMPIX_Raccumulate(const void *origin_addr, int origin_count,
1486                      MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
1487                      int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
1488                      MPI_Request *request);
1489int PMPIX_Rget_accumulate(const void *origin_addr, int origin_count,
1490                          MPI_Datatype origin_datatype, void *result_addr, int result_count,
1491                          MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
1492                          int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
1493                          MPI_Request *request);
1494
1495int PMPIX_Win_lock_all(int assert, MPI_Win win);
1496int PMPIX_Win_unlock_all(MPI_Win win);
1497int PMPIX_Win_flush(int rank, MPI_Win win);
1498int PMPIX_Win_flush_all(MPI_Win win);
1499int PMPIX_Win_flush_local(int rank, MPI_Win win);
1500int PMPIX_Win_flush_local_all(MPI_Win win);
1501int PMPIX_Win_sync(MPI_Win win);
1502
1503/* Extended Collective Operations */
1504int PMPI_Alltoallw(MPICH2_CONST void *, MPICH2_CONST int [], MPICH2_CONST int [],
1505                   MPICH2_CONST MPI_Datatype [], void *, MPICH2_CONST int [],
1506                   MPICH2_CONST int [], MPICH2_CONST MPI_Datatype [], MPI_Comm);
1507int PMPI_Exscan(MPICH2_CONST void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1508
1509/* External Interfaces */
1510int PMPI_Add_error_class(int *);
1511int PMPI_Add_error_code(int, int *);
1512int PMPI_Add_error_string(int, MPICH2_CONST char *);
1513int PMPI_Comm_call_errhandler(MPI_Comm, int);
1514int PMPI_Comm_create_keyval(MPI_Comm_copy_attr_function *,
1515                           MPI_Comm_delete_attr_function *, int *, void *);
1516int PMPI_Comm_delete_attr(MPI_Comm, int);
1517int PMPI_Comm_free_keyval(int *);
1518int PMPI_Comm_get_attr(MPI_Comm, int, void *, int *);
1519int PMPI_Comm_get_name(MPI_Comm, char *, int *);
1520int PMPI_Comm_set_attr(MPI_Comm, int, void *);
1521int PMPI_Comm_set_name(MPI_Comm, MPICH2_CONST char *);
1522int PMPI_File_call_errhandler(MPI_File, int);
1523int PMPI_Grequest_complete(MPI_Request);
1524int PMPI_Grequest_start(MPI_Grequest_query_function *,
1525                       MPI_Grequest_free_function *,
1526                       MPI_Grequest_cancel_function *, void *, MPI_Request *);
1527int PMPI_Init_thread(int *, char ***, int, int *);
1528int PMPI_Is_thread_main(int *);
1529int PMPI_Query_thread(int *);
1530int PMPI_Status_set_cancelled(MPI_Status *, int);
1531int PMPI_Status_set_elements(MPI_Status *, MPI_Datatype, int);
1532int PMPI_Type_create_keyval(MPI_Type_copy_attr_function *,
1533                           MPI_Type_delete_attr_function *, int *, void *);
1534int PMPI_Type_delete_attr(MPI_Datatype, int);
1535int PMPI_Type_dup(MPI_Datatype, MPI_Datatype *);
1536int PMPI_Type_free_keyval(int *);
1537int PMPI_Type_get_attr(MPI_Datatype, int, void *, int *);
1538int PMPI_Type_get_contents(MPI_Datatype, int, int, int, int [], MPI_Aint [],
1539                          MPI_Datatype []);
1540int PMPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
1541int PMPI_Type_get_name(MPI_Datatype, char *, int *);
1542int PMPI_Type_set_attr(MPI_Datatype, int, void *);
1543int PMPI_Type_set_name(MPI_Datatype, MPICH2_CONST char *);
1544int PMPI_Type_match_size( int, int, MPI_Datatype *);
1545int PMPI_Win_call_errhandler(MPI_Win, int);
1546int PMPI_Win_create_keyval(MPI_Win_copy_attr_function *,
1547                         MPI_Win_delete_attr_function *, int *, void *);
1548int PMPI_Win_delete_attr(MPI_Win, int);
1549int PMPI_Win_free_keyval(int *);
1550int PMPI_Win_get_attr(MPI_Win, int, void *, int *);
1551int PMPI_Win_get_name(MPI_Win, char *, int *);
1552int PMPI_Win_set_attr(MPI_Win, int, void *);
1553int PMPI_Win_set_name(MPI_Win, MPICH2_CONST char *);
1554
1555/* Fortran 90-related functions.  These routines are available only if
1556   Fortran 90 support is enabled
1557*/
1558int PMPI_Type_create_f90_integer( int, MPI_Datatype * );
1559int PMPI_Type_create_f90_real( int, int, MPI_Datatype * );
1560int PMPI_Type_create_f90_complex( int, int, MPI_Datatype * );
1561
1562/* Miscellany */
1563int PMPI_Alloc_mem(MPI_Aint, MPI_Info info, void *baseptr);
1564int PMPI_Comm_create_errhandler(MPI_Comm_errhandler_function *, MPI_Errhandler *);
1565int PMPI_Comm_get_errhandler(MPI_Comm, MPI_Errhandler *);
1566int PMPI_Comm_set_errhandler(MPI_Comm, MPI_Errhandler);
1567int PMPI_File_create_errhandler(MPI_File_errhandler_function *, MPI_Errhandler *);
1568int PMPI_File_get_errhandler(MPI_File, MPI_Errhandler *);
1569int PMPI_File_set_errhandler(MPI_File, MPI_Errhandler);
1570int PMPI_Finalized(int *);
1571int PMPI_Free_mem(void *);
1572int PMPI_Get_address(MPICH2_CONST void *, MPI_Aint *);
1573int PMPI_Info_create(MPI_Info *);
1574int PMPI_Info_delete(MPI_Info, MPICH2_CONST char *);
1575int PMPI_Info_dup(MPI_Info, MPI_Info *);
1576int PMPI_Info_free(MPI_Info *info);
1577int PMPI_Info_get(MPI_Info, MPICH2_CONST char *, int, char *, int *);
1578int PMPI_Info_get_nkeys(MPI_Info, int *);
1579int PMPI_Info_get_nthkey(MPI_Info, int, char *);
1580int PMPI_Info_get_valuelen(MPI_Info, MPICH2_CONST char *, int *, int *);
1581int PMPI_Info_set(MPI_Info, MPICH2_CONST char *, MPICH2_CONST char *);
1582int PMPI_Pack_external(MPICH2_CONST char *, MPICH2_CONST void *, int, MPI_Datatype, void *,
1583                       MPI_Aint, MPI_Aint *) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1584int PMPI_Pack_external_size(MPICH2_CONST char *, int, MPI_Datatype, MPI_Aint *);
1585int PMPI_Request_get_status(MPI_Request, int *, MPI_Status *);
1586int PMPI_Status_c2f(MPICH2_CONST MPI_Status *, MPI_Fint *);
1587int PMPI_Status_f2c(MPICH2_CONST MPI_Fint *, MPI_Status *);
1588int PMPI_Type_create_darray(int, int, int, MPICH2_CONST int [], MPICH2_CONST int [],
1589                            MPICH2_CONST int [], MPICH2_CONST int [], int,
1590                           MPI_Datatype, MPI_Datatype *);
1591int PMPI_Type_create_hindexed(int, MPICH2_CONST int [], MPICH2_CONST MPI_Aint [], MPI_Datatype,
1592                             MPI_Datatype *);
1593int PMPI_Type_create_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
1594int PMPI_Type_create_indexed_block(int, int, MPICH2_CONST int [], MPI_Datatype,
1595                                  MPI_Datatype *);
1596int PMPIX_Type_create_hindexed_block(int, int, const MPI_Aint [], MPI_Datatype, MPI_Datatype *);
1597int PMPI_Type_create_resized(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *);
1598int PMPI_Type_create_struct(int, MPICH2_CONST int [], MPICH2_CONST MPI_Aint [],
1599                            MPICH2_CONST MPI_Datatype [], MPI_Datatype *);
1600int PMPI_Type_create_subarray(int, MPICH2_CONST int [], MPICH2_CONST int [], MPICH2_CONST int [],
1601                              int, MPI_Datatype, MPI_Datatype *);
1602int PMPI_Type_get_extent(MPI_Datatype, MPI_Aint *, MPI_Aint *);
1603int PMPI_Type_get_true_extent(MPI_Datatype, MPI_Aint *, MPI_Aint *);
1604int PMPI_Unpack_external(MPICH2_CONST char *, MPICH2_CONST void *, MPI_Aint, MPI_Aint *, void *,
1605                         int, MPI_Datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
1606int PMPI_Win_create_errhandler(MPI_Win_errhandler_function *, MPI_Errhandler *);
1607int PMPI_Win_get_errhandler(MPI_Win, MPI_Errhandler *);
1608int PMPI_Win_set_errhandler(MPI_Win, MPI_Errhandler);
1609int PMPI_Reduce_local(MPICH2_CONST void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1610int PMPI_Op_commutative(MPI_Op op, int *commute);
1611int PMPI_Reduce_scatter_block(MPICH2_CONST void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1612int PMPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, MPICH2_CONST int [], MPICH2_CONST int [], int outdegree, MPICH2_CONST int [], MPICH2_CONST int [], MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
1613int PMPI_Dist_graph_create(MPI_Comm comm_old, int n, MPICH2_CONST int [], MPICH2_CONST int [], MPICH2_CONST int [], MPICH2_CONST int [], MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
1614int PMPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted);
1615int PMPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int [], int [], int maxoutdegree, int [], int []);
1616int PMPIX_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request);
1617int PMPIX_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPIX_Message *message, MPI_Status *status);
1618int PMPIX_Imrecv(void *buf, int count, MPI_Datatype datatype, MPIX_Message *message, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1619int PMPIX_Mprobe(int source, int tag, MPI_Comm comm, MPIX_Message *message, MPI_Status *status);
1620int PMPIX_Mrecv(void *buf, int count, MPI_Datatype datatype, MPIX_Message *message, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1621int PMPIX_Ibarrier(MPI_Comm comm, MPI_Request *request);
1622int PMPIX_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
1623int PMPIX_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1624int PMPIX_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1625int PMPIX_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1626int PMPIX_Iscatterv(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
1627int PMPIX_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1628int PMPIX_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1629int PMPIX_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1630int PMPIX_Ialltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
1631int PMPIX_Ialltoallw(const void *sendbuf, const int *sendcounts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcounts, const int *rdispls, const MPI_Datatype *recvtypes, MPI_Comm comm, MPI_Request *request);
1632int PMPIX_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1633int PMPIX_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1634int PMPIX_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1635int PMPIX_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1636int PMPIX_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1637int PMPIX_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
1638int PMPIX_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1639int PMPIX_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1640int PMPIX_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1641int PMPIX_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
1642int PMPIX_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request);
1643int PMPIX_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1644int PMPIX_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
1645int PMPIX_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
1646int PMPIX_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
1647int PMPIX_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
1648int PMPIX_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm);
1649int PMPIX_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm * newcomm);
1650int PMPIX_T_init_thread(int required, int *provided);
1651int PMPIX_T_finalize(void);
1652int PMPIX_T_enum_get_info(MPIX_T_enum enumtype, int num, char *name, int *name_len);
1653int PMPIX_T_enum_get_item(MPIX_T_enum enumtype, int num, int *value, char *name, int *name_len);
1654int PMPIX_T_cvar_get_num(int *num_cvar);
1655int PMPIX_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity, MPI_Datatype *datatype, MPIX_T_enum *enumtype, char *desc, int *desc_len, int *bind, int *scope);
1656int PMPIX_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPIX_T_cvar_handle *handle, int *count);
1657int PMPIX_T_cvar_handle_free(MPIX_T_cvar_handle *handle);
1658int PMPIX_T_cvar_read(MPIX_T_cvar_handle handle, void *buf);
1659int PMPIX_T_cvar_write(MPIX_T_cvar_handle handle, void *buf);
1660int PMPIX_T_pvar_get_num(int *num_pvar);
1661int PMPIX_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class, MPI_Datatype *datatype, MPIX_T_enum *enumtype, char *desc, int *desc_len, int *bind, int *readonly, int *continuous, int *atomic);
1662int PMPIX_T_pvar_session_create(MPIX_T_pvar_session *session);
1663int PMPIX_T_pvar_session_free(MPIX_T_pvar_session *session);
1664int PMPIX_T_pvar_handle_alloc(MPIX_T_pvar_session session, int pvar_index, void *obj_handle, MPIX_T_pvar_handle *handle, int *count);
1665int PMPIX_T_pvar_handle_free(MPIX_T_pvar_session session, MPIX_T_pvar_handle *handle);
1666int PMPIX_T_pvar_start(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle);
1667int PMPIX_T_pvar_stop(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle);
1668int PMPIX_T_pvar_read(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle, void *buf);
1669int PMPIX_T_pvar_write(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle, void *buf);
1670int PMPIX_T_pvar_reset(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle);
1671int PMPIX_T_pvar_readreset(MPIX_T_pvar_session session, MPIX_T_pvar_handle handle, void *buf);
1672int PMPIX_T_category_get_num(int *num_cat);
1673int PMPIX_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len, int *num_controlvars, int *num_pvars, int *num_categories);
1674int PMPIX_T_category_get_cvars(int cat_index, int len, int indices[]);
1675int PMPIX_T_category_get_pvars(int cat_index[], int len, int indices[]);
1676int PMPIX_T_category_get_categories(int cat_index, int len, int indices[]);
1677int PMPIX_T_category_changed(int *stamp);
1678#endif  /* MPI_BUILD_PROFILING */
1679/* End of MPI bindings */
1680
1681/* feature advertisement */
1682#define MPIIMPL_ADVERTISES_FEATURES 1
1683#define MPIIMPL_HAVE_MPI_INFO 1
1684#define MPIIMPL_HAVE_MPI_COMBINER_DARRAY 1
1685#define MPIIMPL_HAVE_MPI_TYPE_CREATE_DARRAY 1
1686#define MPIIMPL_HAVE_MPI_COMBINER_SUBARRAY 1
1687#define MPIIMPL_HAVE_MPI_TYPE_CREATE_DARRAY 1
1688#define MPIIMPL_HAVE_MPI_COMBINER_DUP 1
1689#define MPIIMPL_HAVE_MPI_GREQUEST 1
1690#define MPIIMPL_HAVE_STATUS_SET_BYTES 1
1691#define MPIIMPL_HAVE_STATUS_SET_INFO 1
1692
1693@HAVE_ROMIO@
1694
1695#if defined(__cplusplus)
1696}
1697/* Add the C++ bindings */
1698/*
1699   If MPICH_SKIP_MPICXX is defined, the mpicxx.h file will *not* be included.
1700   This is necessary, for example, when building the C++ interfaces.  It
1701   can also be used when you want to use a C++ compiler to compile C code,
1702   and do not want to load the C++ bindings.  These definitions can
1703   be made by the C++ compilation script
1704 */
1705#if !defined(MPICH_SKIP_MPICXX)
1706/* mpicxx.h contains the MPI C++ binding.  In the mpi.h.in file, this
1707   include is in an autoconf variable in case the compiler is a C++
1708   compiler but MPI was built without the C++ bindings */
1709@INCLUDE_MPICXX_H@
1710#endif
1711#endif
1712
1713/* BEGIN: non-standard but public extensions to MPI */
1714/* Generalized requests extensions as proposed in "Extending the MPI-2
1715 * Generalized Request Interface" */
1716typedef int (MPIX_Grequest_poll_function)(void *, MPI_Status *);
1717typedef int (MPIX_Grequest_wait_function)(int, void **, double, MPI_Status *);
1718
1719typedef int MPIX_Grequest_class;
1720int MPIX_Grequest_class_create(MPI_Grequest_query_function *,
1721                       MPI_Grequest_free_function *,
1722                       MPI_Grequest_cancel_function *,
1723		       MPIX_Grequest_poll_function *,
1724		       MPIX_Grequest_wait_function *,
1725		       MPIX_Grequest_class *);
1726
1727int MPIX_Grequest_class_allocate(MPIX_Grequest_class,
1728		       void *,
1729		       MPI_Request *);
1730
1731int MPIX_Grequest_start(MPI_Grequest_query_function *,
1732                       MPI_Grequest_free_function *,
1733                       MPI_Grequest_cancel_function *,
1734		       MPIX_Grequest_poll_function *,
1735		       MPIX_Grequest_wait_function *, void *, MPI_Request *);
1736#if !defined(MPI_BUILD_PROFILING)
1737int PMPIX_Grequest_class_create(MPI_Grequest_query_function *,
1738                       MPI_Grequest_free_function *,
1739                       MPI_Grequest_cancel_function *,
1740		       MPIX_Grequest_poll_function *,
1741		       MPIX_Grequest_wait_function *,
1742		       MPIX_Grequest_class *);
1743
1744int PMPIX_Grequest_class_allocate(MPIX_Grequest_class,
1745		       void *,
1746		       MPI_Request *);
1747int PMPIX_Grequest_start(MPI_Grequest_query_function *,
1748                       MPI_Grequest_free_function *,
1749                       MPI_Grequest_cancel_function *,
1750		       MPIX_Grequest_poll_function *,
1751		       MPIX_Grequest_wait_function *, void *, MPI_Request *);
1752#endif
1753
1754/* END: non-standard but public extensions to MPI */
1755
1756#endif
1757