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