Loading...
Searching...
No Matches
request_data.h
1
5#pragma once
6
7#include <memory>
8#include <optional>
9#include <string>
10#include <variant>
11#include <vector>
12
13#include <ucp/api/ucp.h>
14
15#include <ucxx/tag_probe.h>
16#include <ucxx/typedefs.h>
17
18namespace ucxx {
19
20class Buffer;
21
22namespace data {
23
30class AmSend {
31 public:
32 const void* const _buffer{nullptr};
33 const size_t _length{0};
34 const std::vector<ucp_dt_iov_t> _iov{};
35 const size_t _count{0};
37 const uint32_t _flags{UCP_AM_SEND_FLAG_REPLY};
38 const ucp_datatype_t _datatype{ucp_dt_make_contig(1)};
39 const ucs_memory_type_t _memoryType{UCS_MEMORY_TYPE_HOST};
42 const std::optional<AmReceiverCallbackInfo> _receiverCallbackInfo{
43 std::nullopt};
44 const std::vector<std::byte> _userHeader{};
45
55 explicit AmSend(const decltype(_buffer) buffer,
56 const decltype(_length) length,
57 const AmSendParams& params = AmSendParams{});
58
67 explicit AmSend(decltype(_iov) iov, const AmSendParams& params = AmSendParams{});
68
69 AmSend() = delete;
70};
71
78class AmReceive {
79 public:
80 std::shared_ptr<::ucxx::Buffer> _buffer{nullptr};
81 std::vector<std::byte> _userHeader{};
82
91};
92
100 public:
101 const bool _force{false};
109 explicit EndpointClose(const decltype(_force) force);
110
111 EndpointClose() = delete;
112};
113
119class Flush {
120 public:
127};
128
134class MemPut {
135 public:
136 const void* const _buffer{nullptr};
137 const size_t _length{0};
138 const uint64_t _remoteAddr{0};
139 const ucp_rkey_h _rkey{};
140
151 explicit MemPut(const decltype(_buffer) buffer,
152 const decltype(_length) length,
153 const decltype(_remoteAddr) remoteAddr,
154 const decltype(_rkey) rkey);
155
156 MemPut() = delete;
157};
158
165class MemGet {
166 public:
167 void* _buffer{nullptr};
168 const size_t _length{0};
169 const uint64_t _remoteAddr{0};
170 const ucp_rkey_h _rkey{};
171
182 explicit MemGet(decltype(_buffer) buffer,
183 const decltype(_length) length,
184 const decltype(_remoteAddr) remoteAddr,
185 const decltype(_rkey) rkey);
186
187 MemGet() = delete;
188};
189
197 public:
198 const void* const _buffer{nullptr};
199 const size_t _length{0};
200
209 explicit StreamSend(const decltype(_buffer) buffer, const decltype(_length) length);
210
211 StreamSend() = delete;
212};
213
221 public:
222 void* _buffer{nullptr};
223 const size_t _length{0};
224 size_t _lengthReceived{0};
225
234 explicit StreamReceive(decltype(_buffer) buffer, const decltype(_length) length);
235
236 StreamReceive() = delete;
237};
238
244class TagSend {
245 public:
246 const void* const _buffer{nullptr};
247 const size_t _length{0};
248 const ::ucxx::Tag _tag{0};
249
259 explicit TagSend(const decltype(_buffer) buffer,
260 const decltype(_length) length,
261 const decltype(_tag) tag);
262
263 TagSend() = delete;
264};
265
273 public:
274 void* _buffer{nullptr};
275 const size_t _length{0};
276 const ::ucxx::Tag _tag{0};
277 const ::ucxx::TagMask _tagMask{0};
278
289 explicit TagReceive(decltype(_buffer) buffer,
290 const decltype(_length) length,
291 const decltype(_tag) tag,
292 const decltype(_tagMask) tagMask);
293
294 TagReceive() = delete;
295};
296
304 public:
305 void* _buffer{nullptr};
306 const size_t _length{0};
307 const std::shared_ptr<TagProbeInfo> _probeInfo{
308 nullptr};
309
319 explicit TagReceiveWithHandle(decltype(_buffer) buffer,
320 decltype(_length) length,
321 std::shared_ptr<TagProbeInfo> probeInfo);
322
323 TagReceiveWithHandle() = delete;
324};
325
333 public:
334 const std::vector<const void*> _buffer{};
335 const std::vector<size_t> _length{};
336 const std::vector<int> _isCUDA{};
337 const ::ucxx::Tag _tag{0};
338
349 explicit TagMultiSend(const decltype(_buffer)& buffer,
350 const decltype(_length)& length,
351 const decltype(_isCUDA)& isCUDA,
352 const decltype(_tag) tag);
353
354 TagMultiSend() = delete;
355};
356
364 public:
365 const ::ucxx::Tag _tag{0};
366 const ::ucxx::TagMask _tagMask{0};
367
376 explicit TagMultiReceive(const decltype(_tag) tag, const decltype(_tagMask) tagMask);
377
378 TagMultiReceive() = delete;
379};
380
381using RequestData = std::variant<std::monostate,
382 AmSend,
383 AmReceive,
385 Flush,
386 MemPut,
387 MemGet,
390 TagSend,
395
396template <class... Ts>
397struct dispatch : Ts... {
398 using Ts::operator()...;
399};
400template <class... Ts>
401dispatch(Ts...) -> dispatch<Ts...>;
402
403template <class T>
404RequestData getRequestData(T t)
405{
406 return std::visit([](auto arg) -> RequestData { return arg; }, t);
407}
408
409} // namespace data
410
411} // namespace ucxx
A simple object to simplify managing buffers.
Definition buffer.h:31
Data for an Active Message receive.
Definition request_data.h:78
AmReceive()
Constructor for Active Message-specific receive data.
std::vector< std::byte > _userHeader
User-defined header bytes from the sender.
Definition request_data.h:81
std::shared_ptr<::ucxx::Buffer > _buffer
The AM received message buffer.
Definition request_data.h:80
Data for an Active Message send.
Definition request_data.h:30
const size_t _count
Definition request_data.h:35
const size_t _length
Message length in bytes (contiguous datatype only).
Definition request_data.h:33
const ucs_memory_type_t _memoryType
Memory type used on the operation.
Definition request_data.h:39
const void *const _buffer
The raw pointer where data to be sent is stored.
Definition request_data.h:32
const std::vector< ucp_dt_iov_t > _iov
Segments for IOV datatype.
Definition request_data.h:34
AmSend(const decltype(_buffer) buffer, const decltype(_length) length, const AmSendParams ¶ms=AmSendParams{})
Constructor for Active Message-specific send data.
const AmSendMemoryTypePolicy _memoryTypePolicy
Receiver allocation policy.
Definition request_data.h:40
AmSend(decltype(_iov) iov, const AmSendParams ¶ms=AmSendParams{})
Constructor for Active Message-specific send data using IOV datatype.
const std::vector< std::byte > _userHeader
Opaque user-defined header bytes.
Definition request_data.h:44
const uint32_t _flags
UCP AM send flags.
Definition request_data.h:37
const std::optional< AmReceiverCallbackInfo > _receiverCallbackInfo
Owner name and unique identifier of the receiver callback.
Definition request_data.h:42
const ucp_datatype_t _datatype
UCP datatype.
Definition request_data.h:38
Data for an endpoint close operation.
Definition request_data.h:99
EndpointClose(const decltype(_force) force)
Constructor for endpoint close-specific data.
const bool _force
Whether to force endpoint closing.
Definition request_data.h:101
Data for a flush operation.
Definition request_data.h:119
Flush()
Constructor for flush-specific data.
Data for a memory receive.
Definition request_data.h:165
void * _buffer
The raw pointer where received data should be stored.
Definition request_data.h:167
const uint64_t _remoteAddr
Remote memory address to read from.
Definition request_data.h:169
const size_t _length
The length of the message.
Definition request_data.h:168
const ucp_rkey_h _rkey
UCX remote key associated with the remote memory address.
Definition request_data.h:170
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:134
const uint64_t _remoteAddr
Remote memory address to write to.
Definition request_data.h:138
const size_t _length
The length of the message.
Definition request_data.h:137
const ucp_rkey_h _rkey
UCX remote key associated with the remote memory address.
Definition request_data.h:139
const void *const _buffer
The raw pointer where data to be sent is stored.
Definition request_data.h:136
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:220
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:223
void * _buffer
The raw pointer where received data should be stored.
Definition request_data.h:222
size_t _lengthReceived
The actual received message length.
Definition request_data.h:224
Data for a Stream send.
Definition request_data.h:196
const void *const _buffer
The raw pointer where data to be sent is stored.
Definition request_data.h:198
const size_t _length
The length of the message.
Definition request_data.h:199
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:363
const ::ucxx::Tag _tag
Tag to match.
Definition request_data.h:365
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:366
Data for a multi-buffer Tag send.
Definition request_data.h:332
const std::vector< const void * > _buffer
Raw pointers where data to be sent is stored.
Definition request_data.h:334
const ::ucxx::Tag _tag
Tag to match.
Definition request_data.h:337
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:336
const std::vector< size_t > _length
Lengths of messages.
Definition request_data.h:335
Data for a Tag receive using a message handle.
Definition request_data.h:303
const size_t _length
The size in bytes of the receive buffer.
Definition request_data.h:306
void * _buffer
The raw pointer where received data should be stored.
Definition request_data.h:305
TagReceiveWithHandle(decltype(_buffer) buffer, decltype(_length) length, std::shared_ptr< TagProbeInfo > probeInfo)
Constructor for tag receive with handle-specific data.
const std::shared_ptr< TagProbeInfo > _probeInfo
TagProbeInfo containing message length and handle.
Definition request_data.h:307
Data for a Tag receive.
Definition request_data.h:272
const ::ucxx::Tag _tag
Tag to match.
Definition request_data.h:276
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:274
const size_t _length
The length of the message.
Definition request_data.h:275
const ::ucxx::TagMask _tagMask
Tag mask to use.
Definition request_data.h:277
Data for a Tag send.
Definition request_data.h:244
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:248
const size_t _length
The length of the message.
Definition request_data.h:247
const void *const _buffer
The raw pointer where data to be sent is stored.
Definition request_data.h:246
Definition address.h:16
AmSendMemoryTypePolicy
Policy used to allocate receive buffers for Active Messages.
Definition typedefs.h:246
@ FallbackToHost
If no allocator exists for memory type, fallback to host memory.
Definition typedefs.h:247
Parameters controlling Active Message send behavior.
Definition typedefs.h:257
Definition request_data.h:397