26 const std::vector<device> Devs = SyclContext.
get_devices();
28 auto Comp = [&DeviceSelector](
const device &d1,
const device &d2) {
29 return DeviceSelector(d1) < DeviceSelector(d2);
32 const device &SyclDevice = *std::max_element(Devs.begin(), Devs.end(), Comp);
34 impl = std::make_shared<detail::queue_impl>(
36 AsyncHandler, PropList);
41 impl = std::make_shared<detail::queue_impl>(
43 AsyncHandler, PropList);
48 impl = std::make_shared<detail::queue_impl>(
54 impl = std::make_shared<detail::queue_impl>(
61 :
queue(SyclContext, deviceSelector,
67 :
queue(SyclContext, SyclDevice,
71 cl_command_queue
queue::get()
const {
return impl->get(); }
83 return impl->memset(impl, Ptr, Value, Count, {});
87 return impl->memset(impl, Ptr, Value, Count, {DepEvent});
91 const std::vector<event> &DepEvents) {
92 return impl->memset(impl, Ptr, Value, Count, DepEvents);
96 return impl->memcpy(impl, Dest, Src, Count, {});
100 return impl->memcpy(impl, Dest, Src, Count, {DepEvent});
104 const std::vector<event> &DepEvents) {
105 return impl->memcpy(impl, Dest, Src, Count, DepEvents);
113 return impl->mem_advise(impl, Ptr, Length,
pi_mem_advice(Advice), {});
118 return impl->mem_advise(impl, Ptr, Length,
pi_mem_advice(Advice), {DepEvent});
122 const std::vector<event> &DepEvents) {
123 return impl->mem_advise(impl, Ptr, Length,
pi_mem_advice(Advice), DepEvents);
126 event queue::discard_or_return(
const event &Event) {
127 if (impl->MDiscardEvents) {
130 return detail::createSyclObjFromImpl<event>(Impl);
135 event queue::submit_impl(std::function<
void(handler &)> CGH,
136 const detail::code_location &CodeLoc) {
137 return impl->submit(CGH, impl, CodeLoc);
140 event queue::submit_impl(std::function<
void(handler &)> CGH,
queue SecondQueue,
141 const detail::code_location &CodeLoc) {
142 return impl->submit(CGH, impl, SecondQueue.impl, CodeLoc);
145 event queue::submit_impl_and_postprocess(
146 std::function<
void(handler &)> CGH,
const detail::code_location &CodeLoc,
147 const SubmitPostProcessF &PostProcess) {
148 return impl->submit(CGH, impl, CodeLoc, &PostProcess);
151 event queue::submit_impl_and_postprocess(
152 std::function<
void(handler &)> CGH,
queue SecondQueue,
153 const detail::code_location &CodeLoc,
154 const SubmitPostProcessF &PostProcess) {
155 return impl->submit(CGH, impl, SecondQueue.impl, CodeLoc, &PostProcess);
163 impl->wait_and_throw(CodeLoc);
166 template <info::queue Param>
169 return impl->get_info<Param>();
172 #define __SYCL_PARAM_TRAITS_SPEC(ParamType, Param, RetType) \
173 template __SYCL_EXPORT RetType queue::get_info<info::ParamType::Param>() \
176 #include <CL/sycl/info/queue_traits.def>
178 #undef __SYCL_PARAM_TRAITS_SPEC
181 return impl->has_property<PropertyT>();
185 return impl->get_property<PropertyT>();
188 template __SYCL_EXPORT
bool
189 queue::has_property<property::queue::enable_profiling>()
const;
191 queue::get_property<property::queue::enable_profiling>()
const;
193 template __SYCL_EXPORT
bool
194 queue::has_property<property::queue::in_order>()
const;
196 queue::get_property<property::queue::in_order>()
const;
206 buffer<detail::AssertHappened, 1> &queue::getAssertHappenedBuffer() {
207 return impl->getAssertHappenedBuffer();
210 bool queue::device_has(
aspect Aspect)
const {
212 return impl->getDeviceImplPtr()->has(Aspect);