From 30ff1caf073b4341fd0614e0974c67a8588c8931 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Wed, 15 Apr 2026 19:11:21 +0200 Subject: Feierabend --- lib/sycl/c++/data.hpp | 56 ++++++++++++++++++++++++++++++------------------- lib/sycl/tests/data.cpp | 8 +++++++ 2 files changed, 43 insertions(+), 21 deletions(-) (limited to 'lib') diff --git a/lib/sycl/c++/data.hpp b/lib/sycl/c++/data.hpp index 3ac51e0..0206833 100644 --- a/lib/sycl/c++/data.hpp +++ b/lib/sycl/c++/data.hpp @@ -131,16 +131,12 @@ private: SAW_FORBID_MOVE(data); public: data(const data::MetaSchema>& meta__, acpp::sycl::queue& q__): - q_{&q__}, - values_{nullptr} + values_{nullptr}, + meta_{meta__}, + q_{&q__} { SAW_ASSERT(q_); - /// TODO use meta - data m{1u}; - for(uint64_t i = 0u; i < Dims; ++i){ - m = m * meta__.at({i}); - } - values_ = acpp::sycl::malloc_device>(m.get(),*q_); + values_ = acpp::sycl::malloc_device>(flat_size().get(),*q_); SAW_ASSERT(values_); } @@ -152,16 +148,6 @@ public: SAW_ASSERT(q_); } - data(const data, Encode>& meta__,acpp::sycl::queue& q__): - values_{nullptr}, - meta_{meta__}, - q_{&q__} - { - SAW_ASSERT(q_); - values_ = acpp::sycl::malloc_device>(flat_size().get(),*q_); - SAW_ASSERT(values_); - } - ~data(){ if(not values_){ return; @@ -184,6 +170,19 @@ public: return values_[kel::lbm::flatten_index::apply(index,meta()).get()]; } + constexpr error_or reset_to(const data::MetaSchema>& meta_arg){ + SAW_ASSERT(q_); + meta_ = meta_arg; + + if(values_){ + acpp::sycl::free(values_,*q_); + } + values_ = acpp::sycl::malloc_device>(flat_size().get(),*q_); + SAW_ASSERT(q_); + + return make_void(); + } + constexpr data* flat_data() const { return values_; } @@ -391,10 +390,11 @@ private: members_{(static_cast(Is), q)...} {} public: + /* data(data::MetaSchema>& meta__, acpp::sycl::queue& q__): data{q__, std::make_index_sequence{}} - { - } + {} + */ data(acpp::sycl::queue& q__): data{q__, std::make_index_sequence{}} @@ -754,6 +754,7 @@ struct sycl_copy_helper, Encode> final { static_assert(sizeof(std::decay_t) == sizeof(std::decay_t), "Unequal size"); + SAW_ASSERT(host_data.flat_size() == sycl_data.flat_size()); q.submit([&](acpp::sycl::handler& h){ h.copy(sycl_ptr,host_ptr, host_data.flat_size().get()); }).wait(); @@ -761,14 +762,27 @@ struct sycl_copy_helper, Encode> final { } static saw::error_or copy_to_device(saw::data& host_data, saw::data>& sycl_data, sycl::queue& q){ + + { + auto hm = host_data.meta(); + auto sm = sycl_data.meta(); + bool equ{true}; + for(uint64_t i{0u}; i < Dims; ++i){ + equ &= (hm.at({i}).get() == sm.at({i}).get()); + } + if(not equ){ + sycl_data.reset_to(hm); + } + } + auto host_ptr = host_data.flat_data(); auto sycl_ptr = sycl_data.flat_data(); - static_assert(sizeof(std::decay_t) == sizeof(std::decay_t), "Unequal size"); q.submit([&](acpp::sycl::handler& h){ h.copy(host_ptr,sycl_ptr, host_data.flat_size().get()); }).wait(); + return saw::make_void(); } diff --git a/lib/sycl/tests/data.cpp b/lib/sycl/tests/data.cpp index 6b17622..4321a0d 100644 --- a/lib/sycl/tests/data.cpp +++ b/lib/sycl/tests/data.cpp @@ -38,6 +38,13 @@ SAW_TEST("Sycl Data Compilation"){ // SAW_EXPECT(test_f.at({}).get() == 1, "Value check failed"); } +SAW_TEST("Sycl Data Array of Struct"){ + acpp::sycl::queue q; + + saw::data, kel::lbm::encode::Sycl> a{{{2u}},q}; +} + +/* SAW_TEST("Sycl Data Compilation for Particle Similacrum"){ acpp::sycl::queue q; @@ -45,4 +52,5 @@ SAW_TEST("Sycl Data Compilation for Particle Similacrum"){ sch::TestObjSchema > a; } +*/ } -- cgit v1.2.3