17#ifdef NF_WITH_MPI_SUPPORT
30class FullDuplexCommBuffer
37 FullDuplexCommBuffer() =
default;
46 MPIEnvironment mpiEnviron,
47 std::vector<std::size_t> sendSize,
48 std::vector<std::size_t> receiveSize
50 : send_(mpiEnviron, sendSize), receive_(mpiEnviron, receiveSize) {};
56 inline bool isCommInit()
const {
return send_.isCommInit() && receive_.isCommInit(); }
63 template<
typename valueType>
64 void initComm(std::string commName)
66 send_.initComm<valueType>(commName);
67 receive_.initComm<valueType>(commName);
76 template<
typename valueType>
77 View<valueType> getSend(
const size_t rank)
79 return send_.get<valueType>(rank);
88 template<
typename valueType>
89 View<const valueType> getSend(
const size_t rank)
const
91 return send_.get<valueType>(rank);
100 template<
typename valueType>
101 View<valueType> getReceive(
const size_t rank)
103 return receive_.get<valueType>(rank);
112 template<
typename valueType>
113 View<const valueType> getReceive(
const size_t rank)
const
115 return receive_.get<valueType>(rank);
121 inline void startComm()
131 inline bool isComplete() {
return send_.isComplete() && receive_.isComplete(); }
136 inline void waitComplete()
138 send_.waitComplete();
139 receive_.waitComplete();
145 inline void finaliseComm()
147 send_.finaliseComm();
148 receive_.finaliseComm();
153 HalfDuplexCommBuffer send_;
154 HalfDuplexCommBuffer receive_;