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