-/* Copyright (c) 2013-2014. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2013-2017. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <math.h>
#include "smpi/mpi.h"
-#include "smpi/private.h"
+#include "src/smpi/private.h"
#include "xbt/ex.h"
#include "xbt.h"
+SG_BEGIN_DECL()
+
+
+namespace simgrid{
+namespace smpi{
+
#define COLL_DESCRIPTION(cat, ret, args, name) \
{# name,\
# cat " " # name " collective",\
- smpi_coll_tuned_ ## cat ## _ ## name}
+ (void*) Coll_ ## cat ## _ ## name::cat }
#define COLL_PROTO(cat, ret, args, name) \
- ret smpi_coll_tuned_ ## cat ## _ ## name(COLL_UNPAREN args);
+class Coll_ ## cat ## _ ## name : public Coll_ ## cat { \
+public: \
+static ret cat (COLL_UNPAREN args); \
+};
+
#define COLL_UNPAREN(...) __VA_ARGS__
#define COLL_APPLY(action, sig, name) action(sig, name)
/*************
* GATHER *
*************/
+
#define COLL_GATHER_SIG gather, int, \
(void *send_buff, int send_count, MPI_Datatype send_type, \
void *recv_buff, int recv_count, MPI_Datatype recv_type, \
int root, MPI_Comm comm)
#define COLL_GATHERS(action, COLL_sep) \
+COLL_APPLY(action, COLL_GATHER_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_GATHER_SIG, ompi) COLL_sep \
COLL_APPLY(action, COLL_GATHER_SIG, ompi_basic_linear) COLL_sep \
COLL_APPLY(action, COLL_GATHER_SIG, ompi_binomial) COLL_sep \
COLL_APPLY(action, COLL_GATHER_SIG, impi) COLL_sep \
COLL_APPLY(action, COLL_GATHER_SIG, automatic)
-
-
COLL_GATHERS(COLL_PROTO, COLL_NOsep)
/*************
MPI_Comm comm)
#define COLL_ALLGATHERS(action, COLL_sep) \
+COLL_APPLY(action, COLL_ALLGATHER_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHER_SIG, 2dmesh) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHER_SIG, 3dmesh) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHER_SIG, bruck) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHER_SIG, impi) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHER_SIG, automatic)
-
COLL_ALLGATHERS(COLL_PROTO, COLL_NOsep)
/**************
MPI_Datatype recv_type, MPI_Comm comm)
#define COLL_ALLGATHERVS(action, COLL_sep) \
+COLL_APPLY(action, COLL_ALLGATHERV_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHERV_SIG, GB) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHERV_SIG, pair) COLL_sep \
COLL_APPLY(action, COLL_ALLGATHERV_SIG, ring) COLL_sep \
MPI_Datatype dtype, MPI_Op op, MPI_Comm comm)
#define COLL_ALLREDUCES(action, COLL_sep) \
+COLL_APPLY(action, COLL_ALLREDUCE_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_ALLREDUCE_SIG, lr) COLL_sep \
COLL_APPLY(action, COLL_ALLREDUCE_SIG, rab1) COLL_sep \
COLL_APPLY(action, COLL_ALLREDUCE_SIG, rab2) COLL_sep \
COLL_ALLREDUCES(COLL_PROTO, COLL_NOsep)
-
/************
* ALLTOALL *
************/
MPI_Comm comm)
#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_APPLY(action, COLL_ALLTOALL_SIG, 3dmesh) COLL_sep \
+COLL_APPLY(action, COLL_ALLTOALL_SIG, basic_linear) COLL_sep \
COLL_APPLY(action, COLL_ALLTOALL_SIG, bruck) COLL_sep \
COLL_APPLY(action, COLL_ALLTOALL_SIG, pair) COLL_sep \
COLL_APPLY(action, COLL_ALLTOALL_SIG, pair_rma) COLL_sep \
MPI_Comm comm)
#define COLL_ALLTOALLVS(action, COLL_sep) \
+COLL_APPLY(action, COLL_ALLTOALLV_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_ALLTOALLV_SIG, bruck) COLL_sep \
COLL_APPLY(action, COLL_ALLTOALLV_SIG, pair) COLL_sep \
COLL_APPLY(action, COLL_ALLTOALLV_SIG, pair_light_barrier) COLL_sep \
int root, MPI_Comm comm)
#define COLL_BCASTS(action, COLL_sep) \
+COLL_APPLY(action, COLL_BCAST_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, arrival_pattern_aware) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, arrival_pattern_aware_wait) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, arrival_scatter) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, ompi_pipeline) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, mpich) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, mvapich2) COLL_sep \
+COLL_APPLY(action, COLL_BCAST_SIG, mvapich2_inter_node) COLL_sep \
+COLL_APPLY(action, COLL_BCAST_SIG, mvapich2_intra_node) COLL_sep \
+COLL_APPLY(action, COLL_BCAST_SIG, mvapich2_knomial_intra_node) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, impi) COLL_sep \
COLL_APPLY(action, COLL_BCAST_SIG, automatic)
MPI_Op op, int root, MPI_Comm comm)
#define COLL_REDUCES(action, COLL_sep) \
+COLL_APPLY(action, COLL_REDUCE_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_REDUCE_SIG, arrival_pattern_aware) COLL_sep \
COLL_APPLY(action, COLL_REDUCE_SIG, binomial) COLL_sep \
COLL_APPLY(action, COLL_REDUCE_SIG, flat_tree) COLL_sep \
MPI_Datatype dtype,MPI_Op op,MPI_Comm comm)
#define COLL_REDUCE_SCATTERS(action, COLL_sep) \
+COLL_APPLY(action, COLL_REDUCE_SCATTER_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_REDUCE_SCATTER_SIG, ompi) COLL_sep \
COLL_APPLY(action, COLL_REDUCE_SCATTER_SIG, ompi_basic_recursivehalving) COLL_sep \
COLL_APPLY(action, COLL_REDUCE_SCATTER_SIG, ompi_ring) COLL_sep \
int root, MPI_Comm comm)
#define COLL_SCATTERS(action, COLL_sep) \
+COLL_APPLY(action, COLL_SCATTER_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_SCATTER_SIG, ompi) COLL_sep \
COLL_APPLY(action, COLL_SCATTER_SIG, ompi_basic_linear) COLL_sep \
COLL_APPLY(action, COLL_SCATTER_SIG, ompi_binomial) COLL_sep \
(MPI_Comm comm)
#define COLL_BARRIERS(action, COLL_sep) \
+COLL_APPLY(action, COLL_BARRIER_SIG, default) COLL_sep \
COLL_APPLY(action, COLL_BARRIER_SIG, ompi) COLL_sep \
COLL_APPLY(action, COLL_BARRIER_SIG, ompi_basic_linear) COLL_sep \
COLL_APPLY(action, COLL_BARRIER_SIG, ompi_two_procs) COLL_sep \
COLL_BARRIERS(COLL_PROTO, COLL_NOsep)
+}
+}
+
+SG_END_DECL()
#endif