Skip to content

Commit cba47b6

Browse files
committed
ulfm: Fix agree/iagree for intercommunicators
For intercommunicators, passing MPI_IN_PLACE to allreduce is invalid. Signed-off-by: Lisandro Dalcin <[email protected]>
1 parent bb7ecde commit cba47b6

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

ompi/mca/coll/base/coll_base_agree_noft.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ ompi_coll_base_agree_noft(void *contrib,
2626
struct ompi_communicator_t* comm,
2727
mca_coll_base_module_t *module)
2828
{
29-
return comm->c_coll->coll_allreduce(MPI_IN_PLACE, contrib, dt_count, dt, op,
29+
void *sendbuf = OMPI_COMM_IS_INTER(comm) ? contrib : MPI_IN_PLACE;
30+
return comm->c_coll->coll_allreduce(sendbuf, contrib, dt_count, dt, op,
3031
comm, comm->c_coll->coll_allreduce_module);
3132
}
3233

@@ -40,6 +41,7 @@ ompi_coll_base_iagree_noft(void *contrib,
4041
ompi_request_t **request,
4142
mca_coll_base_module_t *module)
4243
{
43-
return comm->c_coll->coll_iallreduce(MPI_IN_PLACE, contrib, dt_count, dt, op,
44+
void *sendbuf = OMPI_COMM_IS_INTER(comm) ? contrib : MPI_IN_PLACE;
45+
return comm->c_coll->coll_iallreduce(sendbuf, contrib, dt_count, dt, op,
4446
comm, request, comm->c_coll->coll_iallreduce_module);
4547
}

0 commit comments

Comments
 (0)