onnx2versal
Loading...
Searching...
No Matches
qlinearadd.h
1#ifndef QLINEARADD_H_
2#define QLINEARADD_H_
3
4#include <assert.h>
5#include <type_traits>
6#include <adf.h>
7
8
26template <typename TT, int W, int IS_RELU>
28 private:
29 float a_scale;
30 float b_scale;
31 float c_scale;
32 TT a_zero;
33 TT b_zero;
34 TT c_zero;
35
36 int bitshift;
37 int32_t ascale;
38 int32_t bscale;
39 int32_t shiftv;
40
41 public:
43 float a_scale,
44 float b_scale,
45 float c_scale,
46 TT a_zero,
47 TT b_zero,
48 TT c_zero
49 );
50
51 void filter(
52 input_stream<TT>* restrict inA,
53 input_stream<TT>* restrict inB,
54 output_stream<TT>* restrict out
55 );
56
57 static void registerKernelClass() {
58 static_assert(W%16==0);
59 static_assert((std::is_same<TT, int8_t>::value) || (std::is_same<TT, uint8_t>::value));
60 REGISTER_FUNCTION(QLinearAddInt8::filter);
61 }
62};
66#endif // QLINEARADD_H_
Scalar implementation, requires W%16==0, QLinearAddInt8<float_t, 16384, 1> takes 8231 cycles.
Definition qlinearadd.h:27