numerics
Loading...
Searching...
No Matches
mpi_ops.hpp
Go to the documentation of this file.
1/// @file mpi_ops.hpp
2/// @brief MPI distributed operations
3#pragma once
4
5#include "core/vector.hpp"
6#include "core/matrix.hpp"
7
8#ifdef NUMERICS_HAS_MPI
9#include <mpi.h>
10#else
11using MPI_Comm = int;
13#endif
14
15namespace num::mpi {
16
17/// @brief Initialize MPI (call once)
18void init(int* argc, char*** argv);
19
20/// @brief Finalize MPI
21void finalize();
22
23/// @brief Get communicator rank
25
26/// @brief Get communicator size
28
29/// @brief Distributed dot product (each rank holds partial vector)
30real dot(const Vector& x, const Vector& y, MPI_Comm comm = MPI_COMM_WORLD);
31
32/// @brief Distributed norm
34
35/// @brief Allreduce sum
37
38/// @brief Broadcast from root
39void broadcast(real* data, idx n, int root = 0, MPI_Comm comm = MPI_COMM_WORLD);
40
41} // namespace num::mpi
Matrix operations.
constexpr MPI_Comm MPI_COMM_WORLD
Definition mpi_ops.hpp:12
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
Vector operations.