Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
buffer_access_utils.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 "shambase/optional.hpp"
20
21namespace sham::details {
22
32 template<class T>
35 if (!buffer.has_value()) {
36 return nullptr;
37 } else {
38 return buffer.value().get().get_read_access(depends_list);
39 }
40 }
41
51 template<class T>
54 if (!buffer.has_value()) {
55 return nullptr;
56 } else {
57 return buffer.value().get().get_write_access(depends_list);
58 }
59 }
60
66 template<class T>
67 void complete_state_optional(sycl::event e, shambase::opt_ref<T> buffer) {
68 if (buffer.has_value()) {
69 buffer.value().get().complete_event_state(e);
70 }
71 }
72
73 template<class Obj>
74 inline auto get_read_access(Obj &o, sham::EventList &depends_list) {
75 return o.get_read_access(depends_list);
76 }
77
78 template<class Obj>
79 inline auto get_write_access(Obj &o, sham::EventList &depends_list) {
80 return o.get_write_access(depends_list);
81 }
82 template<class Obj>
83 inline auto complete_event_state(Obj &o, sycl::event e) {
84 return o.complete_event_state(e);
85 }
86
87 template<class Obj>
88 inline auto get_read_access(std::reference_wrapper<Obj> &o, sham::EventList &depends_list) {
89 return o.get().get_read_access(depends_list);
90 }
91
92 template<class Obj>
93 inline auto get_write_access(std::reference_wrapper<Obj> &o, sham::EventList &depends_list) {
94 return o.get().get_write_access(depends_list);
95 }
96 template<class Obj>
97 inline auto complete_event_state(std::reference_wrapper<Obj> &o, sycl::event e) {
98 return o.get().complete_event_state(e);
99 }
100
101} // namespace sham::details
const T * read_access_optional(shambase::opt_ref< sham::DeviceBuffer< T > > buffer, sham::EventList &depends_list)
Get a pointer to the data of an optional device buffer, for reading.
void complete_state_optional(sycl::event e, shambase::opt_ref< T > buffer)
Complete the event state of an optional device buffer.
T * write_access_optional(shambase::opt_ref< sham::DeviceBuffer< T > > buffer, sham::EventList &depends_list)
Get a pointer to the data of an optional device buffer, for writing.
A buffer allocated in USM (Unified Shared Memory).
Class to manage a list of SYCL events.
Definition EventList.hpp:31
std::optional< std::reference_wrapper< T > > opt_ref
Optional reference wrapper.
Definition optional.hpp:26