1/* -*- Mode: C; c-basic-offset:4 ; -*- */ 2/* 3 * 4 * Copyright (C) 1997 University of Chicago. 5 * See COPYRIGHT notice in top-level directory. 6 */ 7 8/* user include file for MPI-IO programs */ 9 10#ifndef MPIO_INCLUDE 11#define MPIO_INCLUDE 12 13#include "mpi.h" 14/* Open MPI: We need to rename almost all of these functions, as well 15 a the types to be names that conform to the prefix rule */ 16#include "io_romio_conv.h" 17 18#define MPIIMPL_HAVE_MPI_COMBINER_DARRAY 1 19#define MPIIMPL_HAVE_MPI_TYPE_CREATE_DARRAY 1 20#define MPIIMPL_HAVE_MPI_COMBINER_SUBARRAY 1 21#define MPIIMPL_HAVE_MPI_TYPE_CREATE_DARRAY 1 22#define MPIIMPL_HAVE_MPI_COMBINER_DUP 1 23#define MPICH_ATTR_POINTER_WITH_TYPE_TAG(x,y) 24 25#if defined(__cplusplus) 26extern "C" { 27#endif 28 29#define ROMIO_VERSION 126 /* version 1.2.6 */ 30 31/* define MPI-IO datatypes and constants */ 32 33#ifndef MPI_FILE_DEFINED 34typedef struct ADIOI_FileD *MPI_File; 35#endif 36 37@DEFINE_HAVE_MPI_GREQUEST@ 38#ifndef HAVE_MPI_GREQUEST 39typedef struct ADIOI_RequestD *MPIO_Request; 40#else 41#define MPIO_Request MPI_Request 42#define MPIO_USES_MPI_REQUEST 43/* Also rename the MPIO routines to get the MPI versions */ 44#define MPIO_Wait MPI_Wait 45#define MPIO_Test MPI_Test 46#define PMPIO_Wait PMPI_Wait 47#define PMPIO_Test PMPI_Test 48#endif 49#define MPIO_REQUEST_DEFINED 50 51@DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS@ 52 53#ifndef HAVE_MPI_OFFSET 54@DEFINE_MPI_OFFSET@ 55/* If we needed to define MPI_Offset, then we also need to make 56 this definition. */ 57#ifndef HAVE_MPI_DATAREP_FUNCTIONS 58#define HAVE_MPI_DATAREP_FUNCTIONS 59typedef int (MPI_Datarep_conversion_function)(void *, MPI_Datatype, int, 60 void *, MPI_Offset, void *); 61typedef int (MPI_Datarep_extent_function)(MPI_Datatype datatype, MPI_Aint *, 62 void *); 63#endif 64#endif 65 66#ifndef NEEDS_MPI_FINT 67@NEEDS_MPI_FINT@ 68#endif 69#ifdef NEEDS_MPI_FINT 70typedef int MPI_Fint; 71#endif 72 73#ifndef HAVE_MPI_INFO 74@HAVE_MPI_INFO@ 75#endif 76#ifndef HAVE_MPI_INFO 77 typedef struct MPIR_Info *MPI_Info; 78# define MPI_INFO_NULL ((MPI_Info) 0) 79# define MPI_MAX_INFO_KEY 255 80# define MPI_MAX_INFO_VAL 1024 81#endif 82 83#define MPI_MODE_RDONLY 2 /* ADIO_RDONLY */ 84#define MPI_MODE_RDWR 8 /* ADIO_RDWR */ 85#define MPI_MODE_WRONLY 4 /* ADIO_WRONLY */ 86#define MPI_MODE_CREATE 1 /* ADIO_CREATE */ 87#define MPI_MODE_EXCL 64 /* ADIO_EXCL */ 88#define MPI_MODE_DELETE_ON_CLOSE 16 /* ADIO_DELETE_ON_CLOSE */ 89#define MPI_MODE_UNIQUE_OPEN 32 /* ADIO_UNIQUE_OPEN */ 90#define MPI_MODE_APPEND 128 /* ADIO_APPEND */ 91#define MPI_MODE_SEQUENTIAL 256 /* ADIO_SEQUENTIAL */ 92 93#define MPI_DISPLACEMENT_CURRENT -54278278 94 95#ifndef MPICH 96/* FIXME: Make sure that we get a consistent definition of MPI_FILE_NULL 97 in MPICH */ 98/* MPICH defines null object handles differently */ 99#define MPI_FILE_NULL ((MPI_File) 0) 100#endif 101#define MPIO_REQUEST_NULL ((MPIO_Request) 0) 102 103#define MPI_SEEK_SET 600 104#define MPI_SEEK_CUR 602 105#define MPI_SEEK_END 604 106 107/* Open MPI: don't define MPI_MAX_DATAREP_STRING here; it's defined in 108 OMPI's mpi.h. */ 109#ifndef OPEN_MPI 110#define MPI_MAX_DATAREP_STRING 128 111#endif 112 113#ifndef HAVE_MPI_DARRAY_SUBARRAY 114@HAVE_MPI_DARRAY_SUBARRAY@ 115#endif 116#ifndef HAVE_MPI_DARRAY_SUBARRAY 117# define MPI_ORDER_C 56 118# define MPI_ORDER_FORTRAN 57 119# define MPI_DISTRIBUTE_BLOCK 121 120# define MPI_DISTRIBUTE_CYCLIC 122 121# define MPI_DISTRIBUTE_NONE 123 122# define MPI_DISTRIBUTE_DFLT_DARG -49767 123#endif 124 125 126/* MPI-IO function prototypes */ 127 128/* The compiler must support ANSI C style prototypes, otherwise 129 long long constants (e.g. 0) may get passed as ints. */ 130 131#ifndef HAVE_PRAGMA_HP_SEC_DEF 132 133/* Section 9.2 */ 134/* Begin Prototypes */ 135int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh); 136int MPI_File_close(MPI_File *fh); 137int MPI_File_delete(const char *filename, MPI_Info info); 138int MPI_File_set_size(MPI_File fh, MPI_Offset size); 139int MPI_File_preallocate(MPI_File fh, MPI_Offset size); 140int MPI_File_get_size(MPI_File fh, MPI_Offset *size); 141int MPI_File_get_group(MPI_File fh, MPI_Group *group); 142int MPI_File_get_amode(MPI_File fh, int *amode); 143int MPI_File_set_info(MPI_File fh, MPI_Info info); 144int MPI_File_get_info(MPI_File fh, MPI_Info *info_used); 145 146/* Section 9.3 */ 147int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, 148 const char *datarep, MPI_Info info); 149int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, 150 char *datarep); 151 152/* Section 9.4.2 */ 153int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, 154 MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 155int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count, 156 MPI_Datatype datatype, MPI_Status *status) 157 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 158int MPI_File_write_at(MPI_File fh, MPI_Offset offset, const void * buf, int count, 159 MPI_Datatype datatype, MPI_Status *status) 160 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 161int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count, 162 MPI_Datatype datatype, MPI_Status *status) 163 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 164 165/* nonblocking calls currently use MPIO_Request, because generalized 166 requests not yet implemented. For the same reason, MPIO_Test and 167 MPIO_Wait are used to test and wait on nonblocking I/O requests */ 168int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, 169 MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 170int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, const void *buf, int count, 171 MPI_Datatype datatype, MPIO_Request *request) 172 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 173 174/* Section 9.4.3 */ 175int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) 176 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 177int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) 178 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 179int MPI_File_write(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 180 MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 181int MPI_File_write_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 182 MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 183 184/* nonblocking calls currently use MPIO_Request, because generalized 185 requests not yet implemented. For the same reason, MPIO_Test and 186 MPIO_Wait are used to test and wait on nonblocking I/O requests */ 187 188int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request) 189 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 190int MPI_File_iwrite(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 191 MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 192 193int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence); 194int MPI_File_get_position(MPI_File fh, MPI_Offset *offset); 195int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp); 196 197/* Section 9.4.4 */ 198int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 199 MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 200int MPI_File_write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 201 MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 202int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 203 MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 204int MPI_File_iwrite_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 205 MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 206int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 207 MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 208int MPI_File_write_ordered(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 209 MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 210int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence); 211int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset); 212 213/* Section 9.4.5 */ 214int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, 215 MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 216int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status); 217int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf, int count, 218 MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 219int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status); 220int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype) 221 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 222int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status); 223int MPI_File_write_all_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype) 224 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 225int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status); 226int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype) 227 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 228int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status); 229int MPI_File_write_ordered_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype) 230 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 231int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status); 232 233/* Section 9.5.1 */ 234int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent); 235 236/* Section 9.5.3 */ 237int MPI_Register_datarep(const char *datarep, MPI_Datarep_conversion_function *read_conversion_fn, 238 MPI_Datarep_conversion_function *write_conversion_fn, 239 MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state); 240 241/* Section 9.6.1 */ 242int MPI_File_set_atomicity(MPI_File fh, int flag); 243int MPI_File_get_atomicity(MPI_File fh, int *flag); 244int MPI_File_sync(MPI_File fh); 245 246/* Section 4.13.3 */ 247#ifndef MPICH 248/* MPICH provides these definitions */ 249int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler); 250int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler); 251#endif 252 253/* For MPI 3.1 */ 254int MPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, 255 MPI_Datatype datatype, MPI_Request *request) 256 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 257int MPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count, 258 MPI_Datatype datatype, MPI_Request *request) 259 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 260int MPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 261 MPI_Request *request) 262 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 263int MPI_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 264 MPI_Request *request) 265 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 266/* End Prototypes */ 267 268#ifndef HAVE_MPI_DARRAY_SUBARRAY 269/* Section 4.14.4 */ 270int MPI_Type_create_subarray(int ndims, const int array_of_sizes[], const int array_of_subsizes[], 271 const int array_of_starts[], int order, MPI_Datatype oldtype, 272 MPI_Datatype *newtype); 273 274/* Section 4.14.5 */ 275int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[], 276 const int array_of_distribs[], const int array_of_dargs[], 277 const int array_of_psizes, int order, MPI_Datatype oldtype, 278 MPI_Datatype *newtype); 279#endif 280 281/* The globus2 device has to rename MPI_ symbols in order to use the vendor 282 MPI as one of its transport mechanisms. Therefore, the following undefines 283 should only happen if MPICH_RENAMING_MPI_FUNCS is not defined. */ 284/* Section 4.12.4 */ 285#if !defined(MPICH_RENAMING_MPI_FUNCS) 286#ifdef MPI_File_f2c 287#undef MPI_File_f2c 288#endif 289#ifdef MPI_File_c2f 290#undef MPI_File_c2f 291#endif 292#endif 293/* above needed for some versions of mpi.h in MPICH!! */ 294/* Open MPI: I can't seem to make these #define properly. Oh well -- 295 we don't need them anyway :-( */ 296#if 0 297MPI_File MPI_File_f2c(MPI_Fint file); 298MPI_Fint MPI_File_c2f(MPI_File file); 299#endif 300 301#ifndef HAVE_MPI_GREQUEST 302/* The following functions are required if generalized requests are not 303 available, because in that case, an MPIO_Request object 304 is currently used for nonblocking I/O. */ 305int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status); 306int MPIO_Wait(MPIO_Request *request, MPI_Status *status); 307int MPIO_Testall(int count, MPIO_Request array_of_requests[], int *flag, 308 MPI_Status array_of_statuses[]); 309int MPIO_Waitall(int count, MPIO_Request array_of_requests[], MPI_Status array_of_statuses[]); 310int MPIO_Testany(int count, MPIO_Request array_of_requests[], int *indx, int *flag, 311 MPI_Status *status); 312int MPIO_Waitany(int count, MPIO_Request array_of_requests[], int *indx, MPI_Status *status); 313int MPIO_Waitsome(int incount, MPIO_Request array_of_requests[], int *outcount, 314 int array_of_indices[], MPI_Status array_of_statuses[]); 315int MPIO_Testsome(int incount, MPIO_Request array_of_requests[], int *outcount, 316 int array_of_indices[], MPI_Status array_of_statuses[]); 317 318MPI_Fint MPIO_Request_c2f(MPIO_Request request); 319MPIO_Request MPIO_Request_f2c(MPI_Fint request); 320#endif /* HAVE_MPI_GREQUEST */ 321 322/* info functions if not defined in the MPI implementation */ 323#ifndef HAVE_MPI_INFO 324 325int MPI_Info_create(MPI_Info *info); 326int MPI_Info_set(MPI_Info info, const char *key, const char *value); 327int MPI_Info_delete(MPI_Info info, const char *key); 328int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag); 329int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag); 330int MPI_Info_get_nkeys(MPI_Info info, int *nkeys); 331int MPI_Info_get_nthkey(MPI_Info info, int n, char *key); 332int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo); 333int MPI_Info_free(MPI_Info *info); 334 335/* The globus2 device has to rename MPI_ symbols in order to use the vendor 336 MPI as one of its transport mechanisms. Therefore, the following undefines 337 should only happen if MPICH_RENAMING_MPI_FUNCS is not defined. */ 338#if !defined(MPICH_RENAMING_MPI_FUNCS) 339#ifdef MPI_Info_f2c 340#undef MPI_Info_f2c 341#endif 342#ifdef MPI_Info_c2f 343#undef MPI_Info_c2f 344#endif 345#endif 346/* above needed for some versions of mpi.h in MPICH!! */ 347/* Open MPI: we don't need these in ROMIO */ 348#if 0 349MPI_Fint MPI_Info_c2f(MPI_Info info); 350MPI_Info MPI_Info_f2c(MPI_Fint info); 351#endif 352#endif 353 354#endif /* HAVE_PRAGMA_HP_SEC_DEF */ 355 356 357/**************** BINDINGS FOR THE PROFILING INTERFACE ***************/ 358 359/* Open MPI: We don't want any of the profiling layer */ 360#if 0 361 362 363/* Section 9.2 */ 364int PMPI_File_open(MPI_Comm, const char *, int, MPI_Info, MPI_File *); 365int PMPI_File_close(MPI_File *); 366int PMPI_File_delete(const char *, MPI_Info); 367int PMPI_File_set_size(MPI_File, MPI_Offset); 368int PMPI_File_preallocate(MPI_File, MPI_Offset); 369int PMPI_File_get_size(MPI_File, MPI_Offset *); 370int PMPI_File_get_group(MPI_File, MPI_Group *); 371int PMPI_File_get_amode(MPI_File, int *); 372int PMPI_File_set_info(MPI_File, MPI_Info); 373int PMPI_File_get_info(MPI_File, MPI_Info *); 374 375/* Section 9.3 */ 376int PMPI_File_set_view(MPI_File, MPI_Offset, 377 MPI_Datatype, MPI_Datatype, const char *, MPI_Info); 378int PMPI_File_get_view(MPI_File, MPI_Offset *, 379 MPI_Datatype *, MPI_Datatype *, char *); 380 381/* Section 9.4.2 */ 382int PMPI_File_read_at(MPI_File, MPI_Offset, void *, 383 int, MPI_Datatype, MPI_Status *) 384 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 385int PMPI_File_read_at_all(MPI_File, MPI_Offset, void *, 386 int, MPI_Datatype, MPI_Status *) 387 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 388int PMPI_File_write_at(MPI_File, MPI_Offset, const void *, 389 int, MPI_Datatype, MPI_Status *) 390 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 391int PMPI_File_write_at_all(MPI_File, MPI_Offset, const void *, 392 int, MPI_Datatype, MPI_Status *) 393 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 394 395/* nonblocking calls currently use MPIO_Request, because generalized 396 requests not yet implemented. For the same reason, MPIO_Test and 397 MPIO_Wait are used to test and wait on nonblocking I/O requests */ 398 399int PMPI_File_iread_at(MPI_File, MPI_Offset, void *, 400 int, MPI_Datatype, MPIO_Request *) 401 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 402int PMPI_File_iwrite_at(MPI_File, MPI_Offset, const void *, 403 int, MPI_Datatype, MPIO_Request *) 404 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 405 406/* Section 9.4.3 */ 407int PMPI_File_read(MPI_File, void *, int, MPI_Datatype, MPI_Status *) 408 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 409int PMPI_File_read_all(MPI_File, void *, int, MPI_Datatype, MPI_Status *) 410 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 411int PMPI_File_write(MPI_File, const void *, int, MPI_Datatype, MPI_Status *) 412 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 413int PMPI_File_write_all(MPI_File, const void *, int, MPI_Datatype, MPI_Status *) 414 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 415 416/* nonblocking calls currently use MPIO_Request, because generalized 417 requests not yet implemented. For the same reason, MPIO_Test and 418 MPIO_Wait are used to test and wait on nonblocking I/O requests */ 419 420int PMPI_File_iread(MPI_File, void *, int, MPI_Datatype, MPIO_Request *) 421 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 422int PMPI_File_iwrite(MPI_File, const void *, int, MPI_Datatype, MPIO_Request *) 423 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 424 425int PMPI_File_seek(MPI_File, MPI_Offset, int); 426int PMPI_File_get_position(MPI_File, MPI_Offset *); 427int PMPI_File_get_byte_offset(MPI_File, MPI_Offset, MPI_Offset *); 428 429/* Section 9.4.4 */ 430int PMPI_File_read_shared(MPI_File, void *, int, MPI_Datatype, MPI_Status *) 431 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 432int PMPI_File_write_shared(MPI_File, const void *, int, MPI_Datatype, MPI_Status *) 433 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 434int PMPI_File_iread_shared(MPI_File, void *, int, 435 MPI_Datatype, MPIO_Request *) 436 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 437int PMPI_File_iwrite_shared(MPI_File, const void *, int, 438 MPI_Datatype, MPIO_Request *) 439 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 440int PMPI_File_read_ordered(MPI_File, void *, int, MPI_Datatype, MPI_Status *) 441 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 442int PMPI_File_write_ordered(MPI_File, const void *, int, MPI_Datatype, MPI_Status *) 443 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 444int PMPI_File_seek_shared(MPI_File, MPI_Offset, int); 445int PMPI_File_get_position_shared(MPI_File, MPI_Offset *); 446 447/* Section 9.4.5 */ 448int PMPI_File_read_at_all_begin(MPI_File, MPI_Offset, void *, 449 int, MPI_Datatype) 450 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 451int PMPI_File_read_at_all_end(MPI_File, void *, MPI_Status *); 452int PMPI_File_write_at_all_begin(MPI_File, MPI_Offset, const void *, 453 int, MPI_Datatype) 454 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 455int PMPI_File_write_at_all_end(MPI_File, const void *, MPI_Status *); 456int PMPI_File_read_all_begin(MPI_File, void *, int, MPI_Datatype) 457 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 458int PMPI_File_read_all_end(MPI_File, void *, MPI_Status *); 459int PMPI_File_write_all_begin(MPI_File, const void *, int, MPI_Datatype) 460 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 461int PMPI_File_write_all_end(MPI_File, const void *, MPI_Status *); 462int PMPI_File_read_ordered_begin(MPI_File, void *, int, MPI_Datatype) 463 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 464int PMPI_File_read_ordered_end(MPI_File, void *, MPI_Status *); 465int PMPI_File_write_ordered_begin(MPI_File, const void *, int, MPI_Datatype) 466 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 467int PMPI_File_write_ordered_end(MPI_File, const void *, MPI_Status *); 468 469/* Section 9.5.1 */ 470int PMPI_File_get_type_extent(MPI_File, MPI_Datatype, MPI_Aint *); 471 472/* Section 9.5.3 */ 473int PMPI_Register_datarep(const char *, 474 MPI_Datarep_conversion_function *, 475 MPI_Datarep_conversion_function *, 476 MPI_Datarep_extent_function *, 477 void *); 478 479/* Section 9.6.1 */ 480int PMPI_File_set_atomicity(MPI_File, int); 481int PMPI_File_get_atomicity(MPI_File, int *); 482int PMPI_File_sync(MPI_File); 483 484/* Section 4.13.3 */ 485#ifndef MPICH 486/* MPICH provides these definitions */ 487int PMPI_File_set_errhandler( MPI_File, MPI_Errhandler ); 488int PMPI_File_get_errhandler( MPI_File, MPI_Errhandler * ); 489#endif 490 491/* For MPI 3.1 */ 492int PMPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, 493 MPI_Datatype datatype, MPI_Request *request) 494 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 495int PMPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count, 496 MPI_Datatype datatype, MPI_Request *request) 497 MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5); 498int PMPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 499 MPI_Request *request) 500 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 501int PMPI_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, 502 MPI_Request *request) 503 MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4); 504 505#ifndef HAVE_MPI_DARRAY_SUBARRAY 506/* Section 4.14.4 */ 507int PMPI_Type_create_subarray(int, int *, int *, int *, int, 508 MPI_Datatype, MPI_Datatype *); 509 510/* Section 4.14.5 */ 511int PMPI_Type_create_darray(int, int, int, int *, int *, 512 int *, int *, int, MPI_Datatype, MPI_Datatype *); 513#endif 514 515/* Section 4.12.4 */ 516MPI_File PMPI_File_f2c(MPI_Fint); 517MPI_Fint PMPI_File_c2f(MPI_File); 518 519#ifndef HAVE_MPI_GREQUEST 520/* The following functions are required if generalized requests are not 521 available, because in that case, an MPIO_Request object 522 is currently used for nonblocking I/O. */ 523int PMPIO_Test(MPIO_Request *, int *, MPI_Status *); 524int PMPIO_Wait(MPIO_Request *, MPI_Status *); 525int PMPIO_Testall(int, MPIO_Request *, int *, MPI_Status *); 526int PMPIO_Waitall(int, MPIO_Request *, MPI_Status *); 527int PMPIO_Testany(int, MPIO_Request *, int *, int *, MPI_Status *); 528int PMPIO_Waitany(int, MPIO_Request *, int *, MPI_Status *); 529int PMPIO_Waitsome(int, MPIO_Request *, int *, int *, MPI_Status *); 530int PMPIO_Testsome(int, MPIO_Request *, int *, int *, MPI_Status *); 531MPI_Fint PMPIO_Request_c2f(MPIO_Request); 532MPIO_Request PMPIO_Request_f2c(MPI_Fint); 533#endif /* HAVE_MPI_GREQUEST */ 534 535/* info functions if not defined in the MPI implementation */ 536#ifndef HAVE_MPI_INFO 537 538int PMPI_Info_create(MPI_Info *); 539int PMPI_Info_set(MPI_Info, char *, char *); 540int PMPI_Info_delete(MPI_Info, char *); 541int PMPI_Info_get(MPI_Info, char *, int, char *, int *); 542int PMPI_Info_get_valuelen(MPI_Info, char *, int *, int *); 543int PMPI_Info_get_nkeys(MPI_Info, int *); 544int PMPI_Info_get_nthkey(MPI_Info, int, char *); 545int PMPI_Info_dup(MPI_Info, MPI_Info *); 546int PMPI_Info_free(MPI_Info *); 547 548MPI_Fint PMPI_Info_c2f(MPI_Info); 549MPI_Info PMPI_Info_f2c(MPI_Fint); 550#endif 551 552#endif /* Open MPI: We don't want any of the profiling layer */ 553 554#if defined(__cplusplus) 555} 556#endif 557 558#endif 559