From 001c23fcdb1e881cbcb0532d108218fbdb271cb9 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Fri, 6 Sep 2024 16:57:23 +0200 Subject: Working on a data transfer test --- modules/remote-hip/c++/remote.hpp | 8 +++- modules/remote-hip/c++/transfer.hpp | 7 +++- modules/remote-hip/examples/SConscript | 4 +- modules/remote-hip/examples/hip_transfer_data.cpp | 51 +++++++++++++++++++++++ 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 modules/remote-hip/examples/hip_transfer_data.cpp diff --git a/modules/remote-hip/c++/remote.hpp b/modules/remote-hip/c++/remote.hpp index 7263aaf..b814ff2 100644 --- a/modules/remote-hip/c++/remote.hpp +++ b/modules/remote-hip/c++/remote.hpp @@ -1,6 +1,7 @@ #pragma once #include "common.hpp" +#include "device.hpp" namespace saw { @@ -104,7 +105,12 @@ public: */ template error_or>> data_listen(remote_address& dev){ - return heap>(dev); + our> dev = nullptr; + auto ins = devs_.emplace(std::make_pair(dev.get_device_id(), our>{nullptr})); + if(ins.second){ + ins.first->second = share>(); + } + return heap>(ins.first->second); } /** diff --git a/modules/remote-hip/c++/transfer.hpp b/modules/remote-hip/c++/transfer.hpp index a81f657..4e76436 100644 --- a/modules/remote-hip/c++/transfer.hpp +++ b/modules/remote-hip/c++/transfer.hpp @@ -22,7 +22,12 @@ public: {} error_or send(const data& dat, id store_id){ - return make_error(); + auto ins = values_.emplace(std::make_pair(store_id.get_value(), data>{dat})); + if(!ins.second){ + return make_error(); + } + + return make_void(); } error_or allocate(const data::MetaSchema, Encoding>& dat, id store_id){ diff --git a/modules/remote-hip/examples/SConscript b/modules/remote-hip/examples/SConscript index cb9eb65..71bb98f 100644 --- a/modules/remote-hip/examples/SConscript +++ b/modules/remote-hip/examples/SConscript @@ -29,8 +29,10 @@ hip_objects = []; #objects_static = [] examples_env.hip_info = examples_hip_env.Program('#bin/hip_device_info', ['hip_device_info.cpp', env.library_static, hip_objects]); +examples_env.hip_transfer = examples_hip_env.Program('#bin/hip_transfer_data', ['hip_transfer_data.cpp', env.library_static, hip_objects]); + # Set Alias -env.examples = [examples_env.hip_info]; +env.examples = [examples_env.hip_info, examples_env.hip_transfer]; env.Alias('examples', env.examples); if env["build_examples"]: diff --git a/modules/remote-hip/examples/hip_transfer_data.cpp b/modules/remote-hip/examples/hip_transfer_data.cpp new file mode 100644 index 0000000..49ff856 --- /dev/null +++ b/modules/remote-hip/examples/hip_transfer_data.cpp @@ -0,0 +1,51 @@ +#include "../c++/remote.hpp" +#include "../c++/transfer.hpp" + +#include + +namespace sch { +using namespace saw::schema; +} + +saw::error_or real_main(){ + using namespace saw; + + remote rmt; + + auto eo_addr = rmt.parse_address(0); + if(eo_addr.is_error()){ + return std::move(eo_addr.get_error()); + } + auto& addr = eo_addr.get_value(); + + auto eo_dat_srv = rmt.data_listen(*addr); + if(eo_dat_srv.is_error()){ + return std::move(eo_dat_srv.get_error()); + } + auto& dat_srv = eo_dat_srv.get_value(); + + data val{42}; + + id id_val{0u}; + auto eo_send = dat_srv->send(val, id_val); + if(eo_send.is_error()){ + return std::move(eo_send.get_error()); + } + + return make_void(); +} + +int main(){ + auto eov = real_main(); + if(eov.is_error()){ + auto& err = eov.get_error(); + std::cerr<<"Error: "< 0u){ + std::cerr<<" - "<