[CPU] [ARM64] jit prelu (#23115)
### Details: - *[CPU] [AARCH64] jit eltwise PReLU ### Tickets: - *CVS-134011*
This commit is contained in:
parent
14bc4222a8
commit
5d032b1524
|
|
@ -312,6 +312,53 @@ void jit_power_static_emitter::emit_isa(const std::vector<size_t> &in_vec_idxs,
|
|||
}
|
||||
}
|
||||
|
||||
/// PRELU ///
|
||||
jit_prelu_emitter::jit_prelu_emitter(dnnl::impl::cpu::aarch64::jit_generator* host,
|
||||
dnnl::impl::cpu::aarch64::cpu_isa_t host_isa,
|
||||
const std::shared_ptr<ov::Node>& node)
|
||||
: jit_emitter(host, host_isa, node, get_arithmetic_binary_exec_precision(node)) {
|
||||
}
|
||||
|
||||
jit_prelu_emitter::jit_prelu_emitter(dnnl::impl::cpu::aarch64::jit_generator* host,
|
||||
dnnl::impl::cpu::aarch64::cpu_isa_t host_isa,
|
||||
const ov::element::Type exec_prc)
|
||||
: jit_emitter(host, host_isa, exec_prc) {
|
||||
}
|
||||
|
||||
size_t jit_prelu_emitter::get_inputs_count() const { return 2; }
|
||||
|
||||
size_t jit_prelu_emitter::get_aux_vecs_count() const { return 1; }
|
||||
|
||||
std::set<std::vector<element::Type>> jit_prelu_emitter::get_supported_precisions(const std::shared_ptr<ov::Node>& node) {
|
||||
return {{element::f32}};
|
||||
}
|
||||
|
||||
void jit_prelu_emitter::emit_impl(const std::vector<size_t>& in_vec_idxs, const std::vector<size_t>& out_vec_idxs) const {
|
||||
if (host_isa_ == dnnl::impl::cpu::aarch64::asimd) {
|
||||
emit_isa<dnnl::impl::cpu::aarch64::asimd>(in_vec_idxs, out_vec_idxs);
|
||||
} else {
|
||||
OPENVINO_THROW("Can't create jit eltwise kernel");
|
||||
}
|
||||
}
|
||||
|
||||
template <dnnl::impl::cpu::aarch64::cpu_isa_t isa>
|
||||
void jit_prelu_emitter::emit_isa(const std::vector<size_t> &in_vec_idxs, const std::vector<size_t> &out_vec_idxs) const {
|
||||
if (exec_prc_ != ov::element::f32) {
|
||||
OPENVINO_THROW("unsupported precision: " + exec_prc_.to_string());
|
||||
}
|
||||
|
||||
using TReg = typename dnnl::impl::cpu::aarch64::cpu_isa_traits<isa>::TReg;
|
||||
|
||||
TReg tmp = TReg(aux_vec_idxs[0]);
|
||||
TReg src1 = TReg(in_vec_idxs[0]);
|
||||
TReg src2 = TReg(in_vec_idxs[1]);
|
||||
TReg dst = TReg(out_vec_idxs[0]);
|
||||
|
||||
h->fcmge(dst.s, src1.s, 0.0);
|
||||
h->fmul(tmp.s, src1.s, src2.s);
|
||||
h->bsl(dst.b16, src1.b16, tmp.b16);
|
||||
}
|
||||
|
||||
/// RELU ///
|
||||
jit_relu_emitter::jit_relu_emitter(dnnl::impl::cpu::aarch64::jit_generator* host,
|
||||
dnnl::impl::cpu::aarch64::cpu_isa_t host_isa,
|
||||
|
|
|
|||
|
|
@ -110,6 +110,29 @@ private:
|
|||
void emit_isa(const std::vector<size_t> &in_vec_idxs, const std::vector<size_t> &out_vec_idxs) const;
|
||||
};
|
||||
|
||||
class jit_prelu_emitter : public jit_emitter {
|
||||
public:
|
||||
jit_prelu_emitter(dnnl::impl::cpu::aarch64::jit_generator* host,
|
||||
dnnl::impl::cpu::aarch64::cpu_isa_t host_isa,
|
||||
const ov::element::Type exec_prc = ov::element::f32);
|
||||
|
||||
jit_prelu_emitter(dnnl::impl::cpu::aarch64::jit_generator* host,
|
||||
dnnl::impl::cpu::aarch64::cpu_isa_t host_isa,
|
||||
const std::shared_ptr<ov::Node>& node);
|
||||
|
||||
size_t get_inputs_count() const override;
|
||||
|
||||
size_t get_aux_vecs_count() const override;
|
||||
|
||||
static std::set<std::vector<element::Type>> get_supported_precisions(const std::shared_ptr<ov::Node>& node = nullptr);
|
||||
|
||||
private:
|
||||
void emit_impl(const std::vector<size_t> &in_vec_idxs, const std::vector<size_t> &out_vec_idxs) const override;
|
||||
|
||||
template <dnnl::impl::cpu::aarch64::cpu_isa_t isa>
|
||||
void emit_isa(const std::vector<size_t> &in_vec_idxs, const std::vector<size_t> &out_vec_idxs) const;
|
||||
};
|
||||
|
||||
class jit_relu_emitter : public jit_emitter {
|
||||
public:
|
||||
jit_relu_emitter(dnnl::impl::cpu::aarch64::jit_generator* host,
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ bool JitEltwiseExecutor::isSupported(
|
|||
Algorithm::EltwiseMultiply,
|
||||
Algorithm::EltwiseMulAdd,
|
||||
Algorithm::EltwisePowerStatic,
|
||||
Algorithm::EltwisePrelu,
|
||||
Algorithm::EltwiseRelu,
|
||||
Algorithm::EltwiseSubtract);
|
||||
if (!is_supported) {
|
||||
|
|
|
|||
|
|
@ -506,6 +506,7 @@ std::shared_ptr<jit_emitter> jit_uni_eltwise_generic<isa>::create_eltwise_emitte
|
|||
OV_CASE(Algorithm::EltwiseMulAdd, ov::intel_cpu::aarch64::jit_mul_add_emitter),
|
||||
OV_CASE(Algorithm::EltwiseMultiply, ov::intel_cpu::aarch64::jit_multiply_emitter),
|
||||
OV_CASE(Algorithm::EltwisePowerStatic, ov::intel_cpu::aarch64::jit_power_static_emitter),
|
||||
OV_CASE(Algorithm::EltwisePrelu, ov::intel_cpu::aarch64::jit_prelu_emitter),
|
||||
OV_CASE(Algorithm::EltwiseRelu, ov::intel_cpu::aarch64::jit_relu_emitter),
|
||||
OV_CASE(Algorithm::EltwiseSubtract, ov::intel_cpu::aarch64::jit_subtract_emitter));
|
||||
|
||||
|
|
@ -656,6 +657,7 @@ std::set<std::vector<element::Type>> eltwise_precision_helper::get_supported_pre
|
|||
OV_CASE(Algorithm::EltwiseAdd, jit_add_emitter),
|
||||
OV_CASE(Algorithm::EltwiseMulAdd, jit_mul_add_emitter),
|
||||
OV_CASE(Algorithm::EltwiseMultiply, jit_multiply_emitter),
|
||||
OV_CASE(Algorithm::EltwisePrelu, jit_prelu_emitter),
|
||||
OV_CASE(Algorithm::EltwisePowerStatic, jit_power_static_emitter),
|
||||
OV_CASE(Algorithm::EltwiseSubtract, jit_subtract_emitter));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue