#ifndef SMPI_COLL_HPP
#define SMPI_COLL_HPP
-#include <xbt/base.h>
-
-#include "private.h"
+#include "xbt/base.h"
/** \brief MPI collective description */
#define COLL_APPLY(action, sig, name) action(sig, name)
#define COLL_COMMA ,
-#define COLL_NOsep
-#define COLL_NOTHING(...)
+#define COLL_NOsep
+#define COLL_NOTHING(...)
#define COLL_GATHER_SIG gather, int, \
(void *send_buff, int send_count, MPI_Datatype send_type, \
class Colls{
public:
-
static XBT_PUBLIC(void) coll_help(const char *category, s_mpi_coll_description_t * table);
static XBT_PUBLIC(int) find_coll_description(s_mpi_coll_description_t * table, const char *name, const char *desc);
static void set_collectives();
- // for each collective type, create the set_* prototype, the description array
- // and the function pointer
- COLL_APPLY(COLL_DEFS,COLL_GATHER_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_ALLGATHER_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_ALLGATHERV_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_REDUCE_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_ALLREDUCE_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_REDUCE_SCATTER_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_SCATTER_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_BARRIER_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_BCAST_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_ALLTOALL_SIG,"");
- COLL_APPLY(COLL_DEFS,COLL_ALLTOALLV_SIG,"");
-
-//These fairly unused collectives only have one implementation in SMPI
-
- static int gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm);
- static int scatterv(void *sendbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm);
- static int scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm);
- static int exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm);
+ // for each collective type, create the set_* prototype, the description array and the function pointer
+ COLL_APPLY(COLL_DEFS, COLL_GATHER_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_ALLGATHER_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_ALLGATHERV_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_REDUCE_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_ALLREDUCE_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_REDUCE_SCATTER_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_SCATTER_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_BARRIER_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_BCAST_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_ALLTOALL_SIG, "");
+ COLL_APPLY(COLL_DEFS, COLL_ALLTOALLV_SIG, "");
+
+ // These fairly unused collectives only have one implementation in SMPI
+ static int gatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int* recvcounts, int* displs,
+ MPI_Datatype recvtype, int root, MPI_Comm comm);
+ static int scatterv(void* sendbuf, int* sendcounts, int* displs, MPI_Datatype sendtype, void* recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm);
+ static int scan(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm);
+ static int exscan(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm);
static void (*smpi_coll_cleanup_callback)();
};
* ALLTOALL *
************/
-
#define COLL_ALLTOALLS(action, COLL_sep) \
COLL_APPLY(action, COLL_ALLTOALL_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_ALLTOALL_SIG, 2dmesh) COLL_sep \
COLL_BCASTS(COLL_PROTO, COLL_NOsep)
-
/**********
* REDUCE *
**********/
COLL_APPLY(action, COLL_REDUCE_SCATTER_SIG, impi) COLL_sep \
COLL_APPLY(action, COLL_REDUCE_SCATTER_SIG, automatic)
-
-
COLL_REDUCE_SCATTERS(COLL_PROTO, COLL_NOsep)
-
/*************
* SCATTER *
*************/
COLL_BARRIERS(COLL_PROTO, COLL_NOsep)
-
}
}
-
#endif