#include "cpu/sycl/stream.hpp"
namespace dnnl {
namespace impl {
namespace cpu {
namespace sycl {
status_t stream_t::init() {
if ((flags() & stream_flags::in_order) == 0
&& (flags() & stream_flags::out_of_order) == 0)
return status::invalid_arguments;
const auto &sycl_engine_impl
= *utils::downcast<const xpu::sycl::engine_impl_t *>(
engine()->impl());
auto &sycl_ctx = sycl_engine_impl.context();
auto &sycl_dev = sycl_engine_impl.device();
if (!impl()->queue()) {
const auto props = (flags() & stream_flags::in_order)
? ::sycl::property_list {::sycl::property::queue::in_order {}}
: ::sycl::property_list {};
impl()->set_queue(::sycl::queue(sycl_ctx, sycl_dev, props));
} else {
auto sycl_dev = queue().get_device();
const bool args_ok = engine()->kind() == engine_kind::cpu
&& (sycl_dev.is_cpu() || xpu::sycl::is_host(sycl_dev));
if (!args_ok) return status::invalid_arguments;
}
return status::success;
}
void stream_t::after_exec_hook() {
sycl_ctx().set_deps(xpu::sycl::event_t());
}
} } } }