summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-21 17:46:38 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-21 17:46:38 +0200
commit227f9d945d2b99bb33b71442ec229a13d1d29561 (patch)
tree4f1bda41cda7936f399c00855f2e86927b8c2c52
parent5202f24921e2136b284eadb54783519fb38967a3 (diff)
wip
-rw-r--r--modules/remote-sycl/c++/remote.hpp62
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)};
}
};