47 DPCTLSyclQueueRef queue_ref;
49 void *aux_ptr =
nullptr;
52 size_t size_in_bytes = 0;
53 bool allocated =
false;
55 bool target_no_queue =
false;
57 bool copy_back =
false;
59 const bool verbose =
false;
60 std::vector<sycl::event> deps;
68 bool target_no_sycl =
false,
69 bool copy_back_request =
false)
72 queue = *(
reinterpret_cast<sycl::queue *
>(queue_ref));
73 target_no_queue = target_no_sycl;
74 copy_back = copy_back_request;
75 orig_ptr =
const_cast<void *
>(src_ptr);
76 size_in_bytes = size *
sizeof(_DataType);
77 deps = std::vector<sycl::event>{};
80 sycl::usm::alloc src_ptr_type = sycl::usm::alloc::unknown;
81 src_ptr_type = sycl::get_pointer_type(src_ptr, queue.get_context());
83 std::cerr <<
"DPNPC_ptr_converter:";
84 std::cerr <<
"\n\t target_no_queue=" << target_no_queue;
85 std::cerr <<
"\n\t copy_back=" << copy_back;
86 std::cerr <<
"\n\t pointer=" << src_ptr;
87 std::cerr <<
"\n\t size=" << size;
88 std::cerr <<
"\n\t size_in_bytes=" << size_in_bytes;
89 std::cerr <<
"\n\t pointer type=" << (long)src_ptr_type;
90 std::cerr <<
"\n\t queue inorder=" << queue.is_in_order();
91 std::cerr <<
"\n\t queue device is_cpu="
92 << queue.get_device().is_cpu();
93 std::cerr <<
"\n\t queue device is_gpu="
94 << queue.get_device().is_gpu();
95 std::cerr <<
"\n\t queue device is_accelerator="
96 << queue.get_device().is_accelerator();
97 std::cerr << std::endl;
100 if (is_memcpy_required(src_ptr_type)) {
102 dpnp_memory_memcpy_c(queue_ref, aux_ptr, src_ptr, size_in_bytes);
105 std::cerr <<
"DPNPC_ptr_converter::alloc and copy memory"
106 <<
" from=" << src_ptr <<
" to=" << aux_ptr
107 <<
" size_in_bytes=" << size_in_bytes << std::endl;
111 aux_ptr =
const_cast<void *
>(src_ptr);
119 std::cerr <<
"DPNPC_ptr_converter::free_memory at=" << aux_ptr
123 sycl::event::wait(deps);
129 dpnp_memory_free_c(queue_ref, aux_ptr);
133 bool is_memcpy_required(sycl::usm::alloc src_ptr_type)
135 if (target_no_queue || queue.get_device().is_gpu()) {
136 if (src_ptr_type == sycl::usm::alloc::unknown) {
139 else if (target_no_queue &&
140 src_ptr_type == sycl::usm::alloc::device) {
148 _DataType *get_ptr()
const
150 return reinterpret_cast<_DataType *
>(aux_ptr);
153 void copy_data_back()
const
156 std::cerr <<
"DPNPC_ptr_converter::copy_data_back:"
157 <<
" from=" << aux_ptr <<
" to=" << orig_ptr
158 <<
" size_in_bytes=" << size_in_bytes << std::endl;
161 dpnp_memory_memcpy_c(queue_ref, orig_ptr, aux_ptr, size_in_bytes);
164 void depends_on(
const std::vector<sycl::event> &new_deps)
167 deps.insert(std::end(deps), std::begin(new_deps), std::end(new_deps));
170 void depends_on(
const sycl::event &new_dep)
173 deps.push_back(new_dep);