7#include <dr/detail/ranges.hpp>
8#include <dr/detail/sycl_utils.hpp>
9#include <dr/sp/device_ptr.hpp>
10#include <dr/sp/init.hpp>
12#include <sycl/sycl.hpp>
18inline constexpr auto local = dr::ranges::__detail::local;
20template <
typename Src,
typename Dest>
22 std::is_trivially_copyable_v<Dest>;
24template <std::contiguous_iterator Iter>
25sycl::usm::alloc get_pointer_type(Iter iter) {
26 return sycl::get_pointer_type(std::to_address(iter), sp::context());
30 return sycl::get_pointer_type(ptr.get_raw_pointer(), sp::context());
33template <std::contiguous_iterator Iter>
34sycl::device get_pointer_device(Iter iter) {
35 return sycl::get_pointer_device(std::to_address(iter), sp::context());
39 return sycl::get_pointer_device(ptr.get_raw_pointer(), sp::context());
42template <
typename InputIt> sycl::queue &get_queue_for_pointer(InputIt iter) {
43 if (get_pointer_type(iter) == sycl::usm::alloc::device) {
44 auto device = get_pointer_device(iter);
45 return __detail::queue(device);
47 return default_queue();
51template <
typename InputIt,
typename OutputIt>
52sycl::queue &get_queue_for_pointers(InputIt iter, OutputIt iter2) {
53 if (get_pointer_type(iter) == sycl::usm::alloc::device) {
54 auto device = get_pointer_device(iter);
55 return __detail::queue(device);
56 }
else if (get_pointer_type(iter2) == sycl::usm::alloc::device) {
57 auto device = get_pointer_device(iter2);
58 return __detail::queue(device);
60 return default_queue();
64inline sycl::event combine_events(sycl::queue &q,
65 const std::vector<sycl::event> &events) {
66 auto e = q.submit([&](
auto &&h) {
74inline sycl::event combine_events(
const std::vector<sycl::event> &events) {
75 auto &&q = __detail::queue(0);
76 return combine_events(q, events);
79inline void wait(sycl::event &event) {
event.wait(); }
81inline void wait(sycl::event &&event) {
event.wait(); }
83inline void wait(
const std::vector<sycl::event> &events) {
84 sycl::event::wait(events);
Definition: device_ptr.hpp:17
Definition: detail.hpp:21