All Classes Namespaces Functions Variables Typedefs Enumerations Friends
request_data.h
1 
5 #pragma once
6 
7 #include <memory>
8 #include <optional>
9 #include <variant>
10 #include <vector>
11 
12 #include <ucp/api/ucp.h>
13 
14 #include <ucxx/typedefs.h>
15 
16 namespace ucxx {
17 
18 class Buffer;
19 
20 namespace data {
21 
28 class AmSend {
29  public:
30  const void* _buffer{nullptr};
31  const size_t _length{0};
32  const ucs_memory_type_t _memoryType{UCS_MEMORY_TYPE_HOST};
33  const std::optional<AmReceiverCallbackInfo> _receiverCallbackInfo{
34  std::nullopt};
35 
47  explicit AmSend(const decltype(_buffer) buffer,
48  const decltype(_length) length,
49  const decltype(_memoryType) memoryType = UCS_MEMORY_TYPE_HOST,
50  const decltype(_receiverCallbackInfo) receiverCallbackInfo = std::nullopt);
51 
52  AmSend() = delete;
53 };
54 
61 class AmReceive {
62  public:
63  std::shared_ptr<::ucxx::Buffer> _buffer{nullptr};
64 
73 };
74 
82  public:
83  const bool _force{false};
91  explicit EndpointClose(const decltype(_force) force);
92 
93  EndpointClose() = delete;
94 };
95 
101 class Flush {
102  public:
108  Flush();
109 };
110 
116 class MemPut {
117  public:
118  const void* _buffer{nullptr};
119  const size_t _length{0};
120  const uint64_t _remoteAddr{0};
121  const ucp_rkey_h _rkey{};
122 
133  explicit MemPut(const decltype(_buffer) buffer,
134  const decltype(_length) length,
135  const decltype(_remoteAddr) remoteAddr,
136  const decltype(_rkey) rkey);
137 
138  MemPut() = delete;
139 };
140 
147 class MemGet {
148  public:
149  void* _buffer{nullptr};
150  const size_t _length{0};
151  const uint64_t _remoteAddr{0};
152  const ucp_rkey_h _rkey{};
153 
164  explicit MemGet(decltype(_buffer) buffer,
165  const decltype(_length) length,
166  const decltype(_remoteAddr) remoteAddr,
167  const decltype(_rkey) rkey);
168 
169  MemGet() = delete;
170 };
171 
178 class StreamSend {
179  public:
180  const void* _buffer{nullptr};
181  const size_t _length{0};
182 
191  explicit StreamSend(const decltype(_buffer) buffer, const decltype(_length) length);
192 
193  StreamSend() = delete;
194 };
195 
203  public:
204  void* _buffer{nullptr};
205  const size_t _length{0};
206  size_t _lengthReceived{0};
207 
216  explicit StreamReceive(decltype(_buffer) buffer, const decltype(_length) length);
217 
218  StreamReceive() = delete;
219 };
220 
226 class TagSend {
227  public:
228  const void* _buffer{nullptr};
229  const size_t _length{0};
230  const ::ucxx::Tag _tag{0};
231 
241  explicit TagSend(const decltype(_buffer) buffer,
242  const decltype(_length) length,
243  const decltype(_tag) tag);
244 
245  TagSend() = delete;
246 };
247 
254 class TagReceive {
255  public:
256  void* _buffer{nullptr};
257  const size_t _length{0};
258  const ::ucxx::Tag _tag{0};
259  const ::ucxx::TagMask _tagMask{0};
260 
271  explicit TagReceive(decltype(_buffer) buffer,
272  const decltype(_length) length,
273  const decltype(_tag) tag,
274  const decltype(_tagMask) tagMask);
275 
276  TagReceive() = delete;
277 };
278 
286  public:
287  const std::vector<void*> _buffer{};
288  const std::vector<size_t> _length{};
289  const std::vector<int> _isCUDA{};
290  const ::ucxx::Tag _tag{0};
291 
302  explicit TagMultiSend(const decltype(_buffer)& buffer,
303  const decltype(_length)& length,
304  const decltype(_isCUDA)& isCUDA,
305  const decltype(_tag) tag);
306 
307  TagMultiSend() = delete;
308 };
309 
317  public:
318  const ::ucxx::Tag _tag{0};
319  const ::ucxx::TagMask _tagMask{0};
320 
329  explicit TagMultiReceive(const decltype(_tag) tag, const decltype(_tagMask) tagMask);
330 
331  TagMultiReceive() = delete;
332 };
333 
334 using RequestData = std::variant<std::monostate,
335  AmSend,
336  AmReceive,
338  Flush,
339  MemPut,
340  MemGet,
341  StreamSend,
343  TagSend,
344  TagReceive,
345  TagMultiSend,
347 
348 template <class... Ts>
349 struct dispatch : Ts... {
350  using Ts::operator()...;
351 };
352 template <class... Ts>
353 dispatch(Ts...) -> dispatch<Ts...>;
354 
355 template <class T>
356 RequestData getRequestData(T t)
357 {
358  return std::visit([](auto arg) -> RequestData { return arg; }, t);
359 }
360 
361 } // namespace data
362 
363 } // namespace ucxx
Data for an Active Message receive.
Definition: request_data.h:61
AmReceive()
Constructor for Active Message-specific receive data.
std::shared_ptr<::ucxx::Buffer > _buffer
The AM received message buffer.
Definition: request_data.h:63
Data for an Active Message send.
Definition: request_data.h:28
const size_t _length
The length of the message.
Definition: request_data.h:31
const ucs_memory_type_t _memoryType
Memory type used on the operation.
Definition: request_data.h:32
AmSend(const decltype(_buffer) buffer, const decltype(_length) length, const decltype(_memoryType) memoryType=UCS_MEMORY_TYPE_HOST, const decltype(_receiverCallbackInfo) receiverCallbackInfo=std::nullopt)
Constructor for Active Message-specific send data.
const void * _buffer
The raw pointer where data to be sent is stored.
Definition: request_data.h:30
const std::optional< AmReceiverCallbackInfo > _receiverCallbackInfo
Owner name and unique identifier of the receiver callback.
Definition: request_data.h:33
Data for an endpoint close operation.
Definition: request_data.h:81
EndpointClose(const decltype(_force) force)
Constructor for endpoint close-specific data.
const bool _force
Whether to force endpoint closing.
Definition: request_data.h:83
Data for a flush operation.
Definition: request_data.h:101
Flush()
Constructor for flush-specific data.
Data for a memory receive.
Definition: request_data.h:147
void * _buffer
The raw pointer where received data should be stored.
Definition: request_data.h:149
const uint64_t _remoteAddr
Remote memory address to read from.
Definition: request_data.h:151
const size_t _length
The length of the message.
Definition: request_data.h:150
const ucp_rkey_h _rkey
UCX remote key associated with the remote memory address.
Definition: request_data.h:152
MemGet(decltype(_buffer) buffer, const decltype(_length) length, const decltype(_remoteAddr) remoteAddr, const decltype(_rkey) rkey)
Constructor for memory-specific data.
Data for a memory send.
Definition: request_data.h:116
const uint64_t _remoteAddr
Remote memory address to write to.
Definition: request_data.h:120
const size_t _length
The length of the message.
Definition: request_data.h:119
const void * _buffer
The raw pointer where data to be sent is stored.
Definition: request_data.h:118
const ucp_rkey_h _rkey
UCX remote key associated with the remote memory address.
Definition: request_data.h:121
MemPut(const decltype(_buffer) buffer, const decltype(_length) length, const decltype(_remoteAddr) remoteAddr, const decltype(_rkey) rkey)
Constructor for memory-specific data.
Data for an Stream receive.
Definition: request_data.h:202
StreamReceive(decltype(_buffer) buffer, const decltype(_length) length)
Constructor for stream-specific data.
const size_t _length
The expected messaged length.
Definition: request_data.h:205
void * _buffer
The raw pointer where received data should be stored.
Definition: request_data.h:204
size_t _lengthReceived
The actual received message length.
Definition: request_data.h:206
Data for a Stream send.
Definition: request_data.h:178
const size_t _length
The length of the message.
Definition: request_data.h:181
const void * _buffer
The raw pointer where data to be sent is stored.
Definition: request_data.h:180
StreamSend(const decltype(_buffer) buffer, const decltype(_length) length)
Constructor for stream-specific data.
Data for a multi-buffer Tag receive.
Definition: request_data.h:316
const ::ucxx::Tag _tag
Tag to match.
Definition: request_data.h:318
TagMultiReceive(const decltype(_tag) tag, const decltype(_tagMask) tagMask)
Constructor for receive multi-buffer tag-specific data.
const ::ucxx::TagMask _tagMask
Tag mask to use.
Definition: request_data.h:319
Data for a multi-buffer Tag send.
Definition: request_data.h:285
const ::ucxx::Tag _tag
Tag to match.
Definition: request_data.h:290
TagMultiSend(const decltype(_buffer)&buffer, const decltype(_length)&length, const decltype(_isCUDA)&isCUDA, const decltype(_tag) tag)
Constructor for send multi-buffer tag-specific data.
const std::vector< int > _isCUDA
Flags indicating whether the buffer is CUDA or not.
Definition: request_data.h:289
const std::vector< size_t > _length
Lengths of messages.
Definition: request_data.h:288
const std::vector< void * > _buffer
Raw pointers where data to be sent is stored.
Definition: request_data.h:287
Data for a Tag receive.
Definition: request_data.h:254
const ::ucxx::Tag _tag
Tag to match.
Definition: request_data.h:258
TagReceive(decltype(_buffer) buffer, const decltype(_length) length, const decltype(_tag) tag, const decltype(_tagMask) tagMask)
Constructor for tag-specific data.
void * _buffer
The raw pointer where received data should be stored.
Definition: request_data.h:256
const size_t _length
The length of the message.
Definition: request_data.h:257
const ::ucxx::TagMask _tagMask
Tag mask to use.
Definition: request_data.h:259
Data for a Tag send.
Definition: request_data.h:226
TagSend(const decltype(_buffer) buffer, const decltype(_length) length, const decltype(_tag) tag)
Constructor for tag-specific data.
const ::ucxx::Tag _tag
Tag to match.
Definition: request_data.h:230
const size_t _length
The length of the message.
Definition: request_data.h:229
const void * _buffer
The raw pointer where data to be sent is stored.
Definition: request_data.h:228
Definition: address.h:15
Definition: request_data.h:349