25 queue::queue(
const context &SyclContext,
const device_selector &DeviceSelector,
26 const async_handler &AsyncHandler,
const property_list &PropList) {
28 const std::vector<device> Devs = SyclContext.get_devices();
30 auto Comp = [&DeviceSelector](
const device &d1,
const device &d2) {
31 return DeviceSelector(d1) < DeviceSelector(d2);
34 const device &SyclDevice = *std::max_element(Devs.begin(), Devs.end(), Comp);
36 impl = std::make_shared<detail::queue_impl>(
38 AsyncHandler, PropList);
43 impl = std::make_shared<detail::queue_impl>(
45 AsyncHandler, PropList);
50 impl = std::make_shared<detail::queue_impl>(
54 queue::queue(cl_command_queue clQueue,
const context &SyclContext,
56 impl = std::make_shared<detail::queue_impl>(
61 queue::queue(
const context &SyclContext,
const device_selector &deviceSelector,
62 const property_list &PropList)
63 : queue(SyclContext, deviceSelector,
69 :
queue(SyclContext, SyclDevice,
73 cl_command_queue
queue::get()
const {
return impl->get(); }
79 bool queue::is_host()
const {
80 bool IsHost = impl->is_host();
81 assert(!IsHost &&
"queue::is_host should not be called in implementation.");
88 return impl->memset(impl, Ptr, Value, Count, {});
92 return impl->memset(impl, Ptr, Value, Count, {DepEvent});
96 const std::vector<event> &DepEvents) {
97 return impl->memset(impl, Ptr, Value, Count, DepEvents);
101 return impl->memcpy(impl, Dest, Src, Count, {});
105 return impl->memcpy(impl, Dest, Src, Count, {DepEvent});
109 const std::vector<event> &DepEvents) {
110 return impl->memcpy(impl, Dest, Src, Count, DepEvents);
118 return impl->mem_advise(impl, Ptr, Length,
pi_mem_advice(Advice), {});
123 return impl->mem_advise(impl, Ptr, Length,
pi_mem_advice(Advice), {DepEvent});
127 const std::vector<event> &DepEvents) {
128 return impl->mem_advise(impl, Ptr, Length,
pi_mem_advice(Advice), DepEvents);
131 event queue::discard_or_return(
const event &Event) {
132 if (!(impl->MDiscardEvents))
135 auto Impl = std::make_shared<event_impl>(event_impl::HES_Discarded);
136 return detail::createSyclObjFromImpl<event>(Impl);
139 event queue::submit_impl(std::function<
void(handler &)> CGH,
140 const detail::code_location &CodeLoc) {
141 return impl->submit(CGH, impl, CodeLoc);
144 event queue::submit_impl(std::function<
void(handler &)> CGH, queue SecondQueue,
145 const detail::code_location &CodeLoc) {
146 return impl->submit(CGH, impl, SecondQueue.impl, CodeLoc);
149 event queue::submit_impl_and_postprocess(
150 std::function<
void(handler &)> CGH,
const detail::code_location &CodeLoc,
151 const SubmitPostProcessF &PostProcess) {
152 return impl->submit(CGH, impl, CodeLoc, &PostProcess);
155 event queue::submit_impl_and_postprocess(
156 std::function<
void(handler &)> CGH, queue SecondQueue,
157 const detail::code_location &CodeLoc,
158 const SubmitPostProcessF &PostProcess) {
159 return impl->submit(CGH, impl, SecondQueue.impl, CodeLoc, &PostProcess);
167 impl->wait_and_throw(CodeLoc);
170 template <
typename Param>
173 return impl->get_info<Param>();
176 #define __SYCL_PARAM_TRAITS_SPEC(DescType, Desc, ReturnT, Picode) \
177 template __SYCL_EXPORT ReturnT queue::get_info<info::queue::Desc>() const;
179 #include <sycl/info/queue_traits.def>
181 #undef __SYCL_PARAM_TRAITS_SPEC
184 return impl->has_property<PropertyT>();
188 return impl->get_property<PropertyT>();
191 #define __SYCL_MANUALLY_DEFINED_PROP(NS_QUALIFIER, PROP_NAME) \
192 template __SYCL_EXPORT bool queue::has_property<NS_QUALIFIER::PROP_NAME>() \
194 template __SYCL_EXPORT NS_QUALIFIER::PROP_NAME \
195 queue::get_property<NS_QUALIFIER::PROP_NAME>() const;
197 #define __SYCL_DATA_LESS_PROP(NS_QUALIFIER, PROP_NAME, ENUM_VAL) \
198 __SYCL_MANUALLY_DEFINED_PROP(NS_QUALIFIER, PROP_NAME)
200 #include <sycl/properties/queue_properties.def>
203 return impl->has_property<property::queue::in_order>();
212 buffer<detail::AssertHappened, 1> &queue::getAssertHappenedBuffer() {
213 return impl->getAssertHappenedBuffer();
216 event queue::memcpyToDeviceGlobal(
void *DeviceGlobalPtr,
const void *Src,
217 bool IsDeviceImageScope,
size_t NumBytes,
219 const std::vector<event> &DepEvents) {
220 return impl->memcpyToDeviceGlobal(impl, DeviceGlobalPtr, Src,
221 IsDeviceImageScope, NumBytes, Offset,
225 event queue::memcpyFromDeviceGlobal(
void *Dest,
const void *DeviceGlobalPtr,
226 bool IsDeviceImageScope,
size_t NumBytes,
228 const std::vector<event> &DepEvents) {
229 return impl->memcpyFromDeviceGlobal(impl, Dest, DeviceGlobalPtr,
230 IsDeviceImageScope, NumBytes, Offset,
234 bool queue::device_has(aspect Aspect)
const {
236 return impl->getDeviceImplPtr()->has(Aspect);
240 return impl->has_property<