#include #include "../c++/remote.hpp" #include "../c++/transfer.hpp" #include __global__ void print_value(saw::data* val){ int v = val->get(); printf("Hello world: %d\n", v); } __global__ void print_array_vals(saw::data, saw::encode::NativeRaw>* val){ uint64_t orig_len = val->size(); long len = (long) orig_len; printf("Array size: %ld\n", len); for(uint64_t i = 0; i < orig_len; ++i){ int v = val->at(i).get(); printf("%d ", v); } printf("\n"); } 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()); } auto eo_dfind = dat_srv->find(id_val); if(eo_dfind.is_error()){ return std::move(eo_dfind.get_error()); } auto dfind = eo_dfind.get_value(); auto& v = dfind(); print_value<<>>(*(v.get_device_data())); } { auto eo_dat_srv = rmt.data_listen, encode::NativeRaw>(*addr); if(eo_dat_srv.is_error()){ return std::move(eo_dat_srv.get_error()); } auto& dat_srv = eo_dat_srv.get_value(); data,encode::NativeRaw> val{4}; val.at(0u).set(5); val.at(1u).set(3); val.at(2u).set(-6); val.at(3u).set(1); 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()); } auto eo_dfind = dat_srv->find(id_val); if(eo_dfind.is_error()){ return std::move(eo_dfind.get_error()); } auto dfind = eo_dfind.get_value(); auto& v = dfind(); print_array_vals<<>>(*(v.get_device_data())); } return make_void(); } int main(){ auto eov = real_main(); if(eov.is_error()){ auto& err = eov.get_error(); std::cerr<<"Error: "< 0u){ std::cerr<<" - "<