1 #include "../internal/monolish_internal.hpp"
2 #include "../internal/mpi/mpi_util.hpp"
13 void Isend_core(T val,
int dst,
int tag,
MPI_Comm comm,
14 std::vector<MPI_Request> &rq) {
18 #if defined MONOLISH_USE_MPI
20 rq.push_back(request);
21 MPI_Isend(&val, 1, internal::mpi::get_type(val), dst, tag, comm, &rq.back());
29 void Isend_core(
const std::vector<T> &vec,
int dst,
int tag,
MPI_Comm comm,
30 std::vector<MPI_Request> &rq) {
34 #if defined MONOLISH_USE_MPI
36 rq.push_back(request);
37 MPI_Isend(vec.data(), vec.size(), internal::mpi::get_type(vec.data()[0]), dst,
38 tag, comm, &rq.back());
47 std::vector<MPI_Request> &rq) {
51 #if defined MONOLISH_USE_MPI
52 MPI_Isend(vec.
data(), vec.
size(), internal::mpi::get_type(vec.
data()[0]), dst,
53 tag, comm, &rq.back());
65 void Irecv_core(T val,
int src,
int tag,
MPI_Comm comm,
66 std::vector<MPI_Request> &rq) {
70 #if defined MONOLISH_USE_MPI
72 rq.push_back(request);
73 MPI_Irecv(&val, 1, internal::mpi::get_type(val), src, tag, comm, &rq.back());
81 void Irecv_core(std::vector<T> &vec,
int src,
int tag,
MPI_Comm comm,
82 std::vector<MPI_Request> &rq) {
86 #if defined MONOLISH_USE_MPI
88 rq.push_back(request);
89 MPI_Irecv(vec.data(), vec.size(), internal::mpi::get_type(vec.data()[0]), src,
90 tag, comm, &rq.back());
99 std::vector<MPI_Request> &rq) {
103 #if defined MONOLISH_USE_MPI
105 rq.push_back(request);
106 MPI_Irecv(vec.
data(), vec.
size(), internal::mpi::get_type(vec.
data()[0]), src,
107 tag, comm, &rq.back());
113 void Waitall_core(std::vector<MPI_Request> &rq) {
117 #if defined MONOLISH_USE_MPI
118 std::vector<MPI_Status> stat(rq.size());
119 MPI_Waitall(rq.size(), rq.data(), stat.data());