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 +++++++++++++++++++------------ modules/remote-sycl/c++/transfer.hpp | 6 ++-- modules/remote-sycl/tests/data.cpp | 2 +- modules/remote-sycl/tests/sycl_basics.cpp | 5 ++-- 4 files changed, 35 insertions(+), 24 deletions(-) (limited to 'modules/remote-sycl') 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)}; } }; diff --git a/modules/remote-sycl/c++/transfer.hpp b/modules/remote-sycl/c++/transfer.hpp index 8987de9..f535751 100644 --- a/modules/remote-sycl/c++/transfer.hpp +++ b/modules/remote-sycl/c++/transfer.hpp @@ -26,7 +26,7 @@ private: /** * Device context class */ - device* device_; + our> device_; /** * Store for the data the server manages. @@ -36,8 +36,8 @@ public: /** * Main constructor */ - data_server(device& device__): - device_{&device__} + data_server(our> device__): + device_{std::move(device__)} {} /** diff --git a/modules/remote-sycl/tests/data.cpp b/modules/remote-sycl/tests/data.cpp index dff19fb..de09c92 100644 --- a/modules/remote-sycl/tests/data.cpp +++ b/modules/remote-sycl/tests/data.cpp @@ -41,7 +41,7 @@ SAW_TEST("SYCL Data Management"){ wait.poll(); SAW_EXPECT(rmt_addr, "Remote address hasn't been filled"); - auto device = rmt.connect_device(*rmt_addr); + auto device = rmt_addr->copy_device_reference(); auto data_srv = data_server, encode::Native, rmt::Sycl>{device}; diff --git a/modules/remote-sycl/tests/sycl_basics.cpp b/modules/remote-sycl/tests/sycl_basics.cpp index 90da299..61e0d87 100644 --- a/modules/remote-sycl/tests/sycl_basics.cpp +++ b/modules/remote-sycl/tests/sycl_basics.cpp @@ -46,8 +46,6 @@ SAW_TEST("SYCL Test Setup"){ wait.poll(); SAW_EXPECT(rmt_addr, "Remote Address class hasn't been filled"); - auto device = rmt.connect_device(*rmt_addr); - data device_data{host_data}; interface cl_iface { @@ -80,8 +78,9 @@ SAW_TEST("SYCL Test Setup"){ return saw::void_t{}; } }; + auto& device = rmt_addr->get_device(); - cl_iface.template call <"foo">(device_data, &device.get_handle()); + cl_iface.template call <"foo">(device_data, &(device.get_handle())); device.get_handle().wait(); } } -- cgit v1.2.3