1
1

fcoll/two_phase: adjust aggregator selection to new mapby flag on MPI_COMM_WORLD

adjust how the aggregator nodes are selected depending on whether processes
have been mapped by node or anything else.

Signed-off-by: Edgar Gabriel <gabriel@cs.uh.edu>
Этот коммит содержится в:
Edgar Gabriel 2017-08-10 14:39:00 -05:00
родитель 92eff9050c
Коммит f258036e06
3 изменённых файлов: 23 добавлений и 8 удалений

Просмотреть файл

@ -27,6 +27,7 @@
#include "fcoll_two_phase.h"
#include "mpi.h"
#include "ompi/constants.h"
#include "ompi/communicator/communicator.h"
#include "ompi/mca/fcoll/fcoll.h"
#include "ompi/mca/io/ompio/io_ompio.h"
#include "ompi/mca/io/io.h"
@ -199,7 +200,7 @@ mca_fcoll_two_phase_file_read_all (mca_io_ompio_file_t *fh,
}
if (two_phase_num_io_procs > fh->f_size){
two_phase_num_io_procs = fh->f_size;
two_phase_num_io_procs = fh->f_size;
}
aggregator_list = (int *) calloc (two_phase_num_io_procs, sizeof(int));
@ -208,9 +209,16 @@ mca_fcoll_two_phase_file_read_all (mca_io_ompio_file_t *fh,
goto exit;
}
for (i=0; i< two_phase_num_io_procs; i++){
aggregator_list[i] = i * fh->f_size / two_phase_num_io_procs;
if ( OMPI_COMM_IS_MAPBY_NODE (&ompi_mpi_comm_world.comm) ) {
for (i =0; i< two_phase_num_io_procs; i++){
aggregator_list[i] = i;
}
}
else {
for (i =0; i< two_phase_num_io_procs; i++){
aggregator_list[i] = i * fh->f_size / two_phase_num_io_procs;
}
}
ret = fh->f_generate_current_file_view ((struct mca_io_ompio_file_t *)fh,
max_data,

Просмотреть файл

@ -27,6 +27,7 @@
#include "mpi.h"
#include "ompi/constants.h"
#include "ompi/communicator/communicator.h"
#include "ompi/mca/fcoll/fcoll.h"
#include "ompi/mca/io/ompio/io_ompio.h"
#include "ompi/mca/io/io.h"
@ -235,9 +236,10 @@ mca_fcoll_two_phase_file_write_all (mca_io_ompio_file_t *fh,
}
if (two_phase_num_io_procs > fh->f_size){
two_phase_num_io_procs = fh->f_size;
two_phase_num_io_procs = fh->f_size;
}
#if DEBUG_ON
printf("Number of aggregators : %ld\n", two_phase_num_io_procs);
#endif
@ -248,10 +250,16 @@ mca_fcoll_two_phase_file_write_all (mca_io_ompio_file_t *fh,
goto exit;
}
for (i =0; i< two_phase_num_io_procs; i++){
aggregator_list[i] = i * fh->f_size / two_phase_num_io_procs;
if ( OMPI_COMM_IS_MAPBY_NODE (&ompi_mpi_comm_world.comm) ) {
for (i =0; i< two_phase_num_io_procs; i++){
aggregator_list[i] = i;
}
}
else {
for (i =0; i< two_phase_num_io_procs; i++){
aggregator_list[i] = i * fh->f_size / two_phase_num_io_procs;
}
}
ret = fh->f_generate_current_file_view ((struct mca_io_ompio_file_t*)fh,
max_data,

Просмотреть файл

@ -101,7 +101,6 @@ int mca_io_ompio_simple_grouping(mca_io_ompio_file_t *fh,
** allowed for the given no. of processes.
*/
dtime_threshold = (double) mca_io_ompio_aggregators_cutoff_threshold / 100.0;
if ( fh->f_rank == 0 ) printf ("%d %lf\n", mca_io_ompio_aggregators_cutoff_threshold, dtime_threshold );
/* Determine whether to use the formula for 1-D or 2-D data decomposition. Anything
** that is not 1-D is assumed to be 2-D in this version