#ifndef CPU_AARCH64_UKERNEL_TRANSFORM_HPP
#define CPU_AARCH64_UKERNEL_TRANSFORM_HPP
#include <memory>
#include "cpu/ukernel/c_types_map.hpp"
#include "cpu/aarch64/matmul/brgemm_matmul_copy_utils.hpp"
#ifdef DNNL_EXPERIMENTAL_UKERNEL
struct dnnl_transform : public dnnl::impl::c_compatible {
dnnl_transform(dnnl::impl::dim_t K, dnnl::impl::dim_t N,
dnnl::impl::cpu::ukernel::pack_type_t in_pack_type,
dnnl::impl::dim_t in_ld, dnnl::impl::dim_t out_ld,
dnnl::impl::data_type_t in_dt, dnnl::impl::data_type_t out_dt);
dnnl::impl::status_t generate();
dnnl::impl::status_t execute(const void *src, void *dst) const;
private:
dnnl::impl::dim_t K_, N_;
dnnl::impl::dim_t in_ld_, out_ld_;
dnnl::impl::data_type_t in_dt_, out_dt_;
dnnl::impl::dims_t strides_ {};
dnnl::impl::cpu::aarch64::matmul::brgemm_matmul_conf_t bmc_;
std::unique_ptr<
dnnl::impl::cpu::aarch64::matmul::jit_brgemm_matmul_copy_b_t>
pack_B_kernel_;
dnnl::impl::status_t create_verbose_info();
std::string verbose_info_;
};
namespace dnnl {
namespace impl {
namespace cpu {
namespace aarch64 {
namespace ukernel {
status_t dnnl_transform_create(dnnl_transform **transform, dim_t K, dim_t N,
dnnl::impl::cpu::ukernel::pack_type_t in_pack_type, dim_t in_ld,
dim_t out_ld, data_type_t in_dt, data_type_t out_dt);
status_t dnnl_transform_generate(dnnl_transform *transform);
status_t dnnl_transform_execute(
const dnnl_transform *transform, const void *in_ptr, void *out_ptr);
status_t dnnl_transform_destroy(dnnl_transform *transform);
} } } } }
#endif
#endif