@@ -147,14 +147,26 @@ int mca_io_ompio_set_view_internal(mca_io_ompio_file_t *fh,
147147 }
148148 }
149149
150- if ( OMPI_SUCCESS != mca_io_ompio_fview_based_grouping (fh ,
150+ if ( SIMPLE != mca_io_ompio_grouping_option ) {
151+ if ( OMPI_SUCCESS != mca_io_ompio_fview_based_grouping (fh ,
151152 & num_groups ,
152153 contg_groups )){
153- opal_output (1 , "mca_io_ompio_fview_based_grouping() failed\n" );
154- free (contg_groups );
155- return OMPI_ERROR ;
154+ opal_output (1 , "mca_io_ompio_fview_based_grouping() failed\n" );
155+ free (contg_groups );
156+ return OMPI_ERROR ;
157+ }
158+ }
159+ else {
160+ if ( OMPI_SUCCESS != mca_io_ompio_simple_grouping (fh ,
161+ & num_groups ,
162+ contg_groups )){
163+ opal_output (1 , "mca_io_ompio_simple_grouping() failed\n" );
164+ free (contg_groups );
165+ return OMPI_ERROR ;
166+ }
156167 }
157168
169+
158170 mca_io_ompio_finalize_initial_grouping (fh ,
159171 num_groups ,
160172 contg_groups );
@@ -298,6 +310,49 @@ OMPI_MPI_OFFSET_TYPE get_contiguous_chunk_size (mca_io_ompio_file_t *fh)
298310 return global_avg [0 ];
299311}
300312
313+ int mca_io_ompio_simple_grouping (mca_io_ompio_file_t * fh ,
314+ int * num_groups ,
315+ contg * contg_groups )
316+ {
317+ size_t stripe_size = (size_t ) fh -> f_stripe_size ;
318+ int group_size = 0 ;
319+ int k = 0 , p = 0 , g = 0 ;
320+ int total_procs = 0 ;
321+
322+ if ( 0 < fh -> f_stripe_size ) {
323+ stripe_size = OMPIO_DEFAULT_STRIPE_SIZE ;
324+ }
325+
326+ if ( stripe_size > fh -> f_cc_size ) {
327+ group_size = (((int )stripe_size /(int )fh -> f_cc_size ) > fh -> f_size ) ? fh -> f_size : ((int )stripe_size /(int )fh -> f_cc_size );
328+ * num_groups = fh -> f_size / group_size ;
329+ }
330+ else if ( fh -> f_cc_size < OMPIO_CONTG_FACTOR * stripe_size ) {
331+ * num_groups = fh -> f_size / OMPIO_CONTG_FACTOR ;
332+ group_size = OMPIO_CONTG_FACTOR ;
333+ }
334+ else {
335+ * num_groups = fh -> f_size ;
336+ group_size = 1 ;
337+ }
338+
339+ for ( k = 0 , p = 0 ; p < * num_groups ; p ++ ) {
340+ if ( p == (* num_groups - 1 ) ) {
341+ contg_groups [p ].procs_per_contg_group = fh -> f_size - total_procs ;
342+ }
343+ else {
344+ contg_groups [p ].procs_per_contg_group = group_size ;
345+ total_procs += group_size ;
346+ }
347+ for ( g = 0 ; g < contg_groups [p ].procs_per_contg_group ; g ++ ) {
348+ contg_groups [p ].procs_in_contg_group [g ] = k ;
349+ k ++ ;
350+ }
351+ }
352+
353+ return OMPI_SUCCESS ;
354+ }
355+
301356int mca_io_ompio_fview_based_grouping (mca_io_ompio_file_t * fh ,
302357 int * num_groups ,
303358 contg * contg_groups )
0 commit comments