1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 #ifndef MCA_COMMON_OMPIO_AGGREGATORS_H
  26 #define MCA_COMMON_OMPIO_AGGREGATORS_H
  27 
  28 
  29 
  30 #define OMPIO_MERGE                     1
  31 #define OMPIO_SPLIT                     2
  32 #define OMPIO_RETAIN                    3
  33 
  34 typedef struct {
  35         int ndims;
  36         int *dims;
  37         int *periods;
  38         int *coords;
  39         int reorder;
  40 } mca_io_ompio_cart_topo_components;
  41 
  42 
  43 typedef struct{
  44         OMPI_MPI_OFFSET_TYPE contg_chunk_size;
  45         int *procs_in_contg_group;
  46         int procs_per_contg_group;
  47 } mca_common_ompio_contg;
  48 
  49 
  50 
  51 OMPI_DECLSPEC int mca_common_ompio_set_aggregator_props (struct ompio_file_t *fh,
  52                                                          int num_aggregators,
  53                                                          size_t bytes_per_proc);
  54 
  55 int  mca_common_ompio_forced_grouping ( ompio_file_t *fh,
  56                                         int num_groups,
  57                                         mca_common_ompio_contg *contg_groups);
  58 
  59 int mca_common_ompio_cart_based_grouping(ompio_file_t *ompio_fh, int *num_groups,
  60                                          mca_common_ompio_contg *contg_groups);
  61 
  62 int mca_common_ompio_fview_based_grouping(ompio_file_t *fh, int *num_groups,
  63                                           mca_common_ompio_contg *contg_groups);
  64 
  65 int mca_common_ompio_simple_grouping(ompio_file_t *fh, int *num_groups,
  66                                      mca_common_ompio_contg *contg_groups);
  67 
  68 int mca_common_ompio_finalize_initial_grouping(ompio_file_t *fh,  int num_groups,
  69                                                mca_common_ompio_contg *contg_groups);
  70 
  71 int mca_common_ompio_create_groups(ompio_file_t *fh, size_t bytes_per_proc);
  72 
  73 int mca_common_ompio_prepare_to_group(ompio_file_t *fh,
  74                                       OMPI_MPI_OFFSET_TYPE **start_offsets_lens,
  75                                       OMPI_MPI_OFFSET_TYPE **end_offsets,
  76                                       OMPI_MPI_OFFSET_TYPE **aggr_bytes_per_group,
  77                                       OMPI_MPI_OFFSET_TYPE *bytes_per_group,
  78                                       int **decision_list,
  79                                       size_t bytes_per_proc,
  80                                       int *is_aggregator,
  81                                       int *ompio_grouping_flag);
  82 
  83 int mca_common_ompio_retain_initial_groups(ompio_file_t *fh);
  84 
  85 
  86 int mca_common_ompio_split_initial_groups(ompio_file_t *fh,
  87                                           OMPI_MPI_OFFSET_TYPE *start_offsets_lens,
  88                                           OMPI_MPI_OFFSET_TYPE *end_offsets,
  89                                           OMPI_MPI_OFFSET_TYPE bytes_per_group);
  90 
  91 
  92 int mca_common_ompio_split_a_group(ompio_file_t *fh,
  93                                    OMPI_MPI_OFFSET_TYPE *start_offsets_lens,
  94                                    OMPI_MPI_OFFSET_TYPE *end_offsets,
  95                                    int size_new_group,
  96                                    OMPI_MPI_OFFSET_TYPE *max_cci,
  97                                    OMPI_MPI_OFFSET_TYPE *min_cci,
  98                                    int *num_groups, int *size_smallest_group);
  99 
 100 int mca_common_ompio_finalize_split(ompio_file_t *fh, int size_new_group,
 101                                     int size_last_group);
 102 
 103 int mca_common_ompio_merge_initial_groups(ompio_file_t *fh,
 104                                           OMPI_MPI_OFFSET_TYPE *aggr_bytes_per_group,
 105                                           int *decision_list, int is_aggregator);
 106 
 107 int mca_common_ompio_merge_groups(ompio_file_t *fh, int *merge_aggrs,
 108                                   int num_merge_aggrs);
 109 
 110 
 111 #endif