numerics 0.1.0
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) {
7 MPI_Init(argc, argv);
8}
9void finalize() {
10 MPI_Finalize();
11}
12
13int rank(MPI_Comm comm) {
14 int r;
15 MPI_Comm_rank(comm, &r);
16 return r;
17}
18
19int size(MPI_Comm comm) {
20 int s;
21 MPI_Comm_size(comm, &s);
22 return s;
23}
24
25real dot(const Vector& x, const Vector& y, MPI_Comm comm) {
26 real local = num::dot(x, y), global;
27 MPI_Allreduce(&local, &global, 1, MPI_DOUBLE, MPI_SUM, comm);
28 return global;
29}
30
31real norm(const Vector& x, MPI_Comm comm) {
32 real local_sq = num::dot(x, x), global_sq;
33 MPI_Allreduce(&local_sq, &global_sq, 1, MPI_DOUBLE, MPI_SUM, comm);
34 return std::sqrt(global_sq);
35}
36
37void allreduce_sum(real* data, idx n, MPI_Comm comm) {
38 MPI_Allreduce(MPI_IN_PLACE,
39 data,
40 static_cast<int>(n),
41 MPI_DOUBLE,
42 MPI_SUM,
43 comm);
44}
45
46void broadcast(real* data, idx n, int root, MPI_Comm comm) {
47 MPI_Bcast(data, static_cast<int>(n), MPI_DOUBLE, root, comm);
48}
49
50} // 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:46
void allreduce_sum(real *data, idx n, MPI_Comm comm=MPI_COMM_WORLD)
Allreduce sum.
Definition mpi_ops.cpp:37
real norm(const Vector &x, MPI_Comm comm=MPI_COMM_WORLD)
Distributed norm.
Definition mpi_ops.cpp:31
void init(int *argc, char ***argv)
Initialize MPI (call once)
Definition mpi_ops.cpp:6
void finalize()
Finalize MPI.
Definition mpi_ops.cpp:9
int size(MPI_Comm comm=MPI_COMM_WORLD)
Get communicator size.
Definition mpi_ops.cpp:19
int rank(MPI_Comm comm=MPI_COMM_WORLD)
Get communicator rank.
Definition mpi_ops.cpp:13
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:25
double real
Definition types.hpp:10
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:79