#include #include #include #include #include #include #include #include namespace migraphx { inline namespace MIGRAPHX_INLINE_NS { namespace cpu { struct dnnl_pooling : dnnl_extend_op { std::vector arg_map(int) const { return {MIGRAPHX_DNNL_PREFIX(ARG_SRC)}; } dnnl::pooling_forward::desc get_desc(const std::unordered_map& m) const { auto algo = op.mode == op::pooling_mode::max ? dnnl::algorithm::pooling_max : dnnl::algorithm::pooling_avg; auto kdims = op.kdims(); std::vector padding_l(op.padding.begin(), op.padding.begin() + kdims); std::vector padding_r(op.padding.begin() + kdims, op.padding.end()); return {dnnl::prop_kind::forward_inference, algo, m.at(MIGRAPHX_DNNL_PREFIX(ARG_SRC)), m.at(MIGRAPHX_DNNL_PREFIX(ARG_DST)), to_dnnl_dims(op.stride), to_dnnl_dims(op.lengths), to_dnnl_dims(padding_l), to_dnnl_dims(padding_r)}; } }; } // namespace cpu } // namespace MIGRAPHX_INLINE_NS } // namespace migraphx