diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-21 17:46:38 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-21 17:46:38 +0200 |
commit | 227f9d945d2b99bb33b71442ec229a13d1d29561 (patch) | |
tree | 4f1bda41cda7936f399c00855f2e86927b8c2c52 | |
parent | 5202f24921e2136b284eadb54783519fb38967a3 (diff) |
wip
-rw-r--r-- | modules/remote-sycl/c++/remote.hpp | 62 |
1 files changed, 42 insertions, 20 deletions
diff --git a/modules/remote-sycl/c++/remote.hpp b/modules/remote-sycl/c++/remote.hpp index e1dc677..19f4bb6 100644 --- a/modules/remote-sycl/c++/remote.hpp +++ b/modules/remote-sycl/c++/remote.hpp @@ -7,23 +7,17 @@ namespace saw { template<> struct remote_address<rmt::Sycl> { private: - ptr<remote<rmt::Sycl>> ctx_; - our<device<rmt::Sycl>> device_; + uint64_t dev_id_; SAW_FORBID_COPY(remote_address); SAW_FORBID_MOVE(remote_address); public: - remote_address(remote<rmt::Sycl>& r_ctx, our<device<rmt::Sycl>> d_ctx): - ctx_{r_ctx}, - device_{std::move(d_ctx)} + remote_address(uint64_t id): + dev_id_{id} {} - our<device<rmt::Sycl>> copy_device_reference() const { - return device_; - } - - device<rmt::Sycl>& get_device(){ - return *device_; + uint64_t get_device_id() const { + return dev_id_; } }; @@ -32,6 +26,28 @@ class remote<rmt::Sycl> { private: SAW_FORBID_COPY(remote); SAW_FORBID_MOVE(remote); + + struct key_t { + uint64_t device_id; + uint32_t sch_id; + uint32_t enc_id; + + bool operator<(const key_t& rhs) const { + if(device_id != rhs.device_id){ + return device_id < rhs.device_id; + } + if(sch_id != rhs.sch_id){ + return sch_id < rhs.sch_id; + } + if(enc_id != rhs.enc_id){ + return enc_id < rhs.enc_id; + } + return false; + } + }; + + std::map<uint64_t, our<device<rmt::Sycl>>> devs_; + std::map<key_t, ptr<i_data_server<rmt::Sycl>>> reg_dat_srvs_; public: /** * Default constructor @@ -42,27 +58,33 @@ public: * For now we don't need to specify the location since * we just create a default. */ - conveyor<own<remote_address<rmt::Sycl>>> resolve_address(){ - auto dev = std::make_shared<device<rmt::Sycl>>(); - return heap<remote_address<rmt::Sycl>>(*this, std::move(dev)); + conveyor<own<remote_address<rmt::Sycl>>> resolve_address(uint64_t dev_id){ + return heap<remote_address<rmt::Sycl>>(dev_id); } /** * Parse address, but don't resolve it. */ - error_or<own<remote_address<rmt::Sycl>>> parse_address(){ - auto dev = std::make_shared<device<rmt::Sycl>>(); - return heap<remote_address<rmt::Sycl>>(*this, std::move(dev)); + error_or<own<remote_address<rmt::Sycl>>> parse_address(uint64_t dev_id){ + return heap<remote_address<rmt::Sycl>>(dev_id); + } + + /** + * Spin up data server + */ + template<typename Schema, typename Encoding> + error_or<own<data_server<Schema, Encoding, rmt::Sycl>>> data_listen(remote_address<rmt::Sycl>& dev){ + return heap<data_server<Schema, Encoding, rmt::Sycl>>(dev); } /** * Spin up a rpc server */ - template<typename Iface, typename Encoding, typename Storage> - rpc_server<Iface, Encoding, Storage, rmt::Sycl> listen(remote_address<rmt::Sycl>& dev, typename rpc_server<Iface, Encoding, Storage, rmt::Sycl>::InterfaceT iface){ + template<typename Iface, typename Encoding> + rpc_server<Iface, Encoding, rmt::Sycl> listen(remote_address<rmt::Sycl>& dev, typename rpc_server<Iface, Encoding, rmt::Sycl>::InterfaceT iface){ //using RpcServerT = rpc_server<Iface, Encoding, rmt::Sycl>; //using InterfaceT = typename RpcServerT::InterfaceT; - return {dev.copy_device_reference(), std::move(iface)}; + return {share<device<rmt::Sycl>>(), std::move(iface)}; } }; |