Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
RadixTreeField.hpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
10#pragma once
11
18#include "shambackends/sycl.hpp"
21
22template<class T>
24
25 RadixTreeField(u32 nvar, u32 cnt)
26 : radix_tree_field_buf(std::make_unique<sycl::buffer<T>>(cnt * nvar)), nvar(nvar) {}
27
28 public:
29 u32 nvar;
30 std::unique_ptr<sycl::buffer<T>> radix_tree_field_buf;
31
32 RadixTreeField() = default;
33
34 RadixTreeField(u32 nvar, std::unique_ptr<sycl::buffer<T>> radix_tree_field_buf)
35 : nvar(nvar), radix_tree_field_buf(std::move(radix_tree_field_buf)) {}
36
37 static RadixTreeField<T> make_empty(u32 nvar, u32 cnt) { return RadixTreeField<T>(nvar, cnt); }
38
39 RadixTreeField(RadixTreeField<T> &src, sycl::buffer<u32> &id_extract_field)
40 : radix_tree_field_buf(
41 std::make_unique<sycl::buffer<T>>(id_extract_field.size() * src.nvar)),
42 nvar(src.nvar) {
43 // cut new field according to the id map
44
45 shamsys::instance::get_compute_queue().submit([&](sycl::handler &cgh) {
46 sycl::accessor acc_curr{*src.radix_tree_field_buf, cgh, sycl::read_only};
47 sycl::accessor acc_other{*radix_tree_field_buf, cgh, sycl::write_only, sycl::no_init};
48 sycl::accessor acc_idxs{id_extract_field, cgh, sycl::read_only};
49
50 u32 nvar_loc = nvar;
51
52 cgh.parallel_for(sycl::range<1>{id_extract_field.size()}, [=](sycl::item<1> i) {
53 const u32 gid = i.get_linear_id();
54
55 const u32 idx_extr = acc_idxs[gid] * nvar_loc;
56 const u32 idx_push = gid * nvar_loc;
57
58 for (u32 a = 0; a < nvar_loc; a++) {
59 acc_other[idx_push + a] = acc_curr[idx_extr + a];
60 }
61 });
62 });
63 }
64};
Header file describing a Node Instance.
std::uint32_t u32
32 bit unsigned integer