#pragma once #include "common.hpp" namespace saw { /** * Represents a remote Sycl device. */ template<> class device final { private: acpp::sycl::queue cmd_queue_; public: device(): cmd_queue_{acpp::sycl::default_selector_v, acpp::sycl::property_list{acpp::sycl::property::queue::enable_profiling()}} {} SAW_FORBID_COPY(device); SAW_FORBID_MOVE(device); /** * Copy data to device */ template error_or>> copy_to_device(const data& host_data, data>& sycl_data){ return data>{host_data}; } template error_or>> allocate_on_device(const data::MetaSchema, Encoding>& host_meta){ data host_data{host_meta}; data> sycl_dat{host_data}; return sycl_dat; } /** * Copy data to host */ template error_or> copy_to_host(data>& dev_data){ /** data host_data; cmd_queue_.submit([&](cl::sycl::handler& h){ auto acc_buff = dev_data.template access(h); h.copy(acc_buff, &host_data); }); cmd_queue_.wait(); */ return make_error("device::copy_to_host"); } /** * Get a reference to the handle */ acpp::sycl::queue& get_handle(){ return cmd_queue_; } }; }