From 227f9d945d2b99bb33b71442ec229a13d1d29561 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Wed, 21 Aug 2024 17:46:38 +0200 Subject: wip --- modules/remote-sycl/c++/remote.hpp | 62 ++++++++++++++++++++++++++------------ 1 file 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 { private: - ptr> ctx_; - our> device_; + uint64_t dev_id_; SAW_FORBID_COPY(remote_address); SAW_FORBID_MOVE(remote_address); public: - remote_address(remote& r_ctx, our> d_ctx): - ctx_{r_ctx}, - device_{std::move(d_ctx)} + remote_address(uint64_t id): + dev_id_{id} {} - our> copy_device_reference() const { - return device_; - } - - device& get_device(){ - return *device_; + uint64_t get_device_id() const { + return dev_id_; } }; @@ -32,6 +26,28 @@ class remote { 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>> devs_; + std::map>> 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>> resolve_address(){ - auto dev = std::make_shared>(); - return heap>(*this, std::move(dev)); + conveyor>> resolve_address(uint64_t dev_id){ + return heap>(dev_id); } /** * Parse address, but don't resolve it. */ - error_or>> parse_address(){ - auto dev = std::make_shared>(); - return heap>(*this, std::move(dev)); + error_or>> parse_address(uint64_t dev_id){ + return heap>(dev_id); + } + + /** + * Spin up data server + */ + template + error_or>> data_listen(remote_address& dev){ + return heap>(dev); } /** * Spin up a rpc server */ - template - rpc_server listen(remote_address& dev, typename rpc_server::InterfaceT iface){ + template + rpc_server listen(remote_address& dev, typename rpc_server::InterfaceT iface){ //using RpcServerT = rpc_server; //using InterfaceT = typename RpcServerT::InterfaceT; - return {dev.copy_device_reference(), std::move(iface)}; + return {share>(), std::move(iface)}; } }; -- cgit v1.2.3