15#ifdef NF_WITH_MPI_SUPPORT
28class FullDuplexCommBuffer
35 FullDuplexCommBuffer() =
default;
44 MPIEnvironment mpiEnviron,
45 std::vector<std::size_t> sendSize,
46 std::vector<std::size_t> receiveSize
48 : send_(mpiEnviron, sendSize), receive_(mpiEnviron, receiveSize) {};
54 inline bool isCommInit()
const {
return send_.isCommInit() && receive_.isCommInit(); }
61 template<
typename valueType>
62 void initComm(std::string commName)
64 send_.initComm<valueType>(commName);
65 receive_.initComm<valueType>(commName);
74 template<
typename valueType>
75 std::span<valueType> getSend(
const size_t rank)
77 return send_.get<valueType>(rank);
86 template<
typename valueType>
87 std::span<const valueType> getSend(
const size_t rank)
const
89 return send_.get<valueType>(rank);
98 template<
typename valueType>
99 std::span<valueType> getReceive(
const size_t rank)
101 return receive_.get<valueType>(rank);
110 template<
typename valueType>
111 std::span<const valueType> getReceive(
const size_t rank)
const
113 return receive_.get<valueType>(rank);
119 inline void startComm()
129 inline bool isComplete() {
return send_.isComplete() && receive_.isComplete(); }
134 inline void waitComplete()
136 send_.waitComplete();
137 receive_.waitComplete();
143 inline void finaliseComm()
145 send_.finaliseComm();
146 receive_.finaliseComm();
151 HalfDuplexCommBuffer send_;
152 HalfDuplexCommBuffer receive_;