handle non existant recv buf in reduce for non root processes
(basic allreduce does this for mpi_in_place case) This commit was SVN r7759.
Этот коммит содержится в:
родитель
61b8218d76
Коммит
636b42afff
@ -79,6 +79,7 @@ int mca_coll_tuned_reduce_intra_chain( void *sendbuf, void *recvbuf, int count,
|
|||||||
char *sendtmpbuf = NULL;
|
char *sendtmpbuf = NULL;
|
||||||
long ext, lb;
|
long ext, lb;
|
||||||
int typelng;
|
int typelng;
|
||||||
|
int allocedaccumbuf;
|
||||||
ompi_request_t* reqs[2];
|
ompi_request_t* reqs[2];
|
||||||
ompi_coll_chain_t* chain;
|
ompi_coll_chain_t* chain;
|
||||||
|
|
||||||
@ -135,7 +136,6 @@ int mca_coll_tuned_reduce_intra_chain( void *sendbuf, void *recvbuf, int count,
|
|||||||
else {
|
else {
|
||||||
sendtmpbuf = (char *) recvbuf;
|
sendtmpbuf = (char *) recvbuf;
|
||||||
}
|
}
|
||||||
accumbuf = (char *) recvbuf;
|
|
||||||
|
|
||||||
/* handle special case when size == 1 */
|
/* handle special case when size == 1 */
|
||||||
if (1 == size ) {
|
if (1 == size ) {
|
||||||
@ -145,6 +145,17 @@ int mca_coll_tuned_reduce_intra_chain( void *sendbuf, void *recvbuf, int count,
|
|||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* handle non existant recv buffer (i.e. its NULL.. like basic allreduce uses!) */
|
||||||
|
if (recvbuf) {
|
||||||
|
accumbuf = (char *) recvbuf;
|
||||||
|
allocedaccumbuf = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
accumbuf = (char*) malloc(realsegsize);
|
||||||
|
if (accumbuf == NULL) { line = __LINE__; ret = -1; goto error_hndl; }
|
||||||
|
allocedaccumbuf = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
|
|
||||||
/* non-leaf nodes -
|
/* non-leaf nodes -
|
||||||
@ -275,6 +286,7 @@ int mca_coll_tuned_reduce_intra_chain( void *sendbuf, void *recvbuf, int count,
|
|||||||
if (inbuf!=NULL) {
|
if (inbuf!=NULL) {
|
||||||
if (inbuf[0] != NULL) free(inbuf[0]);
|
if (inbuf[0] != NULL) free(inbuf[0]);
|
||||||
if (inbuf[1] != NULL) free(inbuf[1]);
|
if (inbuf[1] != NULL) free(inbuf[1]);
|
||||||
|
if (allocedaccumbuf) free(accumbuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,6 +311,7 @@ int mca_coll_tuned_reduce_intra_chain( void *sendbuf, void *recvbuf, int count,
|
|||||||
if( inbuf != NULL ) {
|
if( inbuf != NULL ) {
|
||||||
if( inbuf[0] != NULL ) free(inbuf[0]);
|
if( inbuf[0] != NULL ) free(inbuf[0]);
|
||||||
if( inbuf[1] != NULL ) free(inbuf[1]);
|
if( inbuf[1] != NULL ) free(inbuf[1]);
|
||||||
|
if (allocedaccumbuf) free(accumbuf);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user