endpoint.h
1 
5 #pragma once
6 
7 #include <netdb.h>
8 
9 #include <memory>
10 #include <string>
11 #include <vector>
12 
13 #include <ucp/api/ucp.h>
14 
15 #include <ucxx/address.h>
16 #include <ucxx/component.h>
17 #include <ucxx/endpoint_builder.h>
18 #include <ucxx/exception.h>
19 #include <ucxx/inflight_requests.h>
20 #include <ucxx/listener.h>
21 #include <ucxx/remote_key_builder.h>
22 #include <ucxx/request.h>
23 #include <ucxx/request_am_builder.h>
24 #include <ucxx/request_endpoint_close_builder.h>
25 #include <ucxx/request_flush_builder.h>
26 #include <ucxx/request_mem_builder.h>
27 #include <ucxx/request_stream_builder.h>
28 #include <ucxx/request_tag_builder.h>
29 #include <ucxx/request_tag_multi_builder.h>
30 #include <ucxx/typedefs.h>
31 #include <ucxx/utils/sockaddr.h>
32 #include <ucxx/worker.h>
33 
34 namespace ucxx {
35 
36 class Component;
37 class Request;
38 class RequestEndpointClose;
39 
40 class RequestEndpointCloseBuilder;
41 
42 namespace detail {
43 void registerInflightRequest(std::shared_ptr<Component> component, std::shared_ptr<Request> req);
44 } // namespace detail
45 
60  void operator()(ucp_ep_params_t* ptr);
61 };
62 
69 class Endpoint : public Component {
70  private:
71  ucp_ep_h _handle{nullptr};
72  ucp_ep_h _originalHandle{nullptr};
74  bool _endpointErrorHandling{true};
75  std::unique_ptr<InflightRequests> _inflightRequests{
76  std::make_unique<InflightRequests>()};
77  std::mutex _mutex{};
80  ucs_status_t _status{UCS_INPROGRESS};
81  std::atomic<bool> _closing{false};
82  EndpointCloseCallbackUserFunction _closeCallback{nullptr};
83  EndpointCloseCallbackUserData _closeCallbackArg{
84  nullptr};
85 
107  Endpoint(std::shared_ptr<Component> workerOrListener, bool endpointErrorHandling);
108 
118  void create(ucp_ep_params_t* params);
119 
131  [[nodiscard]] std::shared_ptr<Request> registerInflightRequest(std::shared_ptr<Request> request);
132 
148  [[nodiscard]] std::shared_ptr<RequestEndpointClose> closeRequest(
149  const bool force,
150  const bool enablePythonFuture,
151  EndpointCloseCallbackUserFunction callbackFunction,
152  EndpointCloseCallbackUserData callbackData);
153 
164  friend void endpointErrorCallback(void* arg, ucp_ep_h ep, ucs_status_t status);
165 
170 
174  friend void detail::registerInflightRequest(std::shared_ptr<Component> component,
175  std::shared_ptr<Request> req);
176 
177  public:
178  Endpoint() = delete;
179  Endpoint(const Endpoint&) = delete;
180  Endpoint& operator=(Endpoint const&) = delete;
181  Endpoint(Endpoint&& o) = delete;
182  Endpoint& operator=(Endpoint&& o) = delete;
183 
184  ~Endpoint();
185 
186  // Allow internal construction without exposing factory functions.
187  friend class detail::ConstructorFactory;
188 
204  [[nodiscard]] ucp_ep_h getHandle();
205 
217  [[nodiscard]] bool isAlive() const;
218 
228  void raiseOnError();
229 
239  void removeInflightRequest(std::shared_ptr<Request> request);
240 
252 
262  [[nodiscard]] size_t getCancelingSize() const;
263 
285  size_t cancelInflightRequestsBlocking(uint64_t period = 0, uint64_t maxAttempts = 1);
286 
305  EndpointCloseCallbackUserData closeCallbackArg);
306 
319  [[nodiscard]] RequestAmBuilder amSendBuilder(const void* const buffer,
320  const size_t length,
321  const ucs_memory_type_t memoryType);
322 
335  [[nodiscard]] RequestAmBuilder amSendBuilder(const void* const buffer,
336  const size_t length,
337  const AmSendParams& params);
338 
351  [[nodiscard]] RequestAmBuilder amSendBuilder(std::vector<ucp_dt_iov_t> iov,
352  const AmSendParams& params);
353 
363 
378  [[nodiscard]] RequestMemBuilder memPutBuilder(const void* const buffer,
379  size_t length,
380  uint64_t remoteAddr,
381  ucp_rkey_h rkey);
382 
396  [[nodiscard]] RequestMemBuilder memPutBuilder(const void* const buffer,
397  size_t length,
398  std::shared_ptr<ucxx::RemoteKey> remoteKey);
399 
414  [[nodiscard]] RequestMemBuilder memGetBuilder(void* buffer,
415  size_t length,
416  uint64_t remoteAddr,
417  ucp_rkey_h rkey);
418 
432  [[nodiscard]] RequestMemBuilder memGetBuilder(void* buffer,
433  size_t length,
434  std::shared_ptr<ucxx::RemoteKey> remoteKey);
435 
447  [[nodiscard]] RequestStreamBuilder streamSendBuilder(const void* const buffer, size_t length);
448 
461  [[nodiscard]] RequestStreamBuilder streamRecvBuilder(void* buffer, size_t length);
462 
475  [[nodiscard]] RequestTagBuilder tagSendBuilder(const void* const buffer, size_t length, Tag tag);
476 
491  [[nodiscard]] RequestTagBuilder tagRecvBuilder(void* buffer,
492  size_t length,
493  Tag tag,
494  TagMask tagMask);
495 
509  [[nodiscard]] RequestTagMultiBuilder tagMultiSendBuilder(const std::vector<const void*>& buffer,
510  const std::vector<size_t>& size,
511  const std::vector<int>& isCUDA,
512  const Tag tag);
513 
525  [[nodiscard]] RequestTagMultiBuilder tagMultiRecvBuilder(const Tag tag, const TagMask tagMask);
526 
536 
547  [[nodiscard]] std::shared_ptr<Worker> getWorker();
548 
558  [[nodiscard]] RemoteKeyBuilder remoteKeyBuilder(SerializedRemoteKey serializedRemoteKey);
559 
569 
592  void closeBlocking(uint64_t period = 0, uint64_t maxAttempts = 1);
593 };
594 
595 } // namespace ucxx
A UCXX component class to prevent early destruction of parent object.
Definition: component.h:21
Component encapsulating a UCP endpoint.
Definition: endpoint.h:69
RequestAmBuilder amRecvBuilder()
Create a builder for an active message receive operation.
RequestEndpointCloseBuilder closeBuilder()
Create a builder for a non-blocking endpoint close operation.
RequestMemBuilder memGetBuilder(void *buffer, size_t length, uint64_t remoteAddr, ucp_rkey_h rkey)
Create a builder for a memory get operation.
void removeInflightRequest(std::shared_ptr< Request > request)
Remove reference to request from internal container.
RequestTagBuilder tagSendBuilder(const void *const buffer, size_t length, Tag tag)
Create a builder for a tag send operation.
RequestMemBuilder memPutBuilder(const void *const buffer, size_t length, std::shared_ptr< ucxx::RemoteKey > remoteKey)
Create a builder for a memory put operation.
bool isAlive() const
Check whether the endpoint is still alive.
RemoteKeyBuilder remoteKeyBuilder(SerializedRemoteKey serializedRemoteKey)
Create a builder for a remote key from serialized data.
RequestTagMultiBuilder tagMultiSendBuilder(const std::vector< const void * > &buffer, const std::vector< size_t > &size, const std::vector< int > &isCUDA, const Tag tag)
Create a builder for a multi-buffer tag send operation.
RequestMemBuilder memGetBuilder(void *buffer, size_t length, std::shared_ptr< ucxx::RemoteKey > remoteKey)
Create a builder for a memory get operation.
RequestStreamBuilder streamRecvBuilder(void *buffer, size_t length)
Create a builder for a stream receive operation.
size_t cancelInflightRequests()
Cancel inflight requests.
RequestFlushBuilder flushBuilder()
Create a builder for a flush operation.
size_t cancelInflightRequestsBlocking(uint64_t period=0, uint64_t maxAttempts=1)
Cancel inflight requests.
void setCloseCallback(EndpointCloseCallbackUserFunction closeCallback, EndpointCloseCallbackUserData closeCallbackArg)
Register a user-defined callback to call when endpoint closes.
friend void detail::registerInflightRequest(std::shared_ptr< Component > component, std::shared_ptr< Request > req)
Allow request builders to register newly-created requests.
RequestAmBuilder amSendBuilder(std::vector< ucp_dt_iov_t > iov, const AmSendParams ¶ms)
Create a builder for an active message send operation with IOV datatype.
std::shared_ptr< Worker > getWorker()
Get ucxx::Worker component from a worker or listener object.
friend void endpointErrorCallback(void *arg, ucp_ep_h ep, ucs_status_t status)
The error callback registered at endpoint creation time.
ucp_ep_h getHandle()
Get the underlying ucp_ep_h handle.
RequestStreamBuilder streamSendBuilder(const void *const buffer, size_t length)
Create a builder for a stream send operation.
size_t getCancelingSize() const
Check the number of inflight requests being canceled.
void raiseOnError()
Raises an exception if an error occurred.
RequestMemBuilder memPutBuilder(const void *const buffer, size_t length, uint64_t remoteAddr, ucp_rkey_h rkey)
Create a builder for a memory put operation.
void closeBlocking(uint64_t period=0, uint64_t maxAttempts=1)
Close the endpoint while keeping the object alive.
RequestAmBuilder amSendBuilder(const void *const buffer, const size_t length, const AmSendParams ¶ms)
Create a builder for an active message send operation with explicit policy parameters.
RequestTagMultiBuilder tagMultiRecvBuilder(const Tag tag, const TagMask tagMask)
Create a builder for a multi-buffer tag receive operation.
RequestAmBuilder amSendBuilder(const void *const buffer, const size_t length, const ucs_memory_type_t memoryType)
Create a builder for an active message send operation.
RequestTagBuilder tagRecvBuilder(void *buffer, size_t length, Tag tag, TagMask tagMask)
Create a builder for a tag receive operation.
Builder class for constructing std::shared_ptr<ucxx::RemoteKey> objects.
Definition: remote_key_builder.h:25
Builder class for constructing std::shared_ptr<ucxx::RequestAm> objects.
Definition: request_am_builder.h:41
Builder class for constructing std::shared_ptr<ucxx::RequestEndpointClose> objects.
Definition: request_endpoint_close_builder.h:41
Builder class for constructing std::shared_ptr<ucxx::RequestFlush> objects.
Definition: request_flush_builder.h:39
Builder class for constructing std::shared_ptr<ucxx::RequestMem> objects.
Definition: request_mem_builder.h:40
Builder class for constructing std::shared_ptr<ucxx::RequestStream> objects.
Definition: request_stream_builder.h:38
Builder class for constructing std::shared_ptr<ucxx::RequestTag> objects.
Definition: request_tag_builder.h:40
Builder class for constructing std::shared_ptr<ucxx::RequestTagMulti> objects.
Definition: request_tag_multi_builder.h:38
Definition: address.h:16
RequestCallbackUserData EndpointCloseCallbackUserData
Data for the user-defined function provided to endpoint close callback.
Definition: typedefs.h:121
const std::string SerializedRemoteKey
Serialized form of a remote key.
Definition: typedefs.h:304
RequestCallbackUserFunction EndpointCloseCallbackUserFunction
A user-defined function to execute after an endpoint closes.
Definition: typedefs.h:113
TagMask
Strong type for a UCP tag mask.
Definition: typedefs.h:74
Tag
Strong type for a UCP tag.
Definition: typedefs.h:66
Parameters controlling Active Message send behavior.
Definition: typedefs.h:257
Deleter for a endpoint parameters object.
Definition: endpoint.h:52
void operator()(ucp_ep_params_t *ptr)
Execute the deletion.