#ifndef GRAPH_BACKEND_DNNL_EXECUTABLES_SUM_HPP
#define GRAPH_BACKEND_DNNL_EXECUTABLES_SUM_HPP
#include "graph/backend/dnnl/executables/base.hpp"
namespace dnnl {
namespace impl {
namespace graph {
namespace dnnl_impl {
struct sum_executable_t : public op_executable_t {
DECLARE_DESC_CLASS_AND_CREATOR(dnnl::sum::primitive_desc);
DECLARE_ARG_INDICES_GETTER;
sum_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::sum(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::sum prim_;
};
} } } }
#endif