@@ -896,11 +896,14 @@ int mca_common_ompio_split_initial_groups(ompio_file_t *fh,
896
896
int size_smallest_group = 0 ;
897
897
int num_groups = 0 ;
898
898
int ret = OMPI_SUCCESS ;
899
+ OMPI_MPI_COUNT_TYPE bytes_per_agg_group = 0 ;
899
900
900
901
OMPI_MPI_OFFSET_TYPE max_cci = 0 ;
901
902
OMPI_MPI_OFFSET_TYPE min_cci = 0 ;
902
903
903
- size_new_group = ceil ((float )OMPIO_MCA_GET (fh , bytes_per_agg ) * fh -> f_init_procs_per_group / bytes_per_group );
904
+ bytes_per_agg_group = (OMPI_MPI_COUNT_TYPE )OMPIO_MCA_GET (fh , bytes_per_agg );
905
+ // integer round up
906
+ size_new_group = (int )(bytes_per_agg_group / bytes_per_group + (bytes_per_agg_group % bytes_per_group ? 1u : 0u ));
904
907
size_old_group = fh -> f_init_procs_per_group ;
905
908
906
909
ret = mca_common_ompio_split_a_group (fh ,
@@ -948,7 +951,7 @@ int mca_common_ompio_split_initial_groups(ompio_file_t *fh,
948
951
if ((max_cci < OMPIO_CONTG_THRESHOLD ) &&
949
952
(size_new_group < size_old_group )){
950
953
951
- size_new_group = floor ( ( float ) ( size_new_group + size_old_group ) / 2 ) ;
954
+ size_new_group = ( size_new_group + size_old_group ) / 2 ;
952
955
ret = mca_common_ompio_split_a_group (fh ,
953
956
start_offsets_lens ,
954
957
end_offsets ,
@@ -976,7 +979,9 @@ int mca_common_ompio_split_initial_groups(ompio_file_t *fh,
976
979
(size_new_group < size_old_group )){ //can be a better condition
977
980
//monitor the previous iteration
978
981
//break if it has not changed.
979
- size_new_group = ceil ( (float ) (size_new_group + size_old_group ) / 2 );
982
+ size_new_group = size_new_group + size_old_group ;
983
+ // integer round up
984
+ size_new_group = size_new_group / 2 + (size_new_group % 2 ? 1 : 0 );
980
985
ret = mca_common_ompio_split_a_group (fh ,
981
986
start_offsets_lens ,
982
987
end_offsets ,
0 commit comments