core.hpp
1 
5 #pragma once
6 
7 #include <cstdint>
8 #include <functional>
9 #include <memory>
10 #include <string>
11 #include <unordered_map>
12 #include <vector>
13 
14 #include <rapidsmpf/communicator/communicator.hpp>
15 #include <rapidsmpf/memory/buffer.hpp>
16 #include <rapidsmpf/memory/buffer_resource.hpp>
17 #include <rapidsmpf/statistics.hpp>
18 
20 
48  public:
55  class Message {
56  public:
66  std::vector<std::uint8_t>&& metadata,
67  std::unique_ptr<Buffer> data = nullptr
68  );
69 
76  [[nodiscard]] constexpr Rank peer_rank() const noexcept {
77  return peer_rank_;
78  }
79 
87  [[nodiscard]] constexpr std::vector<std::uint8_t> const&
88  metadata() const noexcept {
89  return metadata_;
90  }
91 
99  [[nodiscard]] std::vector<std::uint8_t> release_metadata() noexcept;
100 
106  [[nodiscard]] Buffer const* data() const;
107 
115  [[nodiscard]] std::unique_ptr<Buffer> release_data() noexcept;
116 
124  void set_data(std::unique_ptr<Buffer> buffer);
125 
126  private:
127  Rank peer_rank_;
128  std::vector<std::uint8_t> metadata_;
129  std::unique_ptr<Buffer> data_;
130  };
131 
132  virtual ~MetadataPayloadExchange() = default;
133 
146  virtual void send(std::unique_ptr<Message> message) = 0;
147 
160  virtual void send(std::vector<std::unique_ptr<Message>>&& messages) = 0;
161 
172  virtual void progress() = 0;
173 
183  [[nodiscard]] virtual std::vector<std::unique_ptr<Message>> recv() = 0;
184 
196  [[nodiscard]] virtual bool is_idle() const = 0;
197 };
198 
199 
200 } // namespace rapidsmpf::communicator
Buffer representing device or host memory.
Definition: buffer.hpp:47
Message(Rank peer_rank, std::vector< std::uint8_t > &&metadata, std::unique_ptr< Buffer > data=nullptr)
Construct a new Message.
std::unique_ptr< Buffer > release_data() noexcept
Release ownership of the data buffer.
std::vector< std::uint8_t > release_metadata() noexcept
Release ownership of the metadata.
Buffer const * data() const
Get the data buffer for this message.
constexpr Rank peer_rank() const noexcept
Get the destination rank for outgoing or source rank for incoming messages.
Definition: core.hpp:76
void set_data(std::unique_ptr< Buffer > buffer)
Set the data buffer for this message.
constexpr std::vector< std::uint8_t > const & metadata() const noexcept
Get the serialized metadata for this message.
Definition: core.hpp:88
Interface for exchanging serialized metadata and payload between ranks.
Definition: core.hpp:47
virtual void send(std::unique_ptr< Message > message)=0
Send a single message to a remote rank.
virtual void progress()=0
Progress the communication state machine.
virtual std::vector< std::unique_ptr< Message > > recv()=0
Receive messages from remote ranks.
virtual bool is_idle() const =0
Check if the communication layer is currently idle.
std::int32_t Rank
The rank of a node (e.g. the rank of a MPI process), or world size (total number of ranks).