9 MPI_Datatype type = get_mpi_datatype<T>(*input);
11 MPI_Gather(
const_cast<T*
>(input), count, type, output, count, type, root, *
comm_m);
16 MPI_Datatype type = get_mpi_datatype<T>(*input);
18 MPI_Scatter(
const_cast<T*
>(input), count, type, output, count, type, root, *
comm_m);
21 template <
typename T,
class Op>
23 MPI_Datatype type = get_mpi_datatype<T>(*input);
25 MPI_Op mpiOp = get_mpi_op<Op, T>();
27 MPI_Reduce(
const_cast<T*
>(input), output, count, type, mpiOp, root, *
comm_m);
30 template <
typename T,
class Op>
32 reduce(&input, &output, count, op, root);
35 template <
typename T,
class Op>
37 MPI_Datatype type = get_mpi_datatype<T>(*input);
39 MPI_Op mpiOp = get_mpi_op<Op, T>();
41 MPI_Allreduce(
const_cast<T*
>(input), output, count, type, mpiOp, *
comm_m);
44 template <
typename T,
class Op>
49 template <
typename T,
class Op>
51 MPI_Datatype type = get_mpi_datatype<T>(*inout);
53 MPI_Op mpiOp = get_mpi_op<Op, T>();
55 MPI_Allreduce(MPI_IN_PLACE, inout, count, type, mpiOp, *
comm_m);
58 template <
typename T,
class Op>
Implementations for FFT constructor/destructor and transforms.
void scatter(const T *input, T *output, int count, int root=0)
void reduce(const T *input, T *output, int count, Op op, int root=0)
std::shared_ptr< MPI_Comm > comm_m
void allreduce(const T *input, T *output, int count, Op op)
void gather(const T *input, T *output, int count, int root=0)