#ifndef CPU_AARCH64_JIT_BRDGMM_DW_CONV_HPP
#define CPU_AARCH64_JIT_BRDGMM_DW_CONV_HPP
#include "common/primitive.hpp"
#include "cpu/cpu_convolution_pd.hpp"
#include "cpu/platform.hpp"
#include "cpu/aarch64/brgemm/brgemm.hpp"
#include "cpu/aarch64/jit_primitive_conf.hpp"
namespace dnnl {
namespace impl {
namespace cpu {
namespace aarch64 {
template <cpu_isa_t isa>
struct brdgmm_dw_convolution_fwd_t : public primitive_t {
struct pd_t : public cpu_convolution_fwd_pd_t {
using cpu_convolution_fwd_pd_t::cpu_convolution_fwd_pd_t;
DECLARE_COMMON_PD_T(JIT_IMPL_NAME_HELPER("brdgmm_dw:", jcp_.isa, ""),
brdgmm_dw_convolution_fwd_t);
status_t init(engine_t *engine);
jit_brdgmm_conv_conf_t jcp_ = utils::zero<decltype(jcp_)>();
std::vector<brgemm_desc_t> bcps_;
std::vector<brgemm_batch_element_t> batches_;
std::vector<int> bs_;
size_t buffer_size_ = 0;
private:
status_t init_brdgmm_conf();
status_t init_scratchpad();
void init_batch_elements();
};
brdgmm_dw_convolution_fwd_t(const pd_t *apd) : primitive_t(apd) {}
status_t init(engine_t *engine) override;
status_t execute(const exec_ctx_t &ctx) const override;
private:
std::vector<std::unique_ptr<brgemm_kernel_t>> brdgmm_kernels_;
const pd_t *pd() const { return (const pd_t *)primitive_t::pd().get(); }
};
} } } } #endif