- Updated decision function for Alltoall collective.
Fixes "jump" for intermediate sizes message on 24+ number of nodes (at least on Grig cluster). This commit was SVN r12920.
Этот коммит содержится в:
родитель
b1725e02d4
Коммит
3494e1bb05
@ -62,16 +62,44 @@ int ompi_coll_tuned_alltoall_intra_dec_fixed(void *sbuf, int scount,
|
||||
struct ompi_communicator_t *comm)
|
||||
{
|
||||
int communicator_size, rank;
|
||||
size_t dsize, total_dsize;
|
||||
size_t dsize, block_dsize;
|
||||
#if 0
|
||||
size_t total_dsize;
|
||||
#endif
|
||||
|
||||
communicator_size = ompi_comm_size(comm);
|
||||
rank = ompi_comm_rank(comm);
|
||||
|
||||
/* special case */
|
||||
if (communicator_size==2) {
|
||||
return ompi_coll_tuned_alltoall_intra_two_procs (sbuf, scount, sdtype, rbuf, rcount, rdtype, comm);
|
||||
return ompi_coll_tuned_alltoall_intra_two_procs(sbuf, scount, sdtype,
|
||||
rbuf, rcount, rdtype,
|
||||
comm);
|
||||
}
|
||||
|
||||
/* Decision function based on measurement on Grig cluster at
|
||||
the University of Tennessee (2GB MX) up to 64 nodes.
|
||||
Has better performance for messages of intermediate sizes than the old one */
|
||||
/* determine block size */
|
||||
ompi_ddt_type_size(sdtype, &dsize);
|
||||
block_dsize = dsize * scount;
|
||||
|
||||
if ((block_dsize < 200) && (communicator_size > 12)) {
|
||||
return ompi_coll_tuned_alltoall_intra_bruck(sbuf, scount, sdtype,
|
||||
rbuf, rcount, rdtype, comm);
|
||||
|
||||
} else if (block_dsize < 3000) {
|
||||
return ompi_coll_tuned_alltoall_intra_basic_linear(sbuf, scount, sdtype,
|
||||
rbuf, rcount, rdtype,
|
||||
comm);
|
||||
}
|
||||
|
||||
return ompi_coll_tuned_alltoall_intra_pairwise (sbuf, scount, sdtype,
|
||||
rbuf, rcount, rdtype, comm);
|
||||
|
||||
#if 0
|
||||
/* previous decision */
|
||||
|
||||
/* else we need data size for decision function */
|
||||
ompi_ddt_type_size(sdtype, &dsize);
|
||||
total_dsize = dsize * scount * communicator_size; /* needed for decision */
|
||||
@ -86,6 +114,7 @@ int ompi_coll_tuned_alltoall_intra_dec_fixed(void *sbuf, int scount,
|
||||
return ompi_coll_tuned_alltoall_intra_basic_linear (sbuf, scount, sdtype, rbuf, rcount, rdtype, comm);
|
||||
}
|
||||
return ompi_coll_tuned_alltoall_intra_pairwise (sbuf, scount, sdtype, rbuf, rcount, rdtype, comm);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user