All Classes Namespaces Functions Variables Typedefs Enumerations Friends
request_tag_multi.h
1 
5 #pragma once
6 
7 #include <memory>
8 #include <mutex>
9 #include <string>
10 #include <vector>
11 
12 #include <ucp/api/ucp.h>
13 
14 #include <ucxx/buffer.h>
15 #include <ucxx/endpoint.h>
16 #include <ucxx/future.h>
17 #include <ucxx/request.h>
18 
19 namespace ucxx {
20 
21 class RequestTagMulti;
22 
30 struct BufferRequest {
31  std::shared_ptr<Request> request{nullptr};
32  std::shared_ptr<std::string> stringBuffer{nullptr};
33  std::shared_ptr<Buffer> buffer{nullptr};
34 
35  BufferRequest();
36  ~BufferRequest();
37 
38  BufferRequest(const BufferRequest&) = delete;
39  BufferRequest& operator=(BufferRequest const&) = delete;
40  BufferRequest(BufferRequest&& o) = delete;
41  BufferRequest& operator=(BufferRequest&& o) = delete;
42 };
43 
49 typedef std::shared_ptr<BufferRequest> BufferRequestPtr;
50 
60 class RequestTagMulti : public Request {
61  private:
62  size_t _totalFrames{0};
63  std::mutex
64  _completedRequestsMutex{};
65  size_t _completedRequests{0};
66  ucs_status_t _finalStatus{
67  UCS_OK};
68 
69  public:
70  std::vector<BufferRequestPtr> _bufferRequests{};
71  bool _isFilled{false};
72 
73  private:
74  RequestTagMulti() = delete;
75  RequestTagMulti(const RequestTagMulti&) = delete;
76  RequestTagMulti& operator=(RequestTagMulti const&) = delete;
77  RequestTagMulti(RequestTagMulti&& o) = delete;
78  RequestTagMulti& operator=(RequestTagMulti&& o) = delete;
79 
99  RequestTagMulti(std::shared_ptr<Endpoint> endpoint,
100  const std::variant<data::TagMultiSend, data::TagMultiReceive> requestData,
101  const std::string operationName,
102  const bool enablePythonFuture);
103 
117  void recvFrames();
118 
128  void recvHeader();
129 
135  void send();
136 
137  public:
174  friend std::shared_ptr<RequestTagMulti> createRequestTagMulti(
175  std::shared_ptr<Endpoint> endpoint,
176  const std::variant<data::TagMultiSend, data::TagMultiReceive> requestData,
177  const bool enablePythonFuture);
178 
184  virtual ~RequestTagMulti();
185 
202  void markCompleted(ucs_status_t status);
203 
220  void recvCallback(ucs_status_t status);
221 
222  void populateDelayedSubmission() override;
223 
224  void cancel() override;
225 };
226 
232 typedef std::shared_ptr<RequestTagMulti> RequestTagMultiPtr;
233 
234 } // namespace ucxx
Send or receive multiple messages with the UCX Tag API.
Definition: request_tag_multi.h:60
void recvCallback(ucs_status_t status)
Callback to submit request to receive new header or frames.
virtual ~RequestTagMulti()
ucxx::RequestTagMulti destructor.
void populateDelayedSubmission() override
Populate the internal submission dispatcher.
bool _isFilled
Whether the all requests have been posted.
Definition: request_tag_multi.h:71
void markCompleted(ucs_status_t status)
Mark request as completed.
void cancel() override
Cancel the request.
std::vector< BufferRequestPtr > _bufferRequests
Container of all requests posted.
Definition: request_tag_multi.h:70
friend std::shared_ptr< RequestTagMulti > createRequestTagMulti(std::shared_ptr< Endpoint > endpoint, const std::variant< data::TagMultiSend, data::TagMultiReceive > requestData, const bool enablePythonFuture)
Enqueue a multi-buffer tag send operation.
Base type for a UCXX transfer request.
Definition: request.h:38
Definition: address.h:15
std::shared_ptr< BufferRequest > BufferRequestPtr
Pre-defined type for a pointer to an ucxx::BufferRequest.
Definition: request_tag_multi.h:49
std::shared_ptr< RequestTagMulti > RequestTagMultiPtr
Pre-defined type for a pointer to an ucxx::RequestTagMulti.
Definition: request_tag_multi.h:232
Container for data required by a ucxx::RequestTagMulti.
Definition: request_tag_multi.h:30
std::shared_ptr< Buffer > buffer
Internally allocated buffer to receive a frame.
Definition: request_tag_multi.h:33
std::shared_ptr< std::string > stringBuffer
Serialized Header
Definition: request_tag_multi.h:32
std::shared_ptr< Request > request
The ucxx::RequestTag of a header or frame.
Definition: request_tag_multi.h:31