Fix the communication ordering for all cartesian neighbor collectives.
This work is rooted in the [MPI Forum issue 153](https://github.com/mpi-forum/mpi-issues/issues/153). Signed-off-by: George Bosilca <bosilca@icl.utk.edu>
Этот коммит содержится в:
родитель
196a91e604
Коммит
86acdee460
@ -43,6 +43,8 @@
|
|||||||
#define MCA_COLL_BASE_TAG_SCATTERV -26
|
#define MCA_COLL_BASE_TAG_SCATTERV -26
|
||||||
#define MCA_COLL_BASE_TAG_NONBLOCKING_BASE -27
|
#define MCA_COLL_BASE_TAG_NONBLOCKING_BASE -27
|
||||||
#define MCA_COLL_BASE_TAG_NONBLOCKING_END ((-1 * INT_MAX/2) + 1)
|
#define MCA_COLL_BASE_TAG_NONBLOCKING_END ((-1 * INT_MAX/2) + 1)
|
||||||
|
#define MCA_COLL_BASE_TAG_NEIGHBOR_BASE (MCA_COLL_BASE_TAG_NONBLOCKING_END - 1)
|
||||||
|
#define MCA_COLL_BASE_TAG_NEIGHBOR_END (MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 1024)
|
||||||
#define MCA_COLL_BASE_TAG_HCOLL_BASE (-1 * INT_MAX/2)
|
#define MCA_COLL_BASE_TAG_HCOLL_BASE (-1 * INT_MAX/2)
|
||||||
#define MCA_COLL_BASE_TAG_HCOLL_END (-1 * INT_MAX)
|
#define MCA_COLL_BASE_TAG_HCOLL_END (-1 * INT_MAX)
|
||||||
#endif /* MCA_COLL_BASE_TAGS_H */
|
#endif /* MCA_COLL_BASE_TAGS_H */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||||
* University Research and Technology
|
* University Research and Technology
|
||||||
* Corporation. All rights reserved.
|
* Corporation. All rights reserved.
|
||||||
* Copyright (c) 2004-2016 The University of Tennessee and The University
|
* Copyright (c) 2004-2019 The University of Tennessee and The University
|
||||||
* of Tennessee Research Foundation. All rights
|
* of Tennessee Research Foundation. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||||
@ -70,7 +70,7 @@ mca_coll_basic_neighbor_allgather_cart(const void *sbuf, int scount,
|
|||||||
if (MPI_PROC_NULL != srank) {
|
if (MPI_PROC_NULL != srank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, srank,
|
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, srank,
|
||||||
MCA_COLL_BASE_TAG_ALLGATHER,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ mca_coll_basic_neighbor_allgather_cart(const void *sbuf, int scount,
|
|||||||
/* remove cast from const when the pml layer is updated to take
|
/* remove cast from const when the pml layer is updated to take
|
||||||
* a const for the send buffer. */
|
* a const for the send buffer. */
|
||||||
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, srank,
|
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, srank,
|
||||||
MCA_COLL_BASE_TAG_ALLGATHER,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1,
|
||||||
MCA_PML_BASE_SEND_STANDARD,
|
MCA_PML_BASE_SEND_STANDARD,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
@ -89,13 +89,13 @@ mca_coll_basic_neighbor_allgather_cart(const void *sbuf, int scount,
|
|||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, drank,
|
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, drank,
|
||||||
MCA_COLL_BASE_TAG_ALLGATHER,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
|
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, drank,
|
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, drank,
|
||||||
MCA_COLL_BASE_TAG_ALLGATHER,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim,
|
||||||
MCA_PML_BASE_SEND_STANDARD,
|
MCA_PML_BASE_SEND_STANDARD,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||||
* University Research and Technology
|
* University Research and Technology
|
||||||
* Corporation. All rights reserved.
|
* Corporation. All rights reserved.
|
||||||
* Copyright (c) 2004-2016 The University of Tennessee and The University
|
* Copyright (c) 2004-2019 The University of Tennessee and The University
|
||||||
* of Tennessee Research Foundation. All rights
|
* of Tennessee Research Foundation. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||||
@ -69,13 +69,14 @@ mca_coll_basic_neighbor_allgatherv_cart(const void *sbuf, int scount, struct omp
|
|||||||
if (MPI_PROC_NULL != srank) {
|
if (MPI_PROC_NULL != srank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv((char *) rbuf + disps[i] * extent, rcounts[i], rdtype, srank,
|
rc = MCA_PML_CALL(irecv((char *) rbuf + disps[i] * extent, rcounts[i], rdtype, srank,
|
||||||
MCA_COLL_BASE_TAG_ALLGATHER, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
|
|
||||||
/* remove cast from const when the pml layer is updated to take
|
/* remove cast from const when the pml layer is updated to take
|
||||||
* a const for the send buffer. */
|
* a const for the send buffer. */
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, srank, MCA_COLL_BASE_TAG_ALLGATHER,
|
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, srank,
|
||||||
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1,
|
||||||
MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
@ -83,11 +84,12 @@ mca_coll_basic_neighbor_allgatherv_cart(const void *sbuf, int scount, struct omp
|
|||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv((char *) rbuf + disps[i+1] * extent, rcounts[i+1], rdtype, drank,
|
rc = MCA_PML_CALL(irecv((char *) rbuf + disps[i+1] * extent, rcounts[i+1], rdtype, drank,
|
||||||
MCA_COLL_BASE_TAG_ALLGATHER, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
|
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, drank, MCA_COLL_BASE_TAG_ALLGATHER,
|
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, drank,
|
||||||
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim,
|
||||||
MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||||
* University Research and Technology
|
* University Research and Technology
|
||||||
* Corporation. All rights reserved.
|
* Corporation. All rights reserved.
|
||||||
* Copyright (c) 2004-2016 The University of Tennessee and The University
|
* Copyright (c) 2004-2019 The University of Tennessee and The University
|
||||||
* of Tennessee Research Foundation. All rights
|
* of Tennessee Research Foundation. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||||
@ -37,6 +37,10 @@
|
|||||||
#include "coll_basic.h"
|
#include "coll_basic.h"
|
||||||
#include "ompi/mca/topo/base/base.h"
|
#include "ompi/mca/topo/base/base.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We only have 1024 tags for the neighbor collective, so for now we only support
|
||||||
|
* 512 dimensions.
|
||||||
|
*/
|
||||||
static int
|
static int
|
||||||
mca_coll_basic_neighbor_alltoall_cart(const void *sbuf, int scount, struct ompi_datatype_t *sdtype, void *rbuf,
|
mca_coll_basic_neighbor_alltoall_cart(const void *sbuf, int scount, struct ompi_datatype_t *sdtype, void *rbuf,
|
||||||
int rcount, struct ompi_datatype_t *rdtype, struct ompi_communicator_t *comm,
|
int rcount, struct ompi_datatype_t *rdtype, struct ompi_communicator_t *comm,
|
||||||
@ -68,7 +72,7 @@ mca_coll_basic_neighbor_alltoall_cart(const void *sbuf, int scount, struct ompi_
|
|||||||
if (MPI_PROC_NULL != srank) {
|
if (MPI_PROC_NULL != srank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, srank,
|
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, srank,
|
||||||
MCA_COLL_BASE_TAG_NONBLOCKING_BASE - 2 * dim,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
@ -78,7 +82,7 @@ mca_coll_basic_neighbor_alltoall_cart(const void *sbuf, int scount, struct ompi_
|
|||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, drank,
|
rc = MCA_PML_CALL(irecv(rbuf, rcount, rdtype, drank,
|
||||||
MCA_COLL_BASE_TAG_NONBLOCKING_BASE - 2 * dim - 1,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
@ -105,7 +109,7 @@ mca_coll_basic_neighbor_alltoall_cart(const void *sbuf, int scount, struct ompi_
|
|||||||
* a const for the send buffer. */
|
* a const for the send buffer. */
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, srank,
|
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, srank,
|
||||||
MCA_COLL_BASE_TAG_NONBLOCKING_BASE - 2 * dim - 1,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1,
|
||||||
MCA_PML_BASE_SEND_STANDARD,
|
MCA_PML_BASE_SEND_STANDARD,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
@ -116,7 +120,7 @@ mca_coll_basic_neighbor_alltoall_cart(const void *sbuf, int scount, struct ompi_
|
|||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, drank,
|
rc = MCA_PML_CALL(isend((void *) sbuf, scount, sdtype, drank,
|
||||||
MCA_COLL_BASE_TAG_NONBLOCKING_BASE - 2 * dim,
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim,
|
||||||
MCA_PML_BASE_SEND_STANDARD,
|
MCA_PML_BASE_SEND_STANDARD,
|
||||||
comm, preqs++));
|
comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||||
* University Research and Technology
|
* University Research and Technology
|
||||||
* Corporation. All rights reserved.
|
* Corporation. All rights reserved.
|
||||||
* Copyright (c) 2004-2016 The University of Tennessee and The University
|
* Copyright (c) 2004-2019 The University of Tennessee and The University
|
||||||
* of Tennessee Research Foundation. All rights
|
* of Tennessee Research Foundation. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||||
@ -68,14 +68,14 @@ mca_coll_basic_neighbor_alltoallv_cart(const void *sbuf, const int scounts[], co
|
|||||||
if (MPI_PROC_NULL != srank) {
|
if (MPI_PROC_NULL != srank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i] * rdextent, rcounts[i], rdtype, srank,
|
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i] * rdextent, rcounts[i], rdtype, srank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i+1] * rdextent, rcounts[i+1], rdtype, drank,
|
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i+1] * rdextent, rcounts[i+1], rdtype, drank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,14 +98,14 @@ mca_coll_basic_neighbor_alltoallv_cart(const void *sbuf, const int scounts[], co
|
|||||||
nreqs++;
|
nreqs++;
|
||||||
/* remove cast from const when the pml layer is updated to take a const for the send buffer */
|
/* remove cast from const when the pml layer is updated to take a const for the send buffer */
|
||||||
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i] * sdextent, scounts[i], sdtype, srank,
|
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i] * sdextent, scounts[i], sdtype, srank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i+1] * sdextent, scounts[i+1], sdtype, drank,
|
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i+1] * sdextent, scounts[i+1], sdtype, drank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||||
* University Research and Technology
|
* University Research and Technology
|
||||||
* Corporation. All rights reserved.
|
* Corporation. All rights reserved.
|
||||||
* Copyright (c) 2004-2016 The University of Tennessee and The University
|
* Copyright (c) 2004-2019 The University of Tennessee and The University
|
||||||
* of Tennessee Research Foundation. All rights
|
* of Tennessee Research Foundation. All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||||
@ -65,14 +65,14 @@ mca_coll_basic_neighbor_alltoallw_cart(const void *sbuf, const int scounts[], co
|
|||||||
if (MPI_PROC_NULL != srank) {
|
if (MPI_PROC_NULL != srank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i], rcounts[i], rdtypes[i], srank,
|
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i], rcounts[i], rdtypes[i], srank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i+1], rcounts[i+1], rdtypes[i+1], drank,
|
rc = MCA_PML_CALL(irecv((char *) rbuf + rdisps[i+1], rcounts[i+1], rdtypes[i+1], drank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,14 +95,14 @@ mca_coll_basic_neighbor_alltoallw_cart(const void *sbuf, const int scounts[], co
|
|||||||
nreqs++;
|
nreqs++;
|
||||||
/* remove cast from const when the pml layer is updated to take a const for the send buffer */
|
/* remove cast from const when the pml layer is updated to take a const for the send buffer */
|
||||||
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i], scounts[i], sdtypes[i], srank,
|
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i], scounts[i], sdtypes[i], srank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim - 1, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL != drank) {
|
if (MPI_PROC_NULL != drank) {
|
||||||
nreqs++;
|
nreqs++;
|
||||||
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i+1], scounts[i+1], sdtypes[i+1], drank,
|
rc = MCA_PML_CALL(isend((char *) sbuf + sdisps[i+1], scounts[i+1], sdtypes[i+1], drank,
|
||||||
MCA_COLL_BASE_TAG_ALLTOALL, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
MCA_COLL_BASE_TAG_NEIGHBOR_BASE - 2 * dim, MCA_PML_BASE_SEND_STANDARD, comm, preqs++));
|
||||||
if (OMPI_SUCCESS != rc) break;
|
if (OMPI_SUCCESS != rc) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user