/* -*- Mode: C; c-basic-offset:4 ; -*- */ /* * $Id: mpio.h.in,v 1.15 2002/10/17 21:20:13 gropp Exp $ * * Copyright (C) 1997 University of Chicago. * See COPYRIGHT notice in top-level directory. */ /* user include file for MPI-IO programs */ #ifndef MPIO_INCLUDE #define MPIO_INCLUDE #include "mpi.h" /* Open MPI: We need to rename almost all of these functions, as well a the types to be names that conform to the prefix rule */ #include "io_romio_conv.h" #if defined(__cplusplus) extern "C" { #endif #define ROMIO_VERSION 124 /* version 1.2.4 */ /* define MPI-IO datatypes and constants */ #ifndef MPI_FILE_DEFINED typedef struct ADIOI_FileD *MPI_File; #endif /* no generalized requests as yet */ #ifndef HAVE_MPI_PREQUEST typedef struct ADIOI_RequestD *MPIO_Request; #endif #ifndef HAVE_MPI_OFFSET @DEFINE_MPI_OFFSET@ #endif #ifndef NEEDS_MPI_FINT @NEEDS_MPI_FINT@ #endif #ifdef NEEDS_MPI_FINT typedef int MPI_Fint; #endif #ifndef HAVE_MPI_INFO @HAVE_MPI_INFO@ #endif #ifndef HAVE_MPI_INFO typedef struct MPIR_Info *MPI_Info; # define MPI_INFO_NULL ((MPI_Info) 0) # define MPI_MAX_INFO_KEY 255 # define MPI_MAX_INFO_VAL 1024 #endif #define MPI_MODE_RDONLY 2 /* ADIO_RDONLY */ #define MPI_MODE_RDWR 8 /* ADIO_RDWR */ #define MPI_MODE_WRONLY 4 /* ADIO_WRONLY */ #define MPI_MODE_CREATE 1 /* ADIO_CREATE */ #define MPI_MODE_EXCL 64 /* ADIO_EXCL */ #define MPI_MODE_DELETE_ON_CLOSE 16 /* ADIO_DELETE_ON_CLOSE */ #define MPI_MODE_UNIQUE_OPEN 32 /* ADIO_UNIQUE_OPEN */ #define MPI_MODE_APPEND 128 /* ADIO_APPEND */ #define MPI_MODE_SEQUENTIAL 256 /* ADIO_SEQUENTIAL */ #define MPI_DISPLACEMENT_CURRENT -54278278 #define MPI_FILE_NULL ((MPI_File) 0) #define MPIO_REQUEST_NULL ((MPIO_Request) 0) #define MPI_SEEK_SET 600 #define MPI_SEEK_CUR 602 #define MPI_SEEK_END 604 #define MPI_MAX_DATAREP_STRING 128 #ifndef HAVE_MPI_DARRAY_SUBARRAY @HAVE_MPI_DARRAY_SUBARRAY@ #endif #ifndef HAVE_MPI_DARRAY_SUBARRAY # define MPI_ORDER_C 56 # define MPI_ORDER_FORTRAN 57 # define MPI_DISTRIBUTE_BLOCK 121 # define MPI_DISTRIBUTE_CYCLIC 122 # define MPI_DISTRIBUTE_NONE 123 # define MPI_DISTRIBUTE_DFLT_DARG -49767 #endif /* MPI-IO function prototypes */ /* The compiler must support ANSI C style prototypes, otherwise long long constants (e.g. 0) may get passed as ints. */ #ifndef HAVE_PRAGMA_HP_SEC_DEF /* Section 9.2 */ /* Begin Prototypes */ int MPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh); int MPI_File_close(MPI_File *fh); int MPI_File_delete(char *filename, MPI_Info info); int MPI_File_set_size(MPI_File fh, MPI_Offset size); int MPI_File_preallocate(MPI_File fh, MPI_Offset size); int MPI_File_get_size(MPI_File fh, MPI_Offset *size); int MPI_File_get_group(MPI_File fh, MPI_Group *group); int MPI_File_get_amode(MPI_File fh, int *amode); int MPI_File_set_info(MPI_File fh, MPI_Info info); int MPI_File_get_info(MPI_File fh, MPI_Info *info_used); /* Section 9.3 */ int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, char *datarep, MPI_Info info); int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep); /* Section 9.4.2 */ int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); /* nonblocking calls currently use MPIO_Request, because generalized requests not yet implemented. For the same reason, MPIO_Test and MPIO_Wait are used to test and wait on nonblocking I/O requests */ int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); /* Section 9.4.3 */ int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_write(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_write_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); /* nonblocking calls currently use MPIO_Request, because generalized requests not yet implemented. For the same reason, MPIO_Test and MPIO_Wait are used to test and wait on nonblocking I/O requests */ int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int MPI_File_iwrite(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence); int MPI_File_get_position(MPI_File fh, MPI_Offset *offset); int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp); /* Section 9.4.4 */ int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_write_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int MPI_File_iwrite_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_write_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence); int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset); /* Section 9.4.5 */ int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype); int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status); int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype); int MPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status); int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status); int MPI_File_write_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int MPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status); int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status); int MPI_File_write_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int MPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status); /* Section 9.5.1 */ int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent); /* Section 9.6.1 */ int MPI_File_set_atomicity(MPI_File fh, int flag); int MPI_File_get_atomicity(MPI_File fh, int *flag); int MPI_File_sync(MPI_File fh); /* Section 4.13.3 */ int MPI_File_set_errhandler( MPI_File, MPI_Errhandler ); int MPI_File_get_errhandler( MPI_File, MPI_Errhandler * ); /* End Prototypes */ #ifndef HAVE_MPI_DARRAY_SUBARRAY /* Section 4.14.4 */ int MPI_Type_create_subarray(int ndims, int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order, MPI_Datatype oldtype, MPI_Datatype *newtype); /* Section 4.14.5 */ int MPI_Type_create_darray(int size, int rank, int ndims, int *array_of_gsizes, int *array_of_distribs, int *array_of_dargs, int *array_of_psizes, int order, MPI_Datatype oldtype, MPI_Datatype *newtype); #endif /* The globus2 device has to rename MPI_ symbols in order to use the vendor MPI as one of its transport mechanisms. Therefore, the following undefines should only happen if MPICH_RENAMING_MPI_FUNCS is not defined. */ /* Section 4.12.4 */ #if !defined(MPICH_RENAMING_MPI_FUNCS) #ifdef MPI_File_f2c #undef MPI_File_f2c #endif #ifdef MPI_File_c2f #undef MPI_File_c2f #endif #endif /* above needed for some versions of mpi.h in MPICH!! */ /* Open MPI: I can't seem to make these #define properly. Oh well -- we don't need them anyway :-( */ #if 0 MPI_File MPI_File_f2c(MPI_Fint fh); MPI_Fint MPI_File_c2f(MPI_File fh); #endif /* The foll. functions are required, because an MPIO_Request object is currently used for nonblocking I/O. These functions will go away after generalized requests are implemented. */ int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status); int MPIO_Wait(MPIO_Request *request, MPI_Status *status); MPI_Fint MPIO_Request_c2f(MPIO_Request request); MPIO_Request MPIO_Request_f2c(MPI_Fint request); /* info functions if not defined in the MPI implementation */ #ifndef HAVE_MPI_INFO int MPI_Info_create(MPI_Info *info); int MPI_Info_set(MPI_Info info, char *key, char *value); int MPI_Info_delete(MPI_Info info, char *key); int MPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag); int MPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int *flag); int MPI_Info_get_nkeys(MPI_Info info, int *nkeys); int MPI_Info_get_nthkey(MPI_Info info, int n, char *key); int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo); int MPI_Info_free(MPI_Info *info); /* The globus2 device has to rename MPI_ symbols in order to use the vendor MPI as one of its transport mechanisms. Therefore, the following undefines should only happen if MPICH_RENAMING_MPI_FUNCS is not defined. */ #if !defined(MPICH_RENAMING_MPI_FUNCS) #ifdef MPI_Info_f2c #undef MPI_Info_f2c #endif #ifdef MPI_Info_c2f #undef MPI_Info_c2f #endif #endif /* above needed for some versions of mpi.h in MPICH!! */ /* Open MPI: we don't need these in ROMIO */ #if 0 MPI_Fint MPI_Info_c2f(MPI_Info info); MPI_Info MPI_Info_f2c(MPI_Fint info); #endif #endif #endif /* HAVE_PRAGMA_HP_SEC_DEF */ /**************** BINDINGS FOR THE PROFILING INTERFACE ***************/ /* Open MPI: We don't want any of the profiling layer */ #if 0 /* Section 9.2 */ int PMPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh); int PMPI_File_close(MPI_File *fh); int PMPI_File_delete(char *filename, MPI_Info info); int PMPI_File_set_size(MPI_File fh, MPI_Offset size); int PMPI_File_preallocate(MPI_File fh, MPI_Offset size); int PMPI_File_get_size(MPI_File fh, MPI_Offset *size); int PMPI_File_get_group(MPI_File fh, MPI_Group *group); int PMPI_File_get_amode(MPI_File fh, int *amode); int PMPI_File_set_info(MPI_File fh, MPI_Info info); int PMPI_File_get_info(MPI_File fh, MPI_Info *info_used); /* Section 9.3 */ int PMPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, char *datarep, MPI_Info info); int PMPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep); /* Section 9.4.2 */ int PMPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); /* nonblocking calls currently use MPIO_Request, because generalized requests not yet implemented. For the same reason, MPIO_Test and MPIO_Wait are used to test and wait on nonblocking I/O requests */ int PMPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int PMPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); /* Section 9.4.3 */ int PMPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_write(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_write_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); /* nonblocking calls currently use MPIO_Request, because generalized requests not yet implemented. For the same reason, MPIO_Test and MPIO_Wait are used to test and wait on nonblocking I/O requests */ int PMPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int PMPI_File_iwrite(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int PMPI_File_seek(MPI_File fh, MPI_Offset offset, int whence); int PMPI_File_get_position(MPI_File fh, MPI_Offset *offset); int PMPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp); /* Section 9.4.4 */ int PMPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_write_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int PMPI_File_iwrite_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request); int PMPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_write_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status); int PMPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence); int PMPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset); /* Section 9.4.5 */ int PMPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype); int PMPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status); int PMPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype); int PMPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status); int PMPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int PMPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status); int PMPI_File_write_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int PMPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status); int PMPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int PMPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status); int PMPI_File_write_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype); int PMPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status); /* Section 9.5.1 */ int PMPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent); /* Section 9.6.1 */ int PMPI_File_set_atomicity(MPI_File fh, int flag); int PMPI_File_get_atomicity(MPI_File fh, int *flag); int PMPI_File_sync(MPI_File fh); /* Section 4.13.3 */ int PMPI_File_set_errhandler( MPI_File, MPI_Errhandler ); int PMPI_File_get_errhandler( MPI_File, MPI_Errhandler * ); #ifndef HAVE_MPI_DARRAY_SUBARRAY /* Section 4.14.4 */ int PMPI_Type_create_subarray(int ndims, int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order, MPI_Datatype oldtype, MPI_Datatype *newtype); /* Section 4.14.5 */ int PMPI_Type_create_darray(int size, int rank, int ndims, int *array_of_gsizes, int *array_of_distribs, int *array_of_dargs, int *array_of_psizes, int order, MPI_Datatype oldtype, MPI_Datatype *newtype); #endif /* Section 4.12.4 */ MPI_File PMPI_File_f2c(MPI_Fint fh); MPI_Fint PMPI_File_c2f(MPI_File fh); /* The foll. functions are required, because an MPIO_Request object is currently used for nonblocking I/O. These functions will go away after generalized requests are implemented. */ int PMPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status); int PMPIO_Wait(MPIO_Request *request, MPI_Status *status); MPI_Fint PMPIO_Request_c2f(MPIO_Request request); MPIO_Request PMPIO_Request_f2c(MPI_Fint request); /* info functions if not defined in the MPI implementation */ #ifndef HAVE_MPI_INFO int PMPI_Info_create(MPI_Info *info); int PMPI_Info_set(MPI_Info info, char *key, char *value); int PMPI_Info_delete(MPI_Info info, char *key); int PMPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag); int PMPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int *flag); int PMPI_Info_get_nkeys(MPI_Info info, int *nkeys); int PMPI_Info_get_nthkey(MPI_Info info, int n, char *key); int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo); int PMPI_Info_free(MPI_Info *info); MPI_Fint PMPI_Info_c2f(MPI_Info info); MPI_Info PMPI_Info_f2c(MPI_Fint info); #endif #if defined(__cplusplus) } #endif #endif /* Open MPI: We don't want any of the profiling layer */ #endif