onnx2versal
Loading...
Searching...
No Matches
qlinearmac.h
1
#ifndef QLINEARMAC_KERNEL_H
2
#define QLINEARMAC_KERNEL_H
3
4
#include <type_traits>
5
#include <assert.h>
6
#include <adf.h>
7
8
32
template
<
typename
TT,
typename
TTPARAM,
int
B,
int
W,
int
IS_RELU>
33
class
QlinearMacScalar
{
34
35
private
:
36
alignas
(32) TTPARAM (&weights)[W];
37
alignas
(32) TTPARAM (&bias)[W];
38
float
x_scale;
39
float
w_scale;
40
float
b_scale;
41
float
z_scale;
42
float
y_scale;
43
TT x_zero;
44
TTPARAM w_zero;
45
TTPARAM b_zero;
46
TT z_zero;
47
TT y_zero;
48
49
// precompute
50
float
scale_x;
51
float
scale_z;
52
float
shift_x[W];
53
float
shift_z[W];
54
55
public
:
56
QlinearMacScalar
(
57
TTPARAM (&w)[W],
58
TTPARAM (&b)[W],
59
float
x_scale,
60
float
w_scale,
61
float
b_scale,
62
float
z_scale,
63
float
y_scale,
64
TT x_zero,
65
TTPARAM w_zero,
66
TTPARAM b_zero,
67
TT z_zero,
68
TT y_zero
69
);
70
71
void
filter(
72
input_window<TT>* in,
73
output_window<TT>* out
74
);
75
76
static
void
registerKernelClass() {
77
REGISTER_FUNCTION(QlinearMacScalar::filter);
78
REGISTER_PARAMETER(weights);
79
REGISTER_PARAMETER(bias);
80
}
81
};
82
88
template
<
typename
TT,
typename
TTPARAM,
int
B,
int
W,
int
IS_RELU>
89
class
QlinearMac
{
90
91
private
:
92
alignas
(32) TTPARAM (&weights)[W];
93
alignas
(32) TTPARAM (&bias)[W];
94
float
x_scale;
95
float
w_scale;
96
float
b_scale;
97
float
z_scale;
98
float
y_scale;
99
TT x_zero;
100
TTPARAM w_zero;
101
TTPARAM b_zero;
102
TT z_zero;
103
TT y_zero;
104
105
// precompute
106
int
bitshift_x;
107
int
bitshift_z;
108
int16_t scale_z;
109
alignas
(32) int32_t scale_x[W];
110
alignas
(32) int32_t shift_x[W];
111
alignas
(32) int32_t shift_z[W];
112
113
public
:
114
QlinearMac
(
115
TTPARAM (&w)[W],
116
TTPARAM (&b)[W],
117
float
x_scale,
118
float
w_scale,
119
float
b_scale,
120
float
z_scale,
121
float
y_scale,
122
TT x_zero,
123
TTPARAM w_zero,
124
TTPARAM b_zero,
125
TT z_zero,
126
TT y_zero
127
);
128
129
void
filter(
130
input_stream<TT>* in,
131
output_stream<TT>* out
132
);
133
134
static
void
registerKernelClass() {
135
static_assert
(W % 16 == 0);
136
REGISTER_FUNCTION(QlinearMac::filter);
137
REGISTER_PARAMETER(weights);
138
REGISTER_PARAMETER(bias);
139
}
140
};
144
#endif
// QLINEARMAC_KERNEL_H
QlinearMacScalar
QlinearMac scalar implementation, QlinearMacScalar<14,128,0> 418101 cycles.
Definition
qlinearmac.h:33
QlinearMac
QlinearMac vector implementation, requires W%16 == 0, QlinearMacScalar<14,128,0> 1256 cycles,...
Definition
qlinearmac.h:89
design
aie_src
qlinearmac.h
Generated by
1.9.8