monolish  0.14.2
MONOlithic LIner equation Solvers for Highly-parallel architecture
send_recv.hpp
Go to the documentation of this file.
1 #include "../internal/monolish_internal.hpp"
2 #include "../internal/mpi/mpi_util.hpp"
3 
4 namespace monolish {
5 namespace {
6 
8 // send
10 
11 // Scalar
12 template <typename T> void Send_core(T val, int dst, int tag, MPI_Comm comm) {
13  Logger &logger = Logger::get_instance();
14  logger.util_in(monolish_func);
15 
16 #if defined MONOLISH_USE_MPI
17  MPI_Send(&val, 1, internal::mpi::get_type(val), dst, tag, comm);
18 #endif
19 
20  logger.util_out();
21 }
22 
23 // std::vector
24 template <typename T>
25 void Send_core(std::vector<T> &vec, int dst, int tag, MPI_Comm comm) {
26  Logger &logger = Logger::get_instance();
27  logger.util_in(monolish_func);
28 
29 #if defined MONOLISH_USE_MPI
30  MPI_Send(vec.data(), vec.size(), internal::mpi::get_type(vec[0]), dst, tag,
31  comm);
32 #endif
33 
34  logger.util_out();
35 }
36 
37 // monolish::vector
38 template <typename T>
39 void Send_core(monolish::vector<T> &vec, int dst, int tag, MPI_Comm comm) {
40  Logger &logger = Logger::get_instance();
41  logger.util_in(monolish_func);
42 
43 #if defined MONOLISH_USE_MPI
44  MPI_Send(vec.data(), vec.size(), internal::mpi::get_type(vec[0]), dst, tag,
45  comm);
46 #endif
47 
48  logger.util_out();
49 }
50 
52 // recv
54 
55 // Scalar
56 template <typename T>
57 MPI_Status Recv_core(T val, int src, int tag, MPI_Comm comm) {
58  Logger &logger = Logger::get_instance();
59  logger.util_in(monolish_func);
60 
61 #if defined MONOLISH_USE_MPI
62  MPI_Status stat;
63  MPI_Recv(&val, 1, internal::mpi::get_type(val), src, tag, comm, &stat);
64 #else
65  MPI_Status stat = 0;
66 #endif
67 
68  logger.util_out();
69  return stat;
70 }
71 
72 // std::vector
73 template <typename T>
74 MPI_Status Recv_core(std::vector<T> &vec, int src, int tag, MPI_Comm comm,
75  bool gpu_sync) {
76  Logger &logger = Logger::get_instance();
77  logger.util_in(monolish_func);
78 
79 #if defined MONOLISH_USE_MPI
80  MPI_Status stat;
81  MPI_Recv(vec.data(), vec.size(), internal::mpi::get_type(vec[0]), src, tag,
82  comm, &stat);
83 #else
84  MPI_Status stat = 0;
85 #endif
86 
87  logger.util_out();
88  return stat;
89 }
90 
91 // monolish::vector
92 template <typename T>
93 MPI_Status Recv_core(monolish::vector<T> &vec, int src, int tag,
94  MPI_Comm comm) {
95  Logger &logger = Logger::get_instance();
96  logger.util_in(monolish_func);
97 
98 #if defined MONOLISH_USE_MPI
99  MPI_Status stat;
100  MPI_Recv(vec.data(), vec.size(), internal::mpi::get_type(vec[0]), src, tag,
101  comm, &stat);
102 #else
103  MPI_Status stat = 0;
104 #endif
105 
106  logger.util_out();
107  return stat;
108 }
109 
110 } // namespace
111 } // namespace monolish
monolish_func
#define monolish_func
Definition: monolish_logger.hpp:9
monolish::vector::size
auto size() const
get vector size
Definition: monolish_vector.hpp:312
MPI_Status
int MPI_Status
Definition: mpi_dummy.hpp:37
monolish::vector::data
const Float * data() const
returns a direct pointer to the vector
Definition: monolish_vector.hpp:236
monolish
Definition: monolish_matrix_blas.hpp:10
MPI_Comm
struct ompi_communicator_t * MPI_Comm
Definition: mpi_dummy.hpp:40
monolish::vector
vector class
Definition: monolish_coo.hpp:32
monolish::Logger::get_instance
static Logger & get_instance()
Definition: monolish_logger.hpp:42