simple bruck basic_linear pairwise)
ADD_TEST(smpi-alltoall-coll-${ALLTOALL_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/alltoall:${ALLTOALL_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoall_coll.tesh)
ENDFOREACH()
- FOREACH (ALLTOALLV_COLL default)
+ FOREACH (ALLTOALLV_COLL default pairwise)
ADD_TEST(smpi-alltoallv-coll-${ALLTOALLV_COLL} ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg smpi/alltoallv:${ALLTOALLV_COLL} --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv_coll.tesh)
ENDFOREACH()
FOREACH (BCAST_COLL default arrival_nb arrival_pattern_aware arrival_pattern_aware_wait arrival_scatter
src/smpi/colls/alltoall-ring-mpi-barrier.c
src/smpi/colls/alltoall-ring-one-barrier.c
src/smpi/colls/alltoall-simple.c
+ src/smpi/colls/alltoallv-pairwise.c
src/smpi/colls/bcast-arrival-nb.c
src/smpi/colls/bcast-arrival-pattern-aware.c
src/smpi/colls/bcast-arrival-pattern-aware-wait.c
--- /dev/null
+#include "colls_private.h"
+
+int smpi_coll_tuned_alltoallv_pairwise(void *sendbuf, int *sendcounts, int *senddisps,
+ MPI_Datatype sendtype, void *recvbuf,
+ int *recvcounts, int *recvdisps, MPI_Datatype recvtype,
+ MPI_Comm comm)
+{
+ int system_tag = 999;
+ int rank, size, step, sendto, recvfrom, sendsize, recvsize;
+
+ rank = smpi_comm_rank(comm);
+ size = smpi_comm_size(comm);
+ XBT_DEBUG("<%d> algorithm alltoallv_pairwise() called.", rank);
+ sendsize = smpi_datatype_size(sendtype);
+ recvsize = smpi_datatype_size(recvtype);
+ /* Perform pairwise exchange - starting from 1 so the local copy is last */
+ for (step = 1; step < size + 1; step++) {
+ /* who do we talk to in this step? */
+ sendto = (rank + step) % size;
+ recvfrom = (rank + size - step) % size;
+ /* send and receive */
+ smpi_mpi_sendrecv(&((char *) sendbuf)[senddisps[sendto] * sendsize * sendcounts[sendto]],
+ sendcounts[sendto], sendtype, sendto, system_tag,
+ &((char *) recvbuf)[recvdisps[recvfrom] * recvsize * recvcounts[recvfrom]],
+ recvcounts[recvfrom], recvtype, recvfrom, system_tag, comm,
+ MPI_STATUS_IGNORE);
+ }
+ return MPI_SUCCESS;
+}
+
COLL_ALLTOALLS(COLL_PROTO, COLL_NOsep)
+/*************
+ * ALLTOALLV *
+ *************/
+#define COLL_ALLTOALLV_SIG alltoallv, int, \
+ (void *send_buff, int *send_counts, int *send_disps, MPI_Datatype send_type, \
+ void *recv_buff, int *recv_counts, int *recv_disps, MPI_Datatype recv_type, \
+ MPI_Comm com)
+
+#define COLL_ALLTOALLVS(action, COLL_sep) \
+COLL_APPLY(action, COLL_ALLTOALLV_SIG, pairwise)
+
+COLL_ALLTOALLVS(COLL_PROTO, COLL_NOsep)
/*********
* BCAST *
{"default",
"Ompi alltoallv default collective",
smpi_coll_basic_alltoallv},
-
+COLL_ALLTOALLVS(COLL_DESCRIPTION, COLL_COMMA),
{NULL, NULL, NULL} /* this array must be NULL terminated */
};