47 adf::port<input> pin[1];
48 adf::port<output> pout[1];
56 k[0] = adf::kernel::create_object<QLINEARPOOL<TT, INP_H, INP_W, OUT_H, OUT_W, B, C, KH, KW>>(
57 in_scale, out_scale, in_zero, out_zero);
58 adf::source(k[0]) =
"qlinearpool.cc";
59 adf::headers(k[0]) = {
"qlinearpool.h"};
60 adf::runtime<ratio>(k[0]) = 0.6;
62 adf::connect<adf::window<B*INP_H*INP_W*C*
sizeof(TT)>> (pin[0], k[0].in[0]);
63 adf::connect<adf::stream> (k[0].out[0], pout[0]);
65 adf::samples_per_iteration(k[0].out[0]) = B*C*OUT_H*OUT_W;
88 static constexpr int LCNT = C/CCHUNK;
89 ConcatStreamGraph<CONCAT, TT, LCNT, B, CCHUNK*OUT_H*OUT_W, C*OUT_H*OUT_W> concat_graph;
91 adf::kernel split[(LCNT+1)/2];
96 adf::port<input> pin[1];
97 adf::port<output> pout[1];
105 static_assert(C % CCHUNK == 0);
106 static_assert(LCNT <= 8);
108 for (
int i = 0; i < LCNT/2; i++) {
109 split[i] = adf::kernel::create_object<SplitFilterInt8StreamTwice<TT, B, C*INP_H*INP_W, CCHUNK*INP_H*INP_W, 0>>(i*2);
110 adf::source(split[i]) =
"split.cc";
111 adf::headers(split[i]) = {
"split.h"};
112 adf::runtime<ratio>(split[i]) = 0.6;
114 adf::connect<adf::stream> (pin[0], split[i].in[0]);
115 adf::samples_per_iteration(split[i].in[0]) = B*C*INP_H*INP_W;
116 adf::samples_per_iteration(split[i].out[0]) = B*CCHUNK*INP_H*INP_W;
117 adf::samples_per_iteration(split[i].out[1]) = B*CCHUNK*INP_H*INP_W;
119 if ((LCNT & 0x1) == 1) {
120 int i = (LCNT+1)/2 - 1;
121 split[i] = adf::kernel::create_object<SplitFilterInt8Stream<TT, B, C*INP_H*INP_W, CCHUNK*INP_H*INP_W, 0>>(LCNT-1);
122 adf::source(split[i]) =
"split.cc";
123 adf::headers(split[i]) = {
"split.h"};
124 adf::runtime<ratio>(split[i]) = 0.6;
126 adf::connect<adf::stream> (pin[0], split[i].in[0]);
127 adf::samples_per_iteration(split[i].in[0]) = B*C*INP_H*INP_W;
128 adf::samples_per_iteration(split[i].out[0]) = B*CCHUNK*INP_H*INP_W;
131 for (
int i = 0; i < LCNT; i++) {
132 k[i] = adf::kernel::create_object<QLINEARPOOL<TT, INP_H, INP_W, OUT_H, OUT_W, B, CCHUNK, KH, KW>>(
133 in_scale, out_scale, in_zero, out_zero);
134 adf::source(k[i]) =
"qlinearpool.cc";
135 adf::headers(k[i]) = {
"qlinearpool.h"};
136 adf::runtime<ratio>(k[i]) = 0.6;
138 adf::connect<adf::window<B*CCHUNK*INP_H*INP_W>> (split[i/2].out[i&0x1], k[i].in[0]);
139 adf::connect<adf::stream> (k[i].out[0], concat_graph.pin[i]);
140 adf::samples_per_iteration(k[i].out[0]) = B*CCHUNK*OUT_H*OUT_W;
143 adf::connect<adf::stream> (concat_graph.pout[0], pout[0]);
166 adf::port<input> pin[1];
167 adf::port<output> pout[1];
175 k[0] = adf::kernel::create_object<QLINEARPOOL<TT, INP_H, INP_W, OUT_H, OUT_W, B, C, KH, KW>>(
176 in_scale, out_scale, in_zero, out_zero);
177 adf::source(k[0]) =
"qlinearpool.cc";
178 adf::headers(k[0]) = {
"qlinearpool.h"};
179 adf::runtime<ratio>(k[0]) = 0.6;
181 adf::connect<adf::stream> (pin[0], k[0].in[0]);
182 adf::connect<adf::stream> (k[0].out[0], pout[0]);
184 adf::samples_per_iteration(k[0].out[0]) = B*C*OUT_H*OUT_W;