diff options
| author | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-02-11 17:27:59 +0100 |
|---|---|---|
| committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-02-11 17:27:59 +0100 |
| commit | 595cdfd51594af7cee4258a1ed92b06c6bf0171d (patch) | |
| tree | 9a71f60802d808678268bcbc843fd1cb7b83264a /lib/sycl/c++ | |
| parent | 8945f921d6393689c54133ec84ff79008e132685 (diff) | |
| download | libs-lbm-595cdfd51594af7cee4258a1ed92b06c6bf0171d.tar.gz | |
Fixing
Diffstat (limited to 'lib/sycl/c++')
| -rw-r--r-- | lib/sycl/c++/data.hpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/sycl/c++/data.hpp b/lib/sycl/c++/data.hpp index 10c500d..50adb4f 100644 --- a/lib/sycl/c++/data.hpp +++ b/lib/sycl/c++/data.hpp @@ -80,6 +80,10 @@ public: values_{nullptr} {} + data(data<schema::FixedArray<Sch,Dims...>, kel::lbm::encode::Sycl<Encode>>& values__): + values_{&values__.at({})} + {} + data(data<Sch,Encode>* values__): values_{values__} {} @@ -343,6 +347,36 @@ struct sycl_copy_helper<sch::Struct<Members...>, Encode> final { } }; +template<typename Sch, uint64_t... Dims, typename Encode> +struct sycl_copy_helper<sch::FixedArray<Sch,Dims...>, Encode> final { + using Schema = sch::FixedArray<Sch,Dims...>; + + static saw::error_or<void> copy_to_host(saw::data<Schema,encode::Sycl<Encode>>& sycl_data, saw::data<Schema,Encode>& host_data, sycl::queue& q){ + auto host_ptr = host_data.flat_data(); + auto sycl_ptr = sycl_data.flat_data(); + + static_assert(sizeof(std::decay_t<decltype(sycl_ptr)>) == sizeof(std::decay_t<decltype(host_ptr)>), "Unequal size"); + + q.submit([&](acpp::sycl::handler& h){ + h.copy(sycl_ptr,host_ptr, saw::ct_multiply<uint64_t,Dims...>::value); + }).wait(); + return saw::make_void(); + } + + static saw::error_or<void> copy_to_device(saw::data<Schema,Encode>& host_data, saw::data<Schema,encode::Sycl<Encode>>& sycl_data, sycl::queue& q){ + auto host_ptr = host_data.flat_data(); + auto sycl_ptr = sycl_data.flat_data(); + + static_assert(sizeof(std::decay_t<decltype(sycl_ptr)>) == sizeof(std::decay_t<decltype(host_ptr)>), "Unequal size"); + + q.submit([&](acpp::sycl::handler& h){ + h.copy(host_ptr,sycl_ptr, saw::ct_multiply<uint64_t,Dims...>::value); + }).wait(); + return saw::make_void(); + } +}; + + template<typename Schema, typename Encode> struct make_chunk_struct_view_helper; |
