1#ifndef QLINEARSOFTMAX_H_
2#define QLINEARSOFTMAX_H_
28template <
typename TT,
int INP_H,
int INP_W,
int INP_W_PAD>
45 ): x_scale(x_scale), y_scale(y_scale), x_zero(x_zero), y_zero(y_zero) {};
49 output_stream<TT>* out
52 static void registerKernelClass() {
53 static_assert((std::is_same<TT, int8_t>::value) || (std::is_same<TT, uint8_t>::value));
54 REGISTER_FUNCTION(QLinearSoftmaxScalar::filter);
64template <
typename TT,
int INP_H,
int INP_W,
int INP_W_PAD>
73 int EXP_BITSHIFT = 18;
74 int OUT_BITSHIFT = 10;
90 output_stream<TT>* out
93 static void registerKernelClass() {
94 static_assert((std::is_same<TT, int8_t>::value) || (std::is_same<TT, uint8_t>::value));
95 static_assert(INP_W_PAD % 16 == 0);
96 REGISTER_FUNCTION(QLinearSoftmaxFloatmul::filter);
106template <
typename TT,
int INP_H,
int INP_W,
int INP_W_PAD>
116 int OUT_BITSHIFT = 4;
119 int16_t fastexp_scale;
120 int32_t expsum_offset;
132 input_window<TT>* in,
133 output_stream<TT>* out
136 static void registerKernelClass() {
137 static_assert((std::is_same<TT, int8_t>::value) || (std::is_same<TT, uint8_t>::value));
138 static_assert(INP_W_PAD % 16 == 0);
139 REGISTER_FUNCTION(QLinearSoftmaxSingleaxis::filter);
Vector implementation using fastexp2 method, float multiplication for exp estimation QLinearSoftmaxFl...
Definition qlinearsoftmax.h:65
Scalar implementation. QLinearSoftmaxScalar<10,20,32> takes 517922 cycles for expf,...
Definition qlinearsoftmax.h:29
Vector implementation using fastexp2 method for single axis, QLinearSoftmaxSingleaxis<10,...
Definition qlinearsoftmax.h:107