numerics
Loading...
Searching...
No Matches
mpi_ops.cpp
Go to the documentation of this file.
2#include <cmath>
3
4namespace num::mpi {
5
6void init(int* argc, char*** argv) { MPI_Init(argc, argv); }
7void finalize() { MPI_Finalize(); }
8
10 int r; MPI_Comm_rank(comm, &r); return r;
11}
12
14 int s; MPI_Comm_size(comm, &s); return s;
15}
16
17real dot(const Vector& x, const Vector& y, MPI_Comm comm) {
18 real local = num::dot(x, y), global;
20 return global;
21}
22
26 return std::sqrt(global_sq);
27}
28
30 MPI_Allreduce(MPI_IN_PLACE, data, static_cast<int>(n), MPI_DOUBLE, MPI_SUM, comm);
31}
32
33void broadcast(real* data, idx n, int root, MPI_Comm comm) {
34 MPI_Bcast(data, static_cast<int>(n), MPI_DOUBLE, root, comm);
35}
36
37} // namespace num::mpi
MPI distributed operations.
int MPI_Comm
Definition mpi_ops.hpp:11
void broadcast(real *data, idx n, int root=0, MPI_Comm comm=MPI_COMM_WORLD)
Broadcast from root.
Definition mpi_ops.cpp:33
void allreduce_sum(real *data, idx n, MPI_Comm comm=MPI_COMM_WORLD)
Allreduce sum.
Definition mpi_ops.cpp:29
real norm(const Vector &x, MPI_Comm comm=MPI_COMM_WORLD)
Distributed norm.
Definition mpi_ops.cpp:23
void init(int *argc, char ***argv)
Initialize MPI (call once)
Definition mpi_ops.cpp:6
void finalize()
Finalize MPI.
Definition mpi_ops.cpp:7
int size(MPI_Comm comm=MPI_COMM_WORLD)
Get communicator size.
Definition mpi_ops.cpp:13
int rank(MPI_Comm comm=MPI_COMM_WORLD)
Get communicator rank.
Definition mpi_ops.cpp:9
real dot(const Vector &x, const Vector &y, MPI_Comm comm=MPI_COMM_WORLD)
Distributed dot product (each rank holds partial vector)
Definition mpi_ops.cpp:17
double real
Definition types.hpp:10
constexpr T ipow(T x) noexcept
Compute x^N at compile time via repeated squaring.
std::size_t idx
Definition types.hpp:11
real dot(const Vector &x, const Vector &y, Backend b=default_backend)
dot product
Definition vector.cpp:57