BioCMAMC-ST
iteration_payload.hpp
1#ifndef __ITERATION_PAYLOAD_HPP__
2#define __ITERATION_PAYLOAD_HPP__
3
4#include <cma_utils/alias.hpp>
5#include <mpi.h>
6#include <span>
7#include <vector>
8
9namespace WrapMPI
10{
11
20 {
21 public:
22 std::vector<double> liquid_volumes; // n_c
23 std::vector<std::size_t> liquid_neighbors_flat; // m*n_c
24 std::vector<double> proba_leaving_flat; // m*n_c
25 std::vector<double> liquid_out_flows; // n_c
26
27 /*
28 Estimated payload size with
29 n_c = 500
30 m =6
31 size = 56000 bytes ≈ 54.69 KiB ≈ 0.055 MB > Eager limit MPI should
32 triggers SM
33 */
34
45 explicit IterationPayload(size_t volumes);
46
60 bool recv(size_t source, MPI_Status* status) noexcept;
61 };
62
70 {
71 public:
72 void fill(const CmaUtils::IterationStatePtrType& current_reactor_state);
73
74 [[nodiscard]] bool sendAll(std::size_t n_rank) noexcept;
75
76 void wait() noexcept;
77#ifdef NDEBUG // FIXME Needed for unite test
78 private:
79#endif
80 std::span<const double> liquid_volumes;
81 std::span<const std::size_t> liquid_neighbors_flat;
82 std::span<const double> proba_leaving_flat;
83 std::span<const double> liquid_out_flows;
84
85 bool to_wait;
86
98 [[nodiscard]] bool send(size_t rank) noexcept;
99
100 static constexpr std::size_t n_vector_send = 4;
101 std::array<MPI_Request, n_vector_send> requests;
102 };
103
104} // namespace WrapMPI
105
106#endif //__ITERATION_PAYLOAD_HPP__
Represents the payload of data on the host side for an iteration.
Definition iteration_payload.hpp:70
void wait() noexcept
Definition iteration_payload.cpp:46
bool send(size_t rank) noexcept
Sends this payload to a specified MPI rank.
Definition iteration_payload.cpp:59
std::array< MPI_Request, n_vector_send > requests
Definition iteration_payload.hpp:101
bool to_wait
Definition iteration_payload.hpp:85
void fill(const CmaUtils::IterationStatePtrType &current_reactor_state)
Definition iteration_payload.cpp:108
std::span< const std::size_t > liquid_neighbors_flat
Definition iteration_payload.hpp:81
std::span< const double > proba_leaving_flat
Definition iteration_payload.hpp:82
std::span< const double > liquid_out_flows
Definition iteration_payload.hpp:83
std::span< const double > liquid_volumes
Definition iteration_payload.hpp:80
bool sendAll(std::size_t n_rank) noexcept
Definition iteration_payload.cpp:24
static constexpr std::size_t n_vector_send
Definition iteration_payload.hpp:100
bool recv(size_t source, MPI_Status *status) noexcept
Receives data for this payload from a specified source.
Definition iteration_payload.cpp:80
std::vector< std::size_t > liquid_neighbors_flat
Definition iteration_payload.hpp:23
IterationPayload(size_t volumes)
Constructs an IterationPayload with specified sizes for flows and volumes.
Definition iteration_payload.cpp:18
std::vector< double > liquid_volumes
Definition iteration_payload.hpp:22
std::vector< double > liquid_out_flows
Definition iteration_payload.hpp:25
std::vector< double > proba_leaving_flat
Definition iteration_payload.hpp:24
::rust::Box< ::IterationStateWrapper > IterationStatePtrType
Opaque type for iteration state.
Definition alias.hpp:20
Namespace to correclty wrap MPI C API for modern C++.
Definition impl_async.hpp:14
@ volumes
Definition iteration_payload.cpp:12