#ifndef GRAPH_BACKEND_DNNL_EXECUTABLES_RESAMPLING_HPP
#define GRAPH_BACKEND_DNNL_EXECUTABLES_RESAMPLING_HPP
#include "graph/backend/dnnl/executables/base.hpp"
namespace dnnl {
namespace impl {
namespace graph {
namespace dnnl_impl {
struct resampling_executable_t : public op_executable_t {
DECLARE_DESC_CLASS_AND_CREATOR(dnnl::resampling_forward::primitive_desc);
DECLARE_ARG_INDICES_GETTER;
resampling_executable_t(std::shared_ptr<op_t> &op,
const dnnl::engine &p_engine, pd_cache_t &pd_cache,
const fpmath_t &fpmath, bool use_block_layout) {
auto desc
= create_desc(op, p_engine, pd_cache, fpmath, use_block_layout);
prim_ = dnnl::resampling_forward(desc);
if (op->has_attr(op_attr::with_sum))
with_sum_ = op->get_attr<bool>(op_attr::with_sum);
}
void execute(const stream &stream,
const std::unordered_map<int, memory> &args) const override;
#ifdef DNNL_WITH_SYCL
std::optional<::sycl::event> execute_sycl(const stream &stream,
const std::unordered_map<int, memory> &args,
const std::vector<::sycl::event> &deps) const override;
#endif
#if DNNL_GPU_RUNTIME == DNNL_RUNTIME_OCL
cl_event execute_ocl(const stream &stream,
const std::unordered_map<int, memory> &args,
const std::vector<cl_event> &deps) const override;
#endif
private:
dnnl::resampling_forward prim_;
bool with_sum_ {false};
};
struct resampling_bwd_executable_t : public op_executable_t {
DECLARE_DESC_CLASS_AND_CREATOR(dnnl::resampling_backward::primitive_desc);
DECLARE_ARG_INDICES_GETTER;
resampling_bwd_executable_t(std::shared_ptr<op_t> &op,
const dnnl::engine &p_engine, pd_cache_t &pd_cache,
const fpmath_t &fpmath, bool use_block_layout) {
auto desc
= create_desc(op, p_engine, pd_cache, fpmath, use_block_layout);
prim_ = dnnl::resampling_backward(desc);
}
void execute(const stream &stream,
const std::unordered_map<int, memory> &args) const override {
prim_.execute(stream, args);
}
#ifdef DNNL_WITH_SYCL
std::optional<::sycl::event> execute_sycl(const stream &stream,
const std::unordered_map<int, memory> &args,
const std::vector<::sycl::event> &deps) const override {
auto e = dnnl::sycl_interop::execute(prim_, stream, args, deps);
if (stream.get_engine().get_kind() == engine::kind::cpu) e.wait();
return e;
}
#endif
#if DNNL_GPU_RUNTIME == DNNL_RUNTIME_OCL
cl_event execute_ocl(const stream &stream,
const std::unordered_map<int, memory> &args,
const std::vector<cl_event> &deps) const override {
auto e = dnnl::ocl_interop::execute(prim_, stream, args, deps);
return e;
}
#endif
private:
dnnl::resampling_backward prim_;
};
} } } }
#endif