add a new option for a simple aggregator selection which has zero communication costs.
Этот коммит содержится в:
родитель
66c1ea5fcb
Коммит
27628774c7
@ -110,11 +110,13 @@ OMPI_DECLSPEC extern int mca_io_ompio_coll_timing_info;
|
||||
#define NO_REFINEMENT 6
|
||||
|
||||
|
||||
#define OMPIO_UNIFORM_DIST_THRESHOLD 0.5
|
||||
#define OMPIO_CONTG_THRESHOLD 1048576
|
||||
#define OMPIO_PROCS_PER_GROUP_TAG 0
|
||||
#define OMPIO_PROCS_IN_GROUP_TAG 1
|
||||
#define OMPIO_MERGE_THRESHOLD 0.5
|
||||
#define OMPIO_UNIFORM_DIST_THRESHOLD 0.5
|
||||
#define OMPIO_CONTG_THRESHOLD 1048576
|
||||
#define OMPIO_CONTG_FACTOR 4
|
||||
#define OMPIO_DEFAULT_STRIPE_SIZE 1048576
|
||||
#define OMPIO_PROCS_PER_GROUP_TAG 0
|
||||
#define OMPIO_PROCS_IN_GROUP_TAG 1
|
||||
#define OMPIO_MERGE_THRESHOLD 0.5
|
||||
|
||||
/*---------------------------*/
|
||||
|
||||
@ -548,6 +550,9 @@ int mca_io_ompio_cart_based_grouping(mca_io_ompio_file_t *ompio_fh);
|
||||
int mca_io_ompio_fview_based_grouping(mca_io_ompio_file_t *fh,
|
||||
int *num_groups,
|
||||
contg *contg_groups);
|
||||
int mca_io_ompio_simple_grouping(mca_io_ompio_file_t *fh,
|
||||
int *num_groups,
|
||||
contg *contg_groups);
|
||||
|
||||
int mca_io_ompio_finalize_initial_grouping(mca_io_ompio_file_t *fh,
|
||||
int num_groups,
|
||||
|
@ -148,13 +148,25 @@ int mca_io_ompio_set_view_internal(mca_io_ompio_file_t *fh,
|
||||
}
|
||||
}
|
||||
|
||||
if( OMPI_SUCCESS != mca_io_ompio_fview_based_grouping(fh,
|
||||
if ( SIMPLE != mca_io_ompio_grouping_option ) {
|
||||
if( OMPI_SUCCESS != mca_io_ompio_fview_based_grouping(fh,
|
||||
&num_groups,
|
||||
contg_groups)){
|
||||
opal_output(1, "mca_io_ompio_fview_based_grouping() failed\n");
|
||||
free(contg_groups);
|
||||
return OMPI_ERROR;
|
||||
opal_output(1, "mca_io_ompio_fview_based_grouping() failed\n");
|
||||
free(contg_groups);
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if( OMPI_SUCCESS != mca_io_ompio_simple_grouping(fh,
|
||||
&num_groups,
|
||||
contg_groups)){
|
||||
opal_output(1, "mca_io_ompio_simple_grouping() failed\n");
|
||||
free(contg_groups);
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
mca_io_ompio_finalize_initial_grouping(fh,
|
||||
num_groups,
|
||||
@ -299,6 +311,49 @@ OMPI_MPI_OFFSET_TYPE get_contiguous_chunk_size (mca_io_ompio_file_t *fh)
|
||||
return global_avg[0];
|
||||
}
|
||||
|
||||
int mca_io_ompio_simple_grouping(mca_io_ompio_file_t *fh,
|
||||
int *num_groups,
|
||||
contg *contg_groups)
|
||||
{
|
||||
size_t stripe_size = (size_t) fh->f_stripe_size;
|
||||
int group_size = 0;
|
||||
int k=0, p=0, g=0;
|
||||
int total_procs = 0;
|
||||
|
||||
if ( 0 < fh->f_stripe_size ) {
|
||||
stripe_size = OMPIO_DEFAULT_STRIPE_SIZE;
|
||||
}
|
||||
|
||||
if ( stripe_size > fh->f_cc_size ) {
|
||||
group_size = (((int)stripe_size/(int)fh->f_cc_size) > fh->f_size ) ? fh->f_size : ((int)stripe_size/(int)fh->f_cc_size);
|
||||
*num_groups = fh->f_size / group_size;
|
||||
}
|
||||
else if ( fh->f_cc_size < OMPIO_CONTG_FACTOR * stripe_size) {
|
||||
*num_groups = fh->f_size / OMPIO_CONTG_FACTOR;
|
||||
group_size = OMPIO_CONTG_FACTOR;
|
||||
}
|
||||
else {
|
||||
*num_groups = fh->f_size;
|
||||
group_size = 1;
|
||||
}
|
||||
|
||||
for ( k=0, p=0; p<*num_groups; p++ ) {
|
||||
if ( p == (*num_groups - 1) ) {
|
||||
contg_groups[p].procs_per_contg_group = fh->f_size - total_procs;
|
||||
}
|
||||
else {
|
||||
contg_groups[p].procs_per_contg_group = group_size;
|
||||
total_procs +=group_size;
|
||||
}
|
||||
for ( g=0; g<contg_groups[p].procs_per_contg_group; g++ ) {
|
||||
contg_groups[p].procs_in_contg_group[g] = k;
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
int mca_io_ompio_fview_based_grouping(mca_io_ompio_file_t *fh,
|
||||
int *num_groups,
|
||||
contg *contg_groups)
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user