00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef H5FDmpi_H
00023 #define H5FDmpi_H
00024
00025
00026
00027
00028
00029
00030
00031 #define H5D_ONE_LINK_CHUNK_IO_THRESHOLD 0
00032
00033
00034
00035
00036
00037
00038 #define H5D_MULTI_CHUNK_IO_COL_THRESHOLD 60
00039
00040 typedef enum H5FD_mpio_xfer_t {
00041 H5FD_MPIO_INDEPENDENT = 0,
00042 H5FD_MPIO_COLLECTIVE
00043 } H5FD_mpio_xfer_t;
00044
00045
00046 typedef enum H5FD_mpio_chunk_opt_t {
00047 H5FD_MPIO_CHUNK_DEFAULT = 0,
00048 H5FD_MPIO_CHUNK_ONE_IO,
00049 H5FD_MPIO_CHUNK_MULTI_IO
00050 } H5FD_mpio_chunk_opt_t;
00051
00052
00053 typedef enum H5FD_mpio_collective_opt_t {
00054 H5FD_MPIO_COLLECTIVE_IO = 0,
00055 H5FD_MPIO_INDIVIDUAL_IO
00056 } H5FD_mpio_collective_opt_t;
00057
00058
00059 #ifdef H5_HAVE_PARALLEL
00060
00061
00062 typedef struct H5FD_class_mpi_t {
00063 H5FD_class_t super;
00064 int (*get_rank)(const H5FD_t *file);
00065 int (*get_size)(const H5FD_t *file);
00066 MPI_Comm (*get_comm)(const H5FD_t *file);
00067 } H5FD_class_mpi_t;
00068 #endif
00069
00070
00071 #include "H5FDmpio.h"
00072 #include "H5FDmpiposix.h"
00073
00074
00075
00076
00077 #define IS_H5FD_MPI(file) \
00078 (IS_H5FD_MPIO(file) || IS_H5FD_MPIPOSIX(file))
00079
00080 #ifdef H5_HAVE_PARALLEL
00081
00082
00083 #define H5FD_MPI_XFER_MEM_MPI_TYPE_NAME "H5FD_mpi_mem_mpi_type"
00084 #define H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE sizeof(MPI_Datatype)
00085
00086 #define H5FD_MPI_XFER_FILE_MPI_TYPE_NAME "H5FD_mpi_file_mpi_type"
00087 #define H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE sizeof(MPI_Datatype)
00088
00089
00090
00091
00092 H5_DLLVAR char H5FD_mpi_native_g[];
00093
00094
00095 #ifdef __cplusplus
00096 extern "C" {
00097 #endif
00098
00099 H5_DLL haddr_t H5FD_mpi_MPIOff_to_haddr(MPI_Offset mpi_off);
00100 H5_DLL herr_t H5FD_mpi_haddr_to_MPIOff(haddr_t addr, MPI_Offset *mpi_off);
00101 H5_DLL herr_t H5FD_mpi_comm_info_dup(MPI_Comm comm, MPI_Info info,
00102 MPI_Comm *comm_new, MPI_Info *info_new);
00103 H5_DLL herr_t H5FD_mpi_comm_info_free(MPI_Comm *comm, MPI_Info *info);
00104 #ifdef NOT_YET
00105 H5_DLL herr_t H5FD_mpio_wait_for_left_neighbor(H5FD_t *file);
00106 H5_DLL herr_t H5FD_mpio_signal_right_neighbor(H5FD_t *file);
00107 #endif
00108 H5_DLL herr_t H5FD_mpi_setup_collective(hid_t dxpl_id, MPI_Datatype btype,
00109 MPI_Datatype ftype);
00110 H5_DLL herr_t H5FD_mpi_teardown_collective(hid_t dxpl_id);
00111
00112
00113 H5_DLL int H5FD_mpi_get_rank(const H5FD_t *file);
00114 H5_DLL int H5FD_mpi_get_size(const H5FD_t *file);
00115 H5_DLL MPI_Comm H5FD_mpi_get_comm(const H5FD_t *_file);
00116 #ifdef __cplusplus
00117 }
00118 #endif
00119
00120 #endif
00121
00122 #endif
00123