arrgh. reduce could for very small message sizes and proc counts call a linear function
this was implemented using a chain (tree followed with pipeline) by setting the chain fanout to a factor of size etc but the chain datastructure was fixed in length and if exceeded the topo create returned a null which isn't helpfull in cid next function of comdup... Anyway two fixes, first we do have a real linear function so changed the decision function and second altered the topo chain create to force chain fanouts of less than 1 to 1 and fanouts bigger than max to max. next check in will change chain to dynamically allocd array (reallocable) but we shouldn't ever use a chain fanout for a linear tree anyway. (lession must rerun all tests for all data sizes when changing decision functions) This commit was SVN r8662.
Этот коммит содержится в:
родитель
607b6d5940
Коммит
25375759c3
@ -242,8 +242,9 @@ int ompi_coll_tuned_reduce_intra_dec_fixed( void *sendbuf, void *recvbuf,
|
||||
segsize = 0;
|
||||
fanout = size-1;
|
||||
/* when linear implemented or taken from basic put here, right now using chain as a linear system */
|
||||
/* return ompi_coll_tuned_reduce_intra_linear (sendbuf, recvbuf, count, datatype, op, root, comm); */
|
||||
return ompi_coll_tuned_reduce_intra_chain (sendbuf, recvbuf, count, datatype, op, root, comm, segsize, fanout);
|
||||
/* it is implemented and I shouldn't be calling a chain with a fanout bigger than MAXTREEFANOUT from topo.h! */
|
||||
return ompi_coll_tuned_reduce_intra_basic_linear (sendbuf, recvbuf, count, datatype, op, root, comm);
|
||||
/* return ompi_coll_tuned_reduce_intra_chain (sendbuf, recvbuf, count, datatype, op, root, comm, segsize, fanout); */
|
||||
} else if (msgsize <= 65536 ) {
|
||||
segsize = 32768;
|
||||
fanout = 8;
|
||||
|
@ -274,11 +274,12 @@ ompi_coll_tuned_topo_build_chain( int fanout,
|
||||
rank = ompi_comm_rank(comm);
|
||||
|
||||
if( fanout < 1 ) {
|
||||
return NULL;
|
||||
OPAL_OUTPUT((ompi_coll_tuned_stream,"coll:tuned:topo:build_chain WARNING invalid fanout of ZERO, forcing to 1 (pipeline)!"));
|
||||
fanout = 1;
|
||||
}
|
||||
if (fanout>MAXTREEFANOUT) {
|
||||
OPAL_OUTPUT((ompi_coll_tuned_stream,"coll:tuned:topo:build_chain invalid fanout %d bigger than max %d", fanout, MAXTREEFANOUT));
|
||||
return NULL;
|
||||
OPAL_OUTPUT((ompi_coll_tuned_stream,"coll:tuned:topo:build_chain WARNING invalid fanout %d bigger than max %d, forcing to max!", fanout, MAXTREEFANOUT));
|
||||
fanout = MAXTREEFANOUT;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user