From 47b00020a237d22b6081a6f7f57bd387ae42b568 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Sat, 29 Jun 2024 07:41:15 +0200 Subject: Moved device to a internal class which will be supposed to be discoverable --- modules/remote-sycl/c++/remote.hpp | 46 ++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 17 deletions(-) (limited to 'modules/remote-sycl/c++/remote.hpp') diff --git a/modules/remote-sycl/c++/remote.hpp b/modules/remote-sycl/c++/remote.hpp index 7e77ec9..8ec4667 100644 --- a/modules/remote-sycl/c++/remote.hpp +++ b/modules/remote-sycl/c++/remote.hpp @@ -124,7 +124,7 @@ private: /** * Server this client is tied to */ - rpc_server* srv_; + rpc_server* srv_; /** * TransferClient created from the internal RPC data server @@ -135,7 +135,7 @@ private: * Generated some sort of id for the request. */ public: - rpc_client(rpc_server& srv): + rpc_client(rpc_server& srv): srv_{&srv}, data_client_{srv_->data_server} {} @@ -159,7 +159,7 @@ public: * Rpc Server class for the Sycl backend. */ template -class rpc_server { +class rpc_server { public: using InterfaceCtxT = cl::sycl::queue*; using InterfaceT = interface; @@ -168,7 +168,7 @@ private: /** * Device instance enabling the use of the remote device. */ - device* device_; + our> device_; using DataServerT = data_server::type, Encoding, rmt::Sycl>; /** @@ -186,8 +186,8 @@ public: /** * Main constructor */ - rpc_server(device& dev__, DataServerT& data_server__, InterfaceT cl_iface): - device_{&dev__}, + rpc_server(our> dev__, DataServerT& data_server__, InterfaceT cl_iface): + device_{std::move(dev__)}, data_server_{&data_server__}, cl_interface_{std::move(cl_iface)} {} @@ -277,13 +277,23 @@ template<> struct remote_address { private: remote* ctx_; + our> device_; SAW_FORBID_COPY(remote_address); SAW_FORBID_MOVE(remote_address); public: - remote_address(remote& r_ctx): - ctx_{&r_ctx} + remote_address(remote& r_ctx, our> d_ctx): + ctx_{&r_ctx}, + device_{std::move(d_ctx)} {} + + our> copy_device_reference() const { + return device_; + } + + device& get_device(){ + return *device_; + } }; template<> @@ -302,24 +312,26 @@ public: * we just create a default. */ conveyor>> resolve_address(){ - return heap>(*this); + auto dev = std::make_shared>(); + return heap>(*this, std::move(dev)); } /** - * Connect to a device + * Parse address, but don't resolve it. */ - device connect_device(const remote_address&){ - return {}; + error_or>> parse_address(){ + auto dev = std::make_shared>(); + return heap>(*this, std::move(dev)); } /** * Spin up a rpc server */ - template - rpc_server listen(device& dev, typename rpc_server::InterfaceT iface){ - using RpcServerT = rpc_server; - using InterfaceT = typename RpcServerT::InterfaceT; - return {dev, std::move(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)}; } }; -- cgit v1.2.3