50 DPCTLSyclQueueRef queue_ref;
52 void *aux_ptr =
nullptr;
55 size_t size_in_bytes = 0;
56 bool allocated =
false;
58 bool target_no_queue =
false;
60 bool copy_back =
false;
62 const bool verbose =
false;
63 std::vector<sycl::event> deps;
71 bool target_no_sycl =
false,
72 bool copy_back_request =
false)
75 queue = *(
reinterpret_cast<sycl::queue *
>(queue_ref));
76 target_no_queue = target_no_sycl;
77 copy_back = copy_back_request;
78 orig_ptr =
const_cast<void *
>(src_ptr);
79 size_in_bytes = size *
sizeof(_DataType);
80 deps = std::vector<sycl::event>{};
83 sycl::usm::alloc src_ptr_type = sycl::usm::alloc::unknown;
84 src_ptr_type = sycl::get_pointer_type(src_ptr, queue.get_context());
86 std::cerr <<
"DPNPC_ptr_converter:";
87 std::cerr <<
"\n\t target_no_queue=" << target_no_queue;
88 std::cerr <<
"\n\t copy_back=" << copy_back;
89 std::cerr <<
"\n\t pointer=" << src_ptr;
90 std::cerr <<
"\n\t size=" << size;
91 std::cerr <<
"\n\t size_in_bytes=" << size_in_bytes;
92 std::cerr <<
"\n\t pointer type=" << (long)src_ptr_type;
93 std::cerr <<
"\n\t queue inorder=" << queue.is_in_order();
94 std::cerr <<
"\n\t queue device is_cpu="
95 << queue.get_device().is_cpu();
96 std::cerr <<
"\n\t queue device is_gpu="
97 << queue.get_device().is_gpu();
98 std::cerr <<
"\n\t queue device is_accelerator="
99 << queue.get_device().is_accelerator();
100 std::cerr << std::endl;
103 if (is_memcpy_required(src_ptr_type)) {
105 dpnp_memory_memcpy_c(queue_ref, aux_ptr, src_ptr, size_in_bytes);
108 std::cerr <<
"DPNPC_ptr_converter::alloc and copy memory"
109 <<
" from=" << src_ptr <<
" to=" << aux_ptr
110 <<
" size_in_bytes=" << size_in_bytes << std::endl;
114 aux_ptr =
const_cast<void *
>(src_ptr);
122 std::cerr <<
"DPNPC_ptr_converter::free_memory at=" << aux_ptr
126 sycl::event::wait(deps);
132 dpnp_memory_free_c(queue_ref, aux_ptr);
136 bool is_memcpy_required(sycl::usm::alloc src_ptr_type)
138 if (target_no_queue || queue.get_device().is_gpu()) {
139 if (src_ptr_type == sycl::usm::alloc::unknown) {
142 else if (target_no_queue &&
143 src_ptr_type == sycl::usm::alloc::device) {
151 _DataType *get_ptr()
const
153 return reinterpret_cast<_DataType *
>(aux_ptr);
156 void copy_data_back()
const
159 std::cerr <<
"DPNPC_ptr_converter::copy_data_back:"
160 <<
" from=" << aux_ptr <<
" to=" << orig_ptr
161 <<
" size_in_bytes=" << size_in_bytes << std::endl;
164 dpnp_memory_memcpy_c(queue_ref, orig_ptr, aux_ptr, size_in_bytes);
167 void depends_on(
const std::vector<sycl::event> &new_deps)
170 deps.insert(std::end(deps), std::begin(new_deps), std::end(new_deps));
173 void depends_on(
const sycl::event &new_dep)
176 deps.push_back(new_dep);