diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-16 17:05:59 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-16 17:05:59 +0200 |
commit | 38d3d701a7ffff8153b1eea0f540f79200cf47a3 (patch) | |
tree | 732a8ac91879e66e070272c5c35a556808c9ce2c /modules/remote-sycl | |
parent | 4acbc19774d48b339820e91b7c9226ed2e6f12b5 (diff) |
Sycl improvements
Diffstat (limited to 'modules/remote-sycl')
-rw-r--r-- | modules/remote-sycl/c++/common.hpp | 4 | ||||
-rw-r--r-- | modules/remote-sycl/c++/transfer.hpp | 54 |
2 files changed, 58 insertions, 0 deletions
diff --git a/modules/remote-sycl/c++/common.hpp b/modules/remote-sycl/c++/common.hpp index 8c008c3..3859dad 100644 --- a/modules/remote-sycl/c++/common.hpp +++ b/modules/remote-sycl/c++/common.hpp @@ -10,6 +10,10 @@ namespace saw { namespace rmt { struct Sycl {}; } +namespace encode { +template<typename Inner> +struct Sycl {}; +} template<> class remote<rmt::Sycl>; diff --git a/modules/remote-sycl/c++/transfer.hpp b/modules/remote-sycl/c++/transfer.hpp index 00c85e4..a7f1b53 100644 --- a/modules/remote-sycl/c++/transfer.hpp +++ b/modules/remote-sycl/c++/transfer.hpp @@ -10,6 +10,60 @@ namespace saw { +template<typename Schema, typename Encoding> +class data_server<Schema, Encoding, rmt::Sycl> final : public i_data_server<rmt::Sycl> { +private: + our<device<rmt::Sycl>> device_; + + std::map<uint64_t, data<Schema, encode::Sycl<Encoding>>> values_; +public: + data_server(our<device<rmt::Sycl>> device__): + device_{std::move(device__)} + {} + + error_or<void> send(const data<Sch,Encoding>& dat, id<Schema> store_id){ + auto eo_val = device_->template copy_to_device(dat); + if(eo_val.is_error()){ + auto& err = eoval.get_error(); + return std::move(err); + } + auto& val = eo_val.get_value(); + + try { + auto insert_res = values_.emplace(std::make_pair(store_id.get_value(), std::move(val))); + if(!insert_res.second){ + return make_error<err::already_exists>(); + } + }catch(const std::exception&){ + return make_error<err::out_of_memory>(); + } + return make_void(); + } + + error_or<void> allocate(const data<typename meta_schema<Schema>::MetaSchema, Encoding>& dat, id<Schema> store_id){ + return make_error<err::not_implemented>("Allocate not implemented"); + return make_void(); + } + + error_or<data<Schema,Encoding>> receive(id<Schema> store_id){ + return make_error<err::not_implemented>("Receive not implemented"); + } + + error_or<void> erase(id<Schema> store_id){ + return make_error<err::not_implemented>("Erase not implemented"); + return make_void(); + } + + error_or<ptr<data<Schema, encode::Sycl<Encoding>>>> find(id<Schema> store_id){ + auto find_res = values_.find(store_id.get_value()); + if(find_res == values_.end()){ + return make_error<err::not_found>(); + } + + return {(find_res.second)}; + } +}; + template<typename... Schema, typename Encoding> class data_server<tmpl_group<Schema...>, Encoding, rmt::Sycl> { private: |