summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/remote-sycl/c++/common.hpp4
-rw-r--r--modules/remote-sycl/c++/transfer.hpp54
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: