This source file includes following definitions.
- ADIOI_GPFS_SetInfo
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 #include "adio.h"
  16 #include "adio_extern.h"
  17 #include "hint_fns.h"
  18 
  19 #include "ad_gpfs.h"
  20 
  21 #define   ADIOI_GPFS_CB_BUFFER_SIZE_DFLT        "16777216"
  22 #define   ADIOI_GPFS_IND_RD_BUFFER_SIZE_DFLT    "4194304"
  23 #define   ADIOI_GPFS_IND_WR_BUFFER_SIZE_DFLT    "4194304"
  24 
  25 #ifdef BGQPLATFORM
  26 #define   ADIOI_BG_NAGG_IN_PSET_HINT_NAME       "bg_nodes_pset"
  27 #endif
  28 
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 
  43 
  44 
  45 
  46 
  47 
  48 
  49 
  50 
  51 #ifdef BGQPLATFORM
  52 
  53 extern int
  54 ADIOI_BG_gen_agg_ranklist(ADIO_File fd, int n_proxy_per_pset);
  55 #elif PEPLATFORM
  56 extern int
  57 ADIOI_PE_gen_agg_ranklist(ADIO_File fd);
  58 #endif
  59 
  60 void ADIOI_GPFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
  61 {
  62 
  63 
  64 
  65 
  66 
  67 
  68     MPI_Info info;
  69     char *value;
  70     int flag, intval, nprocs=0, nprocs_is_valid = 0;
  71     static char myname[] = "ADIOI_GPFS_SETINFO";
  72 
  73     int did_anything = 0;
  74 
  75     if (fd->info == MPI_INFO_NULL) MPI_Info_create(&(fd->info));
  76     info = fd->info;
  77 
  78     
  79 
  80 
  81 
  82     value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
  83     ADIOI_Assert ((value != NULL));
  84 
  85     
  86 
  87 
  88     if (!fd->hints->initialized) {
  89 
  90         ad_gpfs_get_env_vars();
  91         did_anything = 1;
  92 
  93         
  94         ADIOI_Info_set(info, "cb_buffer_size", ADIOI_GPFS_CB_BUFFER_SIZE_DFLT);
  95         fd->hints->cb_buffer_size = atoi(ADIOI_GPFS_CB_BUFFER_SIZE_DFLT);
  96 
  97         
  98 
  99 
 100         ADIOI_Info_set(info, "romio_cb_read", "enable");
 101         fd->hints->cb_read = ADIOI_HINT_ENABLE;
 102         ADIOI_Info_set(info, "romio_cb_write", "enable");
 103         fd->hints->cb_write = ADIOI_HINT_ENABLE;
 104 
 105         if ( fd->hints->cb_config_list != NULL ) ADIOI_Free (fd->hints->cb_config_list);
 106         fd->hints->cb_config_list = NULL;
 107 
 108         
 109         MPI_Comm_size(fd->comm, &nprocs);
 110         nprocs_is_valid = 1;
 111         ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", nprocs);
 112         ADIOI_Info_set(info, "cb_nodes", value);
 113         fd->hints->cb_nodes = -1;
 114 
 115         
 116         ADIOI_Info_set(info, "romio_no_indep_rw", "false");
 117         fd->hints->no_indep_rw = 0;
 118 
 119         
 120 
 121         
 122         ADIOI_Info_set(info, "romio_cb_pfr", "disable");
 123         fd->hints->cb_pfr = ADIOI_HINT_DISABLE;
 124 
 125         
 126         ADIOI_Info_set(info, "romio_cb_fr_types", "aar");
 127         fd->hints->cb_fr_type = ADIOI_FR_AAR;
 128 
 129         
 130         ADIOI_Info_set(info, "romio_cb_fr_alignment", "1");
 131         fd->hints->cb_fr_alignment = 1;
 132 
 133         
 134 
 135         ADIOI_Info_set(info, "romio_cb_ds_threshold", "0");
 136         fd->hints->cb_ds_threshold = 0;
 137 
 138         
 139         ADIOI_Info_set(info, "romio_cb_alltoall", "automatic");
 140         fd->hints->cb_alltoall = ADIOI_HINT_AUTO;
 141 
 142          
 143         fd->hints->deferred_open = 0;
 144 
 145         
 146         ADIOI_Info_set(info, "ind_rd_buffer_size", ADIOI_GPFS_IND_RD_BUFFER_SIZE_DFLT);
 147         fd->hints->ind_rd_buffer_size = atoi(ADIOI_GPFS_IND_RD_BUFFER_SIZE_DFLT);
 148 
 149         
 150         ADIOI_Info_set(info, "ind_wr_buffer_size", ADIOI_GPFS_IND_WR_BUFFER_SIZE_DFLT);
 151         fd->hints->ind_wr_buffer_size = atoi(ADIOI_GPFS_IND_WR_BUFFER_SIZE_DFLT);
 152 
 153 
 154     ADIOI_Info_set(info, "romio_ds_read", "automatic");
 155     fd->hints->ds_read = ADIOI_HINT_AUTO;
 156     ADIOI_Info_set(info, "romio_ds_write", "automatic");
 157     fd->hints->ds_write = ADIOI_HINT_AUTO;
 158 
 159     
 160 
 161     fd->hints->min_fdomain_size = 0;
 162     fd->hints->striping_unit = 0;
 163 
 164     fd->hints->initialized = 1;
 165     }
 166 
 167     
 168     if (users_info != MPI_INFO_NULL) {
 169         ADIOI_Info_check_and_install_int(fd, users_info, "cb_buffer_size",
 170                 &(fd->hints->cb_buffer_size), myname, error_code);
 171         
 172 
 173 
 174         ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_cb_read",
 175                 &(fd->hints->cb_read), myname, error_code);
 176         if (fd->hints->cb_read == ADIOI_HINT_DISABLE) {
 177             
 178             ADIOI_Info_set(info, "romio_no_indep_rw", "false");
 179             fd->hints->no_indep_rw = ADIOI_HINT_DISABLE;
 180         }
 181         ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_cb_write",
 182                 &(fd->hints->cb_write), myname, error_code);
 183         if (fd->hints->cb_write == ADIOI_HINT_DISABLE) {
 184             
 185             ADIOI_Info_set(info, "romio_no_indep_rw", "false");
 186             fd->hints->no_indep_rw = ADIOI_HINT_DISABLE;
 187         }
 188         
 189         ADIOI_Info_check_and_install_true(fd, users_info, "romio_no_indep_rw",
 190                 &(fd->hints->no_indep_rw), myname, error_code);
 191         if (fd->hints->no_indep_rw == 1) {
 192             
 193 
 194 
 195             ADIOI_Info_set(info, "romio_cb_write", "enable");
 196             ADIOI_Info_set(info, "romio_cb_read", "enable");
 197             fd->hints->cb_read = 1;
 198             fd->hints->cb_write = 1;
 199         }
 200 
 201         
 202 
 203 
 204         ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_ds_read",
 205                 &(fd->hints->ds_read), myname, error_code);
 206         ADIOI_Info_check_and_install_enabled(fd, users_info, "romio_ds_write",
 207                 &(fd->hints->ds_write), myname, error_code);
 208 
 209         ADIOI_Info_check_and_install_int(fd, users_info, "ind_wr_buffer_size",
 210                 &(fd->hints->ind_wr_buffer_size), myname, error_code);
 211         ADIOI_Info_check_and_install_int(fd, users_info, "ind_rd_buffer_size",
 212                 &(fd->hints->ind_rd_buffer_size), myname, error_code);
 213 
 214         memset( value, 0, MPI_MAX_INFO_VAL+1 );
 215         ADIOI_Info_get(users_info, "romio_min_fdomain_size", MPI_MAX_INFO_VAL,
 216                         value, &flag);
 217         if ( flag && ((intval = atoi(value)) > 0) ) {
 218                 ADIOI_Info_set(info, "romio_min_fdomain_size", value);
 219                 fd->hints->min_fdomain_size = intval;
 220         }
 221   
 222 
 223         ADIOI_Info_check_and_install_int(fd, users_info, "striping_unit",
 224                 &(fd->hints->striping_unit), myname, error_code);
 225 
 226 #ifdef BGQPLATFORM
 227         memset( value, 0, MPI_MAX_INFO_VAL+1 );
 228         ADIOI_Info_get(users_info, ADIOI_BG_NAGG_IN_PSET_HINT_NAME, MPI_MAX_INFO_VAL,
 229                      value, &flag);
 230         if (flag && ((intval = atoi(value)) > 0)) {
 231 
 232             did_anything = 1;
 233             ADIOI_Info_set(info, ADIOI_BG_NAGG_IN_PSET_HINT_NAME, value);
 234             fd->hints->cb_nodes = intval;
 235         }
 236 #endif
 237     }
 238 
 239     
 240     if (did_anything) {
 241 #ifdef BGQPLATFORM
 242         ADIOI_BG_gen_agg_ranklist(fd, fd->hints->cb_nodes);
 243 #elif PEPLATFORM
 244         ADIOI_PE_gen_agg_ranklist(fd);
 245 #endif
 246     }
 247 
 248     
 249 
 250 
 251 
 252     if ( ( (fd->hints->cb_read != ADIOI_HINT_DISABLE) \
 253                             && (fd->hints->cb_write != ADIOI_HINT_DISABLE)\
 254                             && fd->hints->no_indep_rw ) ) {
 255             fd->hints->deferred_open = 1;
 256     } else {
 257             
 258 
 259 
 260 
 261             ADIOI_Info_set(info, "romio_no_indep_rw", "false");
 262             fd->hints->no_indep_rw = 0;
 263             fd->hints->deferred_open = 0;
 264     }
 265 
 266     
 267 
 268 
 269     if (ADIO_Feature(fd, ADIO_DATA_SIEVING_WRITES) == 0) {
 270     
 271 
 272         ADIOI_Info_get(info, "ind_wr_buffer_size", MPI_MAX_INFO_VAL,
 273                      value, &flag);
 274         if (flag) {
 275             
 276             ADIOI_Info_delete(info, "ind_wr_buffer_size");
 277         }
 278         
 279 
 280 
 281         ADIOI_Info_set(info, "romio_ds_write", "disable");
 282         fd->hints->ds_write = ADIOI_HINT_DISABLE;
 283     }
 284 
 285     ADIOI_Free(value);
 286 
 287     *error_code = MPI_SUCCESS;
 288 }