Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
fallbackMemory.cpp
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
19
20namespace shamalgs::memory::details {
21
22 template<class T>
23 T Fallback<T>::extract_element(sycl::queue &q, sycl::buffer<T> &buf, u32 idx) {
24
25 T ret_val;
26 {
27 sycl::host_accessor acc{buf, sycl::read_only};
28 ret_val = acc[idx];
29 }
30
31 return ret_val;
32 }
33
34 template<class T>
35 sycl::buffer<T> Fallback<T>::vec_to_buf(const std::vector<T> &vec) {
36 sycl::buffer<T> ret(vec.size());
37
38 {
39 sycl::host_accessor acc{ret, sycl::write_only, sycl::no_init};
40
41 for (u32 idx = 0; idx < vec.size(); idx++) {
42 acc[idx] = vec[idx];
43 }
44 }
45
46 return std::move(ret);
47 }
48
49 template<class T>
50 std::vector<T> Fallback<T>::buf_to_vec(sycl::buffer<T> &buf, u32 len) {
51 std::vector<T> ret;
52 ret.resize(len);
53
54 {
55 sycl::host_accessor acc{buf, sycl::read_only};
56
57 for (u32 idx = 0; idx < len; idx++) {
58 ret[idx] = acc[idx];
59 }
60 }
61
62 return std::move(ret);
63 }
64
65#define XMAC_TYPES \
66 X(f32) \
67 X(f32_2) \
68 X(f32_3) \
69 X(f32_4) \
70 X(f32_8) \
71 X(f32_16) \
72 X(f64) \
73 X(f64_2) \
74 X(f64_3) \
75 X(f64_4) \
76 X(f64_8) \
77 X(f64_16) \
78 X(u8) \
79 X(u32) \
80 X(u32_2) \
81 X(u32_3) \
82 X(u32_4) \
83 X(u32_8) \
84 X(u32_16) \
85 X(u64) \
86 X(u64_2) \
87 X(u64_3) \
88 X(u64_4) \
89 X(u64_8) \
90 X(u64_16) \
91 X(i64_3) \
92 X(i64)
93
94#define X(_arg_) template struct Fallback<_arg_>;
95 XMAC_TYPES
96#undef X
97
98} // namespace shamalgs::memory::details
std::uint32_t u32
32 bit unsigned integer