blob: 463b36a78adcd70de57c6f8171c4885857ba3280 [file] [log] [blame]
Marat Dukhan08c4a432019-10-03 09:29:21 -07001# Copyright 2019 Google LLC
2#
3# This source code is licensed under the BSD-style license found in the
4# LICENSE file in the root directory of this source tree.
5#
6# Description:
7# XNNPACK - optimized floating-point neural network operators library
8
Marat Dukhan69c3f2c2019-11-06 12:30:01 -08009load(":build_defs.bzl", "xnnpack_aggregate_library", "xnnpack_benchmark", "xnnpack_binary", "xnnpack_cc_library", "xnnpack_min_size_copts", "xnnpack_optional_armcl_copts", "xnnpack_optional_armcl_deps", "xnnpack_optional_gemmlowp_copts", "xnnpack_optional_gemmlowp_deps", "xnnpack_optional_ruy_copts", "xnnpack_optional_ruy_deps", "xnnpack_optional_tflite_copts", "xnnpack_optional_tflite_deps", "xnnpack_std_copts", "xnnpack_unit_test", "xnnpack_visibility")
10
Marat Dukhan08c4a432019-10-03 09:29:21 -070011licenses(["notice"])
12
13exports_files(["LICENSE"])
14
Marat Dukhan08c4a432019-10-03 09:29:21 -070015OPERATOR_BENCHMARK_DEPS = [
16 ":XNNPACK",
17 ":bench_utils",
18 "@cpuinfo",
19 "@pthreadpool",
20]
21
22MICROKERNEL_BENCHMARK_DEPS = [
23 ":ukernels",
24 ":bench_utils",
Frank Barchard7e955972019-10-11 10:34:25 -070025 ":enable_assembly",
Marat Dukhan08c4a432019-10-03 09:29:21 -070026 "@cpuinfo",
27 "@FP16",
28 "@pthreadpool",
29]
30
Marat Dukhan6adff4e2019-10-14 18:32:07 -070031ACCURACY_EVAL_DEPS = [
32 ":XNNPACK",
33 ":ukernels",
34 "@FP16",
35 "@pthreadpool",
36]
37
Marat Dukhan08c4a432019-10-03 09:29:21 -070038MICROKERNEL_TEST_DEPS = [
39 ":ukernels",
Frank Barchard7e955972019-10-11 10:34:25 -070040 ":enable_assembly",
Marat Dukhan08c4a432019-10-03 09:29:21 -070041 "@cpuinfo",
42 "@FP16",
43 "@pthreadpool",
44]
45
46OPERATOR_TEST_DEPS = [
47 ":XNNPACK",
48 "@pthreadpool",
49 "@FP16",
50]
51
52OPERATOR_SRCS = [
Marat Dukhanefc47b82019-11-18 09:25:38 -080053 "src/add-nc.c",
54 "src/argmax-pooling-nhwc.c",
55 "src/average-pooling-nhwc.c",
56 "src/channel-pad-nc.c",
57 "src/channel-shuffle-nc.c",
58 "src/clamp-nc.c",
59 "src/convolution-nchw.c",
60 "src/convolution-nhwc.c",
61 "src/deconvolution-nhwc.c",
62 "src/fully-connected-nc.c",
63 "src/global-average-pooling-ncw.c",
64 "src/global-average-pooling-nwc.c",
65 "src/hardswish-nc.c",
66 "src/leaky-relu-nc.c",
67 "src/max-pooling-nhwc.c",
68 "src/multiply-nd.c",
69 "src/prelu-nc.c",
70 "src/resize-bilinear-nhwc.c",
71 "src/sigmoid-nc.c",
72 "src/softargmax-nc.c",
73 "src/unpooling-nhwc.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -070074]
75
76SCALAR_UKERNELS = [
77 "src/f32-argmaxpool/mp9p8q-scalar.c",
78 "src/f32-argmaxpool/up4-scalar.c",
79 "src/f32-argmaxpool/up9-scalar.c",
80 "src/f32-avgpool/mp9p8q-scalar.c",
81 "src/f32-avgpool/up9-scalar.c",
Marat Dukhan35dacfb2019-11-07 19:18:16 -080082 "src/f32-bilinear/scalar-c1.c",
83 "src/f32-bilinear/scalar-c2.c",
84 "src/f32-bilinear/scalar-c4.c",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -080085 "src/f32-binop/vadd-scalar-x1.c",
86 "src/f32-binop/vadd-scalar-x2.c",
87 "src/f32-binop/vadd-scalar-x4.c",
88 "src/f32-binop/vaddc-scalar-x1.c",
89 "src/f32-binop/vaddc-scalar-x2.c",
90 "src/f32-binop/vaddc-scalar-x4.c",
91 "src/f32-binop/vmul-scalar-x1.c",
92 "src/f32-binop/vmul-scalar-x2.c",
93 "src/f32-binop/vmul-scalar-x4.c",
94 "src/f32-binop/vmulc-scalar-x1.c",
95 "src/f32-binop/vmulc-scalar-x2.c",
96 "src/f32-binop/vmulc-scalar-x4.c",
97 "src/f32-binop/vsub-scalar-x1.c",
98 "src/f32-binop/vsub-scalar-x2.c",
99 "src/f32-binop/vsub-scalar-x4.c",
100 "src/f32-binop/vsubc-scalar-x1.c",
101 "src/f32-binop/vsubc-scalar-x2.c",
102 "src/f32-binop/vsubc-scalar-x4.c",
103 "src/f32-binop/vrsubc-scalar-x1.c",
104 "src/f32-binop/vrsubc-scalar-x2.c",
105 "src/f32-binop/vrsubc-scalar-x4.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700106 "src/f32-clamp/scalar.c",
Erich Elsen563df5f2019-10-23 08:02:21 -0700107 "src/f32-conv-hwc2spchw/3x3s2p1c3x4-scalar-1x1.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700108 "src/f32-igemm/1x4-scalar.c",
109 "src/f32-igemm/2x4-scalar.c",
110 "src/f32-igemm/4x2-scalar.c",
111 "src/f32-igemm/4x4-scalar.c",
112 "src/f32-dwconv/up1x25-scalar.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800113 "src/f32-dwconv/up1x25-scalar-acc2.c",
114 "src/f32-dwconv/up2x25-scalar.c",
115 "src/f32-dwconv/up2x25-scalar-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700116 "src/f32-dwconv/up1x4-scalar.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800117 "src/f32-dwconv/up1x4-scalar-acc2.c",
118 "src/f32-dwconv/up2x4-scalar.c",
119 "src/f32-dwconv/up2x4-scalar-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700120 "src/f32-dwconv/up1x9-scalar.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800121 "src/f32-dwconv/up1x9-scalar-acc2.c",
122 "src/f32-dwconv/up2x9-scalar.c",
123 "src/f32-dwconv/up2x9-scalar-acc2.c",
Erich Elsen0cc2c532019-10-15 04:44:18 -0700124 "src/f32-dwconv-spchw/3x3p1-scalar.c",
Erich Elsen38709a62019-11-08 11:58:45 -0800125 "src/f32-dwconv-spchw/5x5p2-scalar.c",
Erich Elsenac4de802019-10-16 04:35:30 -0700126 "src/f32-dwconv-spchw/3x3s2p1-scalar.c",
Erich Elsen38709a62019-11-08 11:58:45 -0800127 "src/f32-dwconv-spchw/5x5s2p2-scalar.c",
Erich Elsen34dc2c02019-10-16 05:11:41 -0700128 "src/f32-gavgpool-spchw/scalar-x1.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700129 "src/f32-gavgpool/mp7p7q-scalar.c",
130 "src/f32-gavgpool/up7-scalar.c",
131 "src/f32-gemm/1x4-scalar.c",
132 "src/f32-gemm/2x4-scalar.c",
133 "src/f32-gemm/4x2-scalar.c",
134 "src/f32-gemm/4x4-scalar.c",
135 "src/f32-gemminc/1x4-scalar.c",
136 "src/f32-gemminc/2x4-scalar.c",
137 "src/f32-gemminc/4x4-scalar.c",
138 "src/f32-hswish/scalar.c",
139 "src/f32-maxpool/9p8q-scalar.c",
140 "src/f32-pavgpool/mp9p8q-scalar.c",
141 "src/f32-pavgpool/up9-scalar.c",
142 "src/f32-ppmm/2x4-scalar.c",
143 "src/f32-ppmm/3x3-scalar.c",
144 "src/f32-ppmm/4x2-scalar.c",
145 "src/f32-ppmm/4x4-scalar.c",
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800146 "src/f32-prelu/scalar-2x1.c",
147 "src/f32-prelu/scalar-2x4.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700148 "src/f32-rmax/scalar.c",
149 "src/f32-spmm/1x1-scalar-pipelined.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700150 "src/f32-spmm/1x1-scalar.c",
151 "src/f32-spmm/2x1-scalar-pipelined.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700152 "src/f32-spmm/2x1-scalar.c",
153 "src/f32-spmm/4x1-scalar-pipelined.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700154 "src/f32-spmm/4x1-scalar.c",
155 "src/f32-spmm/8x1-scalar-pipelined.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700156 "src/f32-spmm/8x1-scalar.c",
Erich Elsenc6afd9b2019-10-24 16:10:53 -0700157 "src/f32-spmm/8x2-scalar.c",
158 "src/f32-spmm/8x4-scalar.c",
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800159 "src/f32-vmulcaddc/c1-scalar-2x.c",
160 "src/f32-vmulcaddc/c2-scalar-2x.c",
161 "src/f32-vmulcaddc/c4-scalar-2x.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700162 "src/q8-avgpool/mp9p8q-scalar.c",
163 "src/q8-avgpool/up9-scalar.c",
164 "src/q8-igemm/2x2-scalar.c",
165 "src/q8-dwconv/up1x9-scalar.c",
166 "src/q8-gavgpool/mp7p7q-scalar.c",
167 "src/q8-gavgpool/up7-scalar.c",
168 "src/q8-gemm/2x2-scalar.c",
169 "src/q8-vadd/scalar.c",
170 "src/u8-clamp/scalar.c",
171 "src/u8-lut32norm/scalar.c",
172 "src/u8-maxpool/9p8q-scalar.c",
173 "src/u8-rmax/scalar.c",
174 "src/x32-packx/x2-scalar.c",
175 "src/x32-packx/x3-scalar.c",
176 "src/x32-packx/x4-scalar.c",
177 "src/x32-pad/x2-scalar.c",
178 "src/x32-unpool/scalar.c",
179 "src/x32-zip/x2-scalar.c",
180 "src/x32-zip/x3-scalar.c",
181 "src/x32-zip/x4-scalar.c",
182 "src/x32-zip/xm-scalar.c",
183 "src/x8-lut/scalar.c",
184 "src/x8-zip/x2-scalar.c",
185 "src/x8-zip/x3-scalar.c",
186 "src/x8-zip/x4-scalar.c",
187 "src/x8-zip/xm-scalar.c",
188]
189
190PSIMD_UKERNELS = [
191 "src/f32-argmaxpool/mp9p8q-psimd.c",
192 "src/f32-argmaxpool/up4-psimd.c",
193 "src/f32-argmaxpool/up9-psimd.c",
194 "src/f32-avgpool/mp9p8q-psimd.c",
195 "src/f32-avgpool/up9-psimd.c",
Marat Dukhan35dacfb2019-11-07 19:18:16 -0800196 "src/f32-bilinear/psimd-c4.c",
197 "src/f32-bilinear/psimd-c8.c",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -0800198 "src/f32-binop/vadd-psimd-x4.c",
199 "src/f32-binop/vadd-psimd-x8.c",
200 "src/f32-binop/vaddc-psimd-x4.c",
201 "src/f32-binop/vaddc-psimd-x8.c",
202 "src/f32-binop/vmul-psimd-x4.c",
203 "src/f32-binop/vmul-psimd-x8.c",
204 "src/f32-binop/vmulc-psimd-x4.c",
205 "src/f32-binop/vmulc-psimd-x8.c",
206 "src/f32-binop/vrsubc-psimd-x4.c",
207 "src/f32-binop/vrsubc-psimd-x8.c",
208 "src/f32-binop/vsub-psimd-x4.c",
209 "src/f32-binop/vsub-psimd-x8.c",
210 "src/f32-binop/vsubc-psimd-x4.c",
211 "src/f32-binop/vsubc-psimd-x8.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700212 "src/f32-clamp/psimd.c",
213 "src/f32-igemm/1x8-psimd-loadsplat.c",
214 "src/f32-igemm/1x8-psimd-splat.c",
215 "src/f32-igemm/1x8s4-psimd.c",
216 "src/f32-igemm/4x2c4-psimd.c",
217 "src/f32-igemm/4x8-psimd-loadsplat.c",
218 "src/f32-igemm/4x8-psimd-splat.c",
219 "src/f32-igemm/4x8s4-psimd.c",
220 "src/f32-igemm/6x8-psimd-loadsplat.c",
221 "src/f32-igemm/6x8-psimd-splat.c",
222 "src/f32-igemm/6x8s4-psimd.c",
223 "src/f32-dwconv/up4x25-psimd.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800224 "src/f32-dwconv/up4x25-psimd-acc2.c",
225 "src/f32-dwconv/up8x25-psimd.c",
226 "src/f32-dwconv/up8x25-psimd-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700227 "src/f32-dwconv/up4x4-psimd.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800228 "src/f32-dwconv/up4x4-psimd-acc2.c",
229 "src/f32-dwconv/up8x4-psimd.c",
230 "src/f32-dwconv/up8x4-psimd-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700231 "src/f32-dwconv/up4x9-psimd.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800232 "src/f32-dwconv/up4x9-psimd-acc2.c",
233 "src/f32-dwconv/up8x9-psimd.c",
234 "src/f32-dwconv/up8x9-psimd-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700235 "src/f32-gavgpool/mp7p7q-psimd.c",
236 "src/f32-gavgpool/up7-psimd.c",
237 "src/f32-gemm/1x8-psimd-loadsplat.c",
238 "src/f32-gemm/1x8-psimd-splat.c",
239 "src/f32-gemm/1x8s4-psimd.c",
240 "src/f32-gemm/4x8-psimd-loadsplat.c",
241 "src/f32-gemm/4x8-psimd-splat.c",
242 "src/f32-gemm/4x8s4-psimd.c",
243 "src/f32-gemm/6x8-psimd-loadsplat.c",
244 "src/f32-gemm/6x8-psimd-splat.c",
245 "src/f32-gemm/6x8s4-psimd.c",
246 "src/f32-gemminc/1x8-psimd-loadsplat.c",
247 "src/f32-gemminc/1x8-psimd-splat.c",
248 "src/f32-gemminc/1x8s4-psimd.c",
249 "src/f32-gemminc/4x8-psimd-loadsplat.c",
250 "src/f32-gemminc/4x8-psimd-splat.c",
251 "src/f32-gemminc/4x8s4-psimd.c",
252 "src/f32-gemminc/6x8-psimd-loadsplat.c",
253 "src/f32-gemminc/6x8-psimd-splat.c",
254 "src/f32-gemminc/6x8s4-psimd.c",
255 "src/f32-hswish/psimd.c",
256 "src/f32-maxpool/9p8q-psimd.c",
257 "src/f32-pavgpool/mp9p8q-psimd.c",
258 "src/f32-pavgpool/up9-psimd.c",
259 "src/f32-ppmm/4x8-psimd.c",
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800260 "src/f32-prelu/psimd-2x4.c",
261 "src/f32-prelu/psimd-2x8.c",
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800262 "src/f32-vmulcaddc/c4-psimd-2x.c",
263 "src/f32-vmulcaddc/c8-psimd-2x.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700264 "src/x32-packx/x4-psimd.c",
265 "src/x32-pad/x2-psimd.c",
266 "src/x32-unpool/psimd.c",
267 "src/x32-zip/x2-psimd.c",
268 "src/x32-zip/x3-psimd.c",
269 "src/x32-zip/x4-psimd.c",
270 "src/x32-zip/xm-psimd.c",
271]
272
273# ISA-specific micro-kernels
274NEON_UKERNELS = [
275 "src/f32-avgpool/mp9p8q-neon.c",
276 "src/f32-avgpool/up9-neon.c",
Marat Dukhan35dacfb2019-11-07 19:18:16 -0800277 "src/f32-bilinear/neon-c4.c",
278 "src/f32-bilinear/neon-c8.c",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -0800279 "src/f32-binop/vadd-neon-x4.c",
280 "src/f32-binop/vadd-neon-x8.c",
281 "src/f32-binop/vaddc-neon-x4.c",
282 "src/f32-binop/vaddc-neon-x8.c",
283 "src/f32-binop/vmul-neon-x4.c",
284 "src/f32-binop/vmul-neon-x8.c",
285 "src/f32-binop/vmulc-neon-x4.c",
286 "src/f32-binop/vmulc-neon-x8.c",
287 "src/f32-binop/vrsubc-neon-x4.c",
288 "src/f32-binop/vrsubc-neon-x8.c",
289 "src/f32-binop/vsub-neon-x4.c",
290 "src/f32-binop/vsub-neon-x8.c",
291 "src/f32-binop/vsubc-neon-x4.c",
292 "src/f32-binop/vsubc-neon-x8.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700293 "src/f32-clamp/neon.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700294 "src/f32-dwconv/up4x9-neon.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800295 "src/f32-dwconv/up4x9-neon-acc2.c",
296 "src/f32-dwconv/up8x9-neon.c",
297 "src/f32-dwconv/up8x9-neon-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700298 "src/f32-gavgpool-spchw/neon-x4.c",
299 "src/f32-gavgpool/mp7p7q-neon.c",
300 "src/f32-gavgpool/up7-neon.c",
301 "src/f32-gemm/1x8-neon-ld64.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700302 "src/f32-gemm/4x2-neon-ld64.c",
303 "src/f32-gemm/4x8-neon-ld128.c",
304 "src/f32-gemm/4x8-neon-ld64.c",
305 "src/f32-gemm/5x8-neon-ld64.c",
306 "src/f32-gemm/6x8-neon-ld64.c",
307 "src/f32-gemminc/1x8-neon-ld64.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700308 "src/f32-gemminc/4x8-neon-ld128.c",
309 "src/f32-gemminc/4x8-neon-ld64.c",
310 "src/f32-gemminc/5x8-neon-ld64.c",
311 "src/f32-gemminc/6x8-neon-ld64.c",
312 "src/f32-hswish/neon.c",
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800313 "src/f32-igemm/1x8-neon-ld64.c",
314 "src/f32-igemm/4x2-neon-ld64.c",
315 "src/f32-igemm/4x4-neon-ld64.c",
316 "src/f32-igemm/4x8-neon-ld128.c",
317 "src/f32-igemm/4x8-neon-ld64.c",
318 "src/f32-igemm/6x8-neon-ld64.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700319 "src/f32-pavgpool/mp9p8q-neon.c",
320 "src/f32-pavgpool/up9-neon.c",
321 "src/f32-ppmm/4x8-neon.c",
322 "src/f32-ppmm/8x8-neon.c",
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800323 "src/f32-prelu/neon-2x4.c",
324 "src/f32-prelu/neon-2x8.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700325 "src/f32-rmax/neon.c",
Marat Dukhan14bec502019-11-18 11:35:31 -0800326 "src/f32-sigmoid/neon-frac-p9-p10-nr1recps-x16.c",
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800327 "src/f32-vmulcaddc/c4-neon-2x.c",
328 "src/f32-vmulcaddc/c8-neon-2x.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700329 "src/q8-avgpool/mp9p8q-neon.c",
330 "src/q8-avgpool/up9-neon.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700331 "src/q8-dwconv/up8x9-neon.c",
332 "src/q8-gavgpool/mp7p7q-neon.c",
333 "src/q8-gavgpool/up7-neon.c",
334 "src/q8-gemm/4x8-neon.c",
335 "src/q8-gemm/8x8-neon.c",
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800336 "src/q8-igemm/4x8-neon.c",
337 "src/q8-igemm/8x8-neon.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700338 "src/q8-vadd/neon.c",
339 "src/u8-clamp/neon.c",
340 "src/u8-maxpool/9p8q-neon.c",
341 "src/u8-rmax/neon.c",
342 "src/x32-packx/x4-neon-st4.c",
343 "src/x32-pad/x2-neon.c",
344 "src/x32-zip/x2-neon.c",
345 "src/x32-zip/x3-neon.c",
346 "src/x32-zip/x4-neon.c",
347 "src/x32-zip/xm-neon.c",
348 "src/x8-zip/x2-neon.c",
349 "src/x8-zip/x3-neon.c",
350 "src/x8-zip/x4-neon.c",
351 "src/x8-zip/xm-neon.c",
352]
353
354NEONFMA_UKERNELS = [
Marat Dukhan35dacfb2019-11-07 19:18:16 -0800355 "src/f32-bilinear/neonfma-c4.c",
356 "src/f32-bilinear/neonfma-c8.c",
Frank Barcharddb45b6a2019-10-09 16:42:45 -0700357 "src/f32-igemm/1x8-neonfma-ld64.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700358 "src/f32-igemm/4x2-neonfma-ld64.c",
359 "src/f32-igemm/4x4-neonfma-ld64.c",
360 "src/f32-igemm/4x8-neonfma-ld128.c",
361 "src/f32-igemm/4x8-neonfma-ld64.c",
362 "src/f32-igemm/6x8-neonfma-ld64.c",
363 "src/f32-dwconv/up4x9-neonfma.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800364 "src/f32-dwconv/up4x9-neonfma-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700365 "src/f32-dwconv/up8x9-neonfma.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800366 "src/f32-dwconv/up8x9-neonfma-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700367 "src/f32-gemm/1x8-neonfma-ld64.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700368 "src/f32-gemm/4x2-neonfma-ld64.c",
369 "src/f32-gemm/4x8-neonfma-ld128.c",
370 "src/f32-gemm/4x8-neonfma-ld64.c",
371 "src/f32-gemm/5x8-neonfma-ld64.c",
372 "src/f32-gemm/6x8-neonfma-ld64.c",
373 "src/f32-gemminc/1x8-neonfma-ld64.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700374 "src/f32-gemminc/4x8-neonfma-ld128.c",
375 "src/f32-gemminc/4x8-neonfma-ld64.c",
376 "src/f32-gemminc/5x8-neonfma-ld64.c",
377 "src/f32-gemminc/6x8-neonfma-ld64.c",
378 "src/f32-hswish/neonfma.c",
379 "src/f32-ppmm/4x8-neonfma.c",
380 "src/f32-ppmm/8x8-neonfma.c",
Marat Dukhan14bec502019-11-18 11:35:31 -0800381 "src/f32-sigmoid/neonfma-p5-nr2fma-x16.c",
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800382 "src/f32-vmulcaddc/c4-neonfma-2x.c",
383 "src/f32-vmulcaddc/c8-neonfma-2x.c",
Marat Dukhan797a8fe2019-11-14 20:21:57 -0800384 "src/math/exp-neonfma-lut64-p2.c",
385 "src/math/exp-neonfma-p5.c",
Marat Dukhan346a9e52019-11-15 09:06:30 -0800386 "src/math/expminus-neonfma-p5.c",
Marat Dukhan80bafd22019-11-18 10:16:01 -0800387 "src/math/sigmoid-neonfma-p5-nr2fma.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700388]
389
390AARCH64_NEONFMA_UKERNELS = [
391 "src/f32-conv-hwc/3x3s2p1c3x4-neonfma-2x2.c",
392 "src/f32-conv-hwc/3x3s2p1c3x8-neonfma-2x2.c",
393 "src/f32-conv-hwc2spchw/3x3s2p1c3x4-neonfma-2x2.c",
394 "src/f32-dwconv-spchw/3x3p1-neonfma.c",
395 "src/f32-dwconv-spchw/5x5p2-neonfma.c",
396 "src/f32-dwconv-spchw/3x3s2p1-neonfma.c",
397 "src/f32-dwconv-spchw/5x5s2p2-neonfma.c",
398 "src/f32-spmm/12x1-neonfma.c",
399 "src/f32-spmm/12x2-neonfma.c",
400 "src/f32-spmm/12x4-neonfma.c",
401 "src/f32-spmm/16x1-neonfma-pipelined.c",
402 "src/f32-spmm/16x1-neonfma-unroll2.c",
403 "src/f32-spmm/16x1-neonfma.c",
404 "src/f32-spmm/16x2-neonfma.c",
405 "src/f32-spmm/16x4-neonfma.c",
406 "src/f32-spmm/4x1-neonfma-pipelined.c",
407 "src/f32-spmm/4x1-neonfma-unroll2.c",
408 "src/f32-spmm/4x1-neonfma.c",
409 "src/f32-spmm/4x2-neonfma.c",
410 "src/f32-spmm/4x4-neonfma.c",
411 "src/f32-spmm/8x1-neonfma-pipelined.c",
412 "src/f32-spmm/8x1-neonfma-unroll2.c",
413 "src/f32-spmm/8x1-neonfma.c",
414 "src/f32-spmm/8x2-neonfma.c",
415 "src/f32-spmm/8x4-neonfma.c",
416]
417
418AARCH64_NEONFP16ARITH_UKERNELS = [
419 "src/f16-gemm/4x8-neonfp16arith-ld64.c",
420 "src/f16-gemm/6x8-neonfp16arith-ld64.c",
421 "src/f16-gemm/8x8-neonfp16arith-ld64.c",
422]
423
424SSE_UKERNELS = [
425 "src/f32-avgpool/mp9p8q-sse.c",
426 "src/f32-avgpool/up9-sse.c",
Marat Dukhan35dacfb2019-11-07 19:18:16 -0800427 "src/f32-bilinear/sse-c4.c",
428 "src/f32-bilinear/sse-c8.c",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -0800429 "src/f32-binop/vadd-sse-x4.c",
430 "src/f32-binop/vadd-sse-x8.c",
431 "src/f32-binop/vaddc-sse-x4.c",
432 "src/f32-binop/vaddc-sse-x8.c",
433 "src/f32-binop/vmul-sse-x4.c",
434 "src/f32-binop/vmul-sse-x8.c",
435 "src/f32-binop/vmulc-sse-x4.c",
436 "src/f32-binop/vmulc-sse-x8.c",
437 "src/f32-binop/vrsubc-sse-x4.c",
438 "src/f32-binop/vrsubc-sse-x8.c",
439 "src/f32-binop/vsub-sse-x4.c",
440 "src/f32-binop/vsub-sse-x8.c",
441 "src/f32-binop/vsubc-sse-x4.c",
442 "src/f32-binop/vsubc-sse-x8.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700443 "src/f32-clamp/sse.c",
444 "src/f32-igemm/1x8-sse-dup.c",
445 "src/f32-igemm/1x8-sse-load1.c",
446 "src/f32-igemm/1x8s4-sse.c",
447 "src/f32-igemm/4x2c4-sse.c",
448 "src/f32-igemm/4x8-sse-dup.c",
449 "src/f32-igemm/4x8-sse-load1.c",
450 "src/f32-igemm/4x8s4-sse.c",
451 "src/f32-dwconv/up4x25-sse.c",
452 "src/f32-dwconv/up4x4-sse.c",
453 "src/f32-dwconv/up4x9-sse.c",
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800454 "src/f32-dwconv/up4x25-sse-acc2.c",
455 "src/f32-dwconv/up4x4-sse-acc2.c",
456 "src/f32-dwconv/up4x9-sse-acc2.c",
457 "src/f32-dwconv/up8x25-sse.c",
458 "src/f32-dwconv/up8x4-sse.c",
459 "src/f32-dwconv/up8x9-sse.c",
460 "src/f32-dwconv/up8x25-sse-acc2.c",
461 "src/f32-dwconv/up8x4-sse-acc2.c",
462 "src/f32-dwconv/up8x9-sse-acc2.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700463 "src/f32-gavgpool-spchw/sse-x4.c",
464 "src/f32-gavgpool/mp7p7q-sse.c",
465 "src/f32-gavgpool/up7-sse.c",
466 "src/f32-gemm/1x8-sse-dup.c",
467 "src/f32-gemm/1x8-sse-load1.c",
468 "src/f32-gemm/1x8s4-sse.c",
469 "src/f32-gemm/4x8-sse-dup.c",
470 "src/f32-gemm/4x8-sse-load1.c",
471 "src/f32-gemm/4x8s4-sse.c",
472 "src/f32-gemminc/1x8-sse-dup.c",
473 "src/f32-gemminc/1x8-sse-load1.c",
474 "src/f32-gemminc/1x8s4-sse.c",
475 "src/f32-gemminc/4x8-sse-dup.c",
476 "src/f32-gemminc/4x8-sse-load1.c",
477 "src/f32-gemminc/4x8s4-sse.c",
478 "src/f32-hswish/sse.c",
479 "src/f32-maxpool/9p8q-sse.c",
480 "src/f32-pavgpool/mp9p8q-sse.c",
481 "src/f32-pavgpool/up9-sse.c",
482 "src/f32-dwconv-spchw/3x3p1-sse.c",
483 "src/f32-dwconv-spchw/3x3s2p1-sse.c",
484 "src/f32-ppmm/4x8-sse.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700485 "src/f32-rmax/sse.c",
486 "src/f32-spmm/4x1-sse.c",
487 "src/f32-spmm/8x1-sse.c",
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800488 "src/f32-vmulcaddc/c4-sse-2x.c",
489 "src/f32-vmulcaddc/c8-sse-2x.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700490 "src/x32-packx/x4-sse.c",
491]
492
493SSE2_UKERNELS = [
494 "src/f32-argmaxpool/mp9p8q-sse2.c",
495 "src/f32-argmaxpool/up4-sse2.c",
496 "src/f32-argmaxpool/up9-sse2.c",
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800497 "src/f32-prelu/sse2-2x4.c",
498 "src/f32-prelu/sse2-2x8.c",
Marat Dukhan7bee7512019-11-18 15:15:48 -0800499 "src/f32-sigmoid/sse2-p5-div-x8.c",
500 "src/f32-sigmoid/sse2-p5-div-x16.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700501 "src/q8-avgpool/mp9p8q-sse2.c",
502 "src/q8-avgpool/up9-sse2.c",
503 "src/q8-igemm/4x4c2-sse2.c",
504 "src/q8-dwconv/up8x9-sse2.c",
505 "src/q8-gavgpool/mp7p7q-sse2.c",
506 "src/q8-gavgpool/up7-sse2.c",
507 "src/q8-gemm/2x4c8-sse2.c",
508 "src/q8-gemm/4x4c2-sse2.c",
509 "src/q8-vadd/sse2.c",
510 "src/u8-clamp/sse2.c",
511 "src/u8-maxpool/9p8q-sse2.c",
512 "src/u8-rmax/sse2.c",
513 "src/x32-pad/x2-sse2.c",
514 "src/x32-zip/x2-sse2.c",
515 "src/x32-zip/x3-sse2.c",
516 "src/x32-zip/x4-sse2.c",
517 "src/x32-zip/xm-sse2.c",
518 "src/x8-zip/x2-sse2.c",
519 "src/x8-zip/x3-sse2.c",
520 "src/x8-zip/x4-sse2.c",
521 "src/x8-zip/xm-sse2.c",
Marat Dukhanffd68402019-11-15 15:19:11 -0800522 "src/math/exp-sse2-p5.c",
523 "src/math/expminus-sse2-p5.c",
Marat Dukhan80bafd22019-11-18 10:16:01 -0800524 "src/math/sigmoid-sse2-p5-div.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700525]
526
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800527SSE41_UKERNELS = [
528 "src/f32-prelu/sse41-2x4.c",
529 "src/f32-prelu/sse41-2x8.c",
530]
531
Marat Dukhan08c4a432019-10-03 09:29:21 -0700532AVX_UKERNELS = [
533 "src/f32-rmax/avx.c",
Marat Dukhan05ac8e32019-10-21 15:39:33 -0700534 "src/f32-vscale/avx-unroll32.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700535]
536
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700537AVX2_UKERNELS = [
Marat Dukhan97579532019-10-18 16:40:39 -0700538 "src/f32-raddexpminusmax/avx2-p5-unroll64.c",
Marat Dukhan6f8d4d32019-10-25 17:07:09 -0700539 "src/f32-raddextexp/avx2-p5-unroll64.c",
Marat Dukhan97579532019-10-18 16:40:39 -0700540 "src/f32-raddstoreexpminusmax/avx2-p5-unroll64.c",
541 "src/f32-vscaleexpminusmax/avx2-p5-unroll64.c",
Marat Dukhan6f8d4d32019-10-25 17:07:09 -0700542 "src/f32-vscaleextexp/avx2-p5-unroll64.c",
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700543 "src/math/exp-avx2-p5.c",
544 "src/math/exp-avx2-perm-p3.c",
545 "src/math/exp-avx2-perm-p4.c",
Marat Dukhan515c9772019-10-17 18:07:57 -0700546 "src/math/expminus-avx2-p5.c",
Marat Dukhan98ba4412019-10-23 02:14:28 -0700547 "src/math/extexp-avx2-p5.c",
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700548]
549
Marat Dukhan08c4a432019-10-03 09:29:21 -0700550AVX512F_UKERNELS = [
Marat Dukhan97579532019-10-18 16:40:39 -0700551 "src/f32-raddexpminusmax/avx512f-p5-scalef-unroll128.c",
Marat Dukhan6f8d4d32019-10-25 17:07:09 -0700552 "src/f32-raddextexp/avx512f-p5-scalef-unroll128.c",
Marat Dukhan97579532019-10-18 16:40:39 -0700553 "src/f32-raddstoreexpminusmax/avx512f-p5-scalef-unroll128.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700554 "src/f32-rmax/avx512f.c",
Marat Dukhan05ac8e32019-10-21 15:39:33 -0700555 "src/f32-vscale/avx512f-unroll64.c",
Marat Dukhan97579532019-10-18 16:40:39 -0700556 "src/f32-vscaleexpminusmax/avx512f-p5-scalef-unroll128.c",
Marat Dukhan6f8d4d32019-10-25 17:07:09 -0700557 "src/f32-vscaleextexp/avx512f-p5-scalef-unroll128.c",
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700558 "src/math/exp-avx512f-p5-scalef.c",
559 "src/math/exp-avx512f-p5.c",
560 "src/math/exp-avx512f-perm-p3.c",
Marat Dukhanfeb49232019-10-28 11:03:31 -0700561 "src/math/exp-avx512f-perm2-p2.c",
Marat Dukhan98ba4412019-10-23 02:14:28 -0700562 "src/math/extexp-avx512f-p5.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700563]
564
565AARCH32_ASM_UKERNELS = [
566 "src/q8-dwconv/up8x9-aarch32-neon.S",
567]
568
569AARCH64_ASM_UKERNELS = [
570 "src/f32-dwconv/up4x9-aarch64-neonfma-cortex-a55.S",
571 "src/f32-dwconv/up4x9-aarch64-neonfma.S",
572 "src/f32-gemm/1x12-aarch64-neonfma-cortex-a53.S",
Frank Barchard21be34f2019-10-09 19:32:19 -0700573 "src/f32-gemm/1x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700574 "src/f32-gemm/1x8-aarch64-neonfma-cortex-a57.S",
575 "src/f32-gemm/1x8-aarch64-neonfma-cortex-a75.S",
576 "src/f32-gemm/4x12-aarch64-neonfma-cortex-a53.S",
Frank Barchard46fb8072019-10-25 12:54:22 -0700577 "src/f32-gemm/4x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700578 "src/f32-gemm/4x8-aarch64-neonfma-cortex-a57.S",
579 "src/f32-gemm/4x8-aarch64-neonfma-cortex-a75.S",
580 "src/f32-gemm/4x8-aarch64-neonfma-ld128.S",
581 "src/f32-gemm/4x8-aarch64-neonfma-ld64.S",
582 "src/f32-gemm/5x8-aarch64-neonfma-cortex-a75.S",
Frank Barcharda7fb8552019-10-23 17:14:17 -0700583 "src/f32-gemm/6x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700584 "src/f32-gemm/6x8-aarch64-neonfma-cortex-a57.S",
585 "src/f32-gemm/6x8-aarch64-neonfma-cortex-a73.S",
586 "src/f32-gemm/6x8-aarch64-neonfma-cortex-a75.S",
587 "src/f32-gemm/6x8-aarch64-neonfma-ld128.S",
588 "src/f32-gemm/6x8-aarch64-neonfma-ld64.S",
589 "src/f32-gemminc/1x12-aarch64-neonfma-cortex-a53.S",
Frank Barchard21be34f2019-10-09 19:32:19 -0700590 "src/f32-gemminc/1x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700591 "src/f32-gemminc/1x8-aarch64-neonfma-cortex-a57.S",
592 "src/f32-gemminc/1x8-aarch64-neonfma-cortex-a75.S",
593 "src/f32-gemminc/4x12-aarch64-neonfma-cortex-a53.S",
Frank Barchard46fb8072019-10-25 12:54:22 -0700594 "src/f32-gemminc/4x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700595 "src/f32-gemminc/4x8-aarch64-neonfma-cortex-a57.S",
596 "src/f32-gemminc/4x8-aarch64-neonfma-cortex-a75.S",
597 "src/f32-gemminc/4x8-aarch64-neonfma-ld128.S",
598 "src/f32-gemminc/4x8-aarch64-neonfma-ld64.S",
599 "src/f32-gemminc/5x8-aarch64-neonfma-cortex-a75.S",
Frank Barcharda7fb8552019-10-23 17:14:17 -0700600 "src/f32-gemminc/6x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700601 "src/f32-gemminc/6x8-aarch64-neonfma-cortex-a57.S",
602 "src/f32-gemminc/6x8-aarch64-neonfma-cortex-a73.S",
603 "src/f32-gemminc/6x8-aarch64-neonfma-cortex-a75.S",
604 "src/f32-gemminc/6x8-aarch64-neonfma-ld128.S",
605 "src/f32-gemminc/6x8-aarch64-neonfma-ld64.S",
606 "src/f32-igemm/1x12-aarch64-neonfma-cortex-a53.S",
Frank Barchard21be34f2019-10-09 19:32:19 -0700607 "src/f32-igemm/1x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700608 "src/f32-igemm/1x8-aarch64-neonfma-cortex-a57.S",
609 "src/f32-igemm/1x8-aarch64-neonfma-cortex-a75.S",
610 "src/f32-igemm/4x12-aarch64-neonfma-cortex-a53.S",
Frank Barchard46fb8072019-10-25 12:54:22 -0700611 "src/f32-igemm/4x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700612 "src/f32-igemm/4x8-aarch64-neonfma-cortex-a75.S",
613 "src/f32-igemm/5x8-aarch64-neonfma-cortex-a75.S",
Frank Barcharda7fb8552019-10-23 17:14:17 -0700614 "src/f32-igemm/6x8-aarch64-neonfma-cortex-a53.S",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700615 "src/f32-igemm/6x8-aarch64-neonfma-cortex-a57.S",
616 "src/f32-igemm/6x8-aarch64-neonfma-cortex-a73.S",
617 "src/f32-igemm/6x8-aarch64-neonfma-cortex-a75.S",
618]
619
620INTERNAL_MICROKERNEL_HDRS = [
621 "src/xnnpack/argmaxpool.h",
622 "src/xnnpack/avgpool.h",
Marat Dukhan35dacfb2019-11-07 19:18:16 -0800623 "src/xnnpack/bilinear.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700624 "src/xnnpack/clamp.h",
625 "src/xnnpack/common.h",
626 "src/xnnpack/conv.h",
627 "src/xnnpack/dwconv.h",
628 "src/xnnpack/gavgpool.h",
629 "src/xnnpack/gemm.h",
630 "src/xnnpack/hswish.h",
631 "src/xnnpack/igemm.h",
632 "src/xnnpack/lut.h",
633 "src/xnnpack/math.h",
634 "src/xnnpack/maxpool.h",
Marat Dukhan04f03be2019-11-19 12:36:47 -0800635 "src/xnnpack/memory.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700636 "src/xnnpack/packx.h",
637 "src/xnnpack/pad.h",
638 "src/xnnpack/params.h",
639 "src/xnnpack/pavgpool.h",
640 "src/xnnpack/ppmm.h",
641 "src/xnnpack/prelu.h",
Marat Dukhan97579532019-10-18 16:40:39 -0700642 "src/xnnpack/raddexpminusmax.h",
Marat Dukhan6f8d4d32019-10-25 17:07:09 -0700643 "src/xnnpack/raddextexp.h",
Marat Dukhan97579532019-10-18 16:40:39 -0700644 "src/xnnpack/raddstoreexpminusmax.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700645 "src/xnnpack/rmax.h",
646 "src/xnnpack/scalar-utils.h",
647 "src/xnnpack/spmm.h",
648 "src/xnnpack/unpool.h",
649 "src/xnnpack/vadd.h",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -0800650 "src/xnnpack/vbinop.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700651 "src/xnnpack/vmulcaddc.h",
Marat Dukhan05ac8e32019-10-21 15:39:33 -0700652 "src/xnnpack/vscale.h",
Marat Dukhan97579532019-10-18 16:40:39 -0700653 "src/xnnpack/vscaleexpminusmax.h",
Marat Dukhan6f8d4d32019-10-25 17:07:09 -0700654 "src/xnnpack/vscaleextexp.h",
Marat Dukhan346a9e52019-11-15 09:06:30 -0800655 "src/xnnpack/vunop.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700656 "src/xnnpack/zip.h",
657]
658
659INTERNAL_HDRS = INTERNAL_MICROKERNEL_HDRS + [
660 "include/xnnpack.h",
661 "src/xnnpack/allocator.h",
662 "src/xnnpack/compute.h",
663 "src/xnnpack/im2col.h",
664 "src/xnnpack/indirection.h",
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700665 "src/xnnpack/math-stubs.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700666 "src/xnnpack/operator.h",
667 "src/xnnpack/pack.h",
Marat Dukhaneeaa7bd2019-10-25 17:31:25 -0700668 "src/xnnpack/params-init.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700669 "src/xnnpack/requantization-stubs.h",
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700670 "src/xnnpack/requantization.h",
671]
672
673ACCURACY_EVAL_HDRS = INTERNAL_MICROKERNEL_HDRS + [
674 "src/xnnpack/math-stubs.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700675]
676
677MICROKERNEL_BENCHMARK_HDRS = INTERNAL_MICROKERNEL_HDRS + [
Marat Dukhaneeaa7bd2019-10-25 17:31:25 -0700678 "src/xnnpack/params-init.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700679 "include/xnnpack.h",
680]
681
682MICROKERNEL_TEST_HDRS = INTERNAL_MICROKERNEL_HDRS + [
683 "src/xnnpack/isa-checks.h",
Marat Dukhaneeaa7bd2019-10-25 17:31:25 -0700684 "src/xnnpack/params-init.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700685 "src/xnnpack/requantization.h",
686 "include/xnnpack.h",
687]
688
689OPERATOR_TEST_PARAMS_HDRS = [
690 "src/xnnpack/params.h",
691 "src/xnnpack/common.h",
692]
693
694WEIGHTS_PACK_HDRS = [
695 "src/xnnpack/pack.h",
696 "src/xnnpack/operator.h",
697 "src/xnnpack/compute.h",
698]
699
Marat Dukhanc8e00eb2019-10-04 14:55:26 -0700700LOGGING_COPTS = select({
701 # No logging in optimized mode
702 ":optimized_build": ["-DXNN_LOG_LEVEL=0"],
703 # Full logging in debug mode
704 ":debug_build": ["-DXNN_LOG_LEVEL=5"],
705 # Error-only logging in default (fastbuild) mode
706 "//conditions:default": ["-DXNN_LOG_LEVEL=2"],
707})
708
709LOGGING_HDRS = [
710 "src/xnnpack/log.h",
711]
712
Marat Dukhan08c4a432019-10-03 09:29:21 -0700713xnnpack_cc_library(
714 name = "scalar_ukernels",
715 srcs = SCALAR_UKERNELS,
716 hdrs = INTERNAL_HDRS,
717 aarch32_copts = ["-marm"],
718 copts = xnnpack_std_copts(),
719 deps = [
720 "@FP16",
721 "@FXdiv",
Marat Dukhan04f03be2019-11-19 12:36:47 -0800722 "@pthreadpool",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700723 ],
724)
725
726xnnpack_cc_library(
727 name = "psimd_ukernels",
728 srcs = PSIMD_UKERNELS,
729 hdrs = INTERNAL_HDRS,
730 aarch32_copts = [
731 "-marm",
732 "-mfpu=neon",
733 ],
734 copts = xnnpack_std_copts(),
735 optimized_copts = [
736 "-O3",
737 "-ffast-math",
738 ],
739 deps = [
740 "@FP16",
741 "@psimd",
Marat Dukhan04f03be2019-11-19 12:36:47 -0800742 "@pthreadpool",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700743 ],
744)
745
746xnnpack_cc_library(
747 name = "neon_ukernels",
748 hdrs = INTERNAL_HDRS,
749 aarch32_copts = [
750 "-marm",
751 "-mfpu=neon",
752 ],
753 aarch32_srcs = NEON_UKERNELS,
754 aarch64_srcs = NEON_UKERNELS,
755 copts = xnnpack_std_copts(),
Marat Dukhan04f03be2019-11-19 12:36:47 -0800756 deps = [
757 "@FP16",
758 "@pthreadpool",
759 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700760)
761
762xnnpack_cc_library(
763 name = "neonfma_ukernels",
764 hdrs = INTERNAL_HDRS,
765 aarch32_copts = [
766 "-marm",
767 "-mfpu=neon-vfpv4",
768 ],
769 aarch32_srcs = NEONFMA_UKERNELS,
770 aarch64_srcs = NEONFMA_UKERNELS + AARCH64_NEONFMA_UKERNELS,
771 copts = xnnpack_std_copts(),
Marat Dukhan04f03be2019-11-19 12:36:47 -0800772 deps = [
773 "@FP16",
774 "@pthreadpool",
775 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700776)
777
778xnnpack_cc_library(
779 name = "neonfp16arith_ukernels",
780 hdrs = INTERNAL_HDRS,
781 aarch64_copts = ["-march=armv8.2-a+fp16"],
782 aarch64_srcs = AARCH64_NEONFP16ARITH_UKERNELS,
783 copts = xnnpack_std_copts(),
Marat Dukhan04f03be2019-11-19 12:36:47 -0800784 deps = [
785 "@FP16",
786 "@pthreadpool",
787 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700788)
789
790xnnpack_cc_library(
791 name = "sse2_ukernels",
792 hdrs = INTERNAL_HDRS,
793 copts = xnnpack_std_copts(),
794 x86_copts = ["-msse2"],
795 x86_srcs = SSE_UKERNELS + SSE2_UKERNELS,
Marat Dukhan04f03be2019-11-19 12:36:47 -0800796 deps = [
797 "@FP16",
798 "@pthreadpool",
799 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700800)
801
802xnnpack_cc_library(
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800803 name = "sse41_ukernels",
804 hdrs = INTERNAL_HDRS,
805 copts = xnnpack_std_copts(),
806 x86_copts = ["-msse4.1"],
807 x86_srcs = SSE41_UKERNELS,
Marat Dukhan04f03be2019-11-19 12:36:47 -0800808 deps = [
809 "@FP16",
810 "@pthreadpool",
811 ],
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800812)
813
814xnnpack_cc_library(
Marat Dukhan08c4a432019-10-03 09:29:21 -0700815 name = "avx_ukernels",
816 hdrs = INTERNAL_HDRS,
817 copts = xnnpack_std_copts(),
818 x86_copts = ["-mavx"],
819 x86_srcs = AVX_UKERNELS,
Marat Dukhan04f03be2019-11-19 12:36:47 -0800820 deps = [
821 "@FP16",
822 "@pthreadpool",
823 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700824)
825
826xnnpack_cc_library(
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700827 name = "avx2_ukernels",
828 hdrs = INTERNAL_HDRS,
829 copts = xnnpack_std_copts(),
830 x86_copts = [
831 "-mfma",
832 "-mavx2",
833 ],
834 x86_srcs = AVX2_UKERNELS,
Marat Dukhan04f03be2019-11-19 12:36:47 -0800835 deps = [
836 "@FP16",
837 "@pthreadpool",
838 ],
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700839)
840
841xnnpack_cc_library(
Marat Dukhan08c4a432019-10-03 09:29:21 -0700842 name = "avx512f_ukernels",
843 hdrs = INTERNAL_HDRS,
844 copts = xnnpack_std_copts(),
845 x86_copts = ["-mavx512f"],
846 x86_srcs = AVX512F_UKERNELS,
Marat Dukhan04f03be2019-11-19 12:36:47 -0800847 deps = [
848 "@FP16",
849 "@pthreadpool",
850 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700851)
852
853xnnpack_cc_library(
854 name = "asm_ukernels",
855 hdrs = ["src/xnnpack/assembly.h"],
856 aarch32_srcs = AARCH32_ASM_UKERNELS,
857 aarch64_srcs = AARCH64_ASM_UKERNELS,
858)
859
860xnnpack_aggregate_library(
861 name = "ukernels",
862 aarch32_deps = [
863 ":psimd_ukernels",
864 ":neon_ukernels",
865 ":neonfma_ukernels",
866 ":asm_ukernels",
867 ],
868 aarch64_deps = [
869 ":psimd_ukernels",
870 ":neon_ukernels",
871 ":neonfma_ukernels",
872 ":neonfp16arith_ukernels",
873 ":asm_ukernels",
874 ],
875 generic_deps = [":scalar_ukernels"],
876 wasmsimd_deps = [
877 ":psimd_ukernels",
878 ],
879 x86_deps = [
880 ":psimd_ukernels",
881 ":sse2_ukernels",
Marat Dukhan69c3f2c2019-11-06 12:30:01 -0800882 ":sse41_ukernels",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700883 ":avx_ukernels",
Marat Dukhan6adff4e2019-10-14 18:32:07 -0700884 ":avx2_ukernels",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700885 ":avx512f_ukernels",
886 ],
887)
888
889xnnpack_cc_library(
890 name = "im2col",
891 srcs = ["src/im2col.c"],
892 hdrs = [
893 "src/xnnpack/common.h",
894 "src/xnnpack/im2col.h",
895 ],
896 copts = xnnpack_std_copts(),
897)
898
899xnnpack_cc_library(
900 name = "indirection",
901 srcs = ["src/indirection.c"],
902 hdrs = INTERNAL_HDRS,
903 copts = xnnpack_std_copts(),
904 deps = [
905 "@FP16",
906 "@FXdiv",
907 "@pthreadpool",
908 ],
909)
910
911xnnpack_cc_library(
912 name = "operator_run",
913 srcs = ["src/operator-run.c"],
Marat Dukhanc8e00eb2019-10-04 14:55:26 -0700914 hdrs = INTERNAL_HDRS + LOGGING_HDRS,
915 copts = xnnpack_std_copts() + LOGGING_COPTS + [
Marat Dukhan08c4a432019-10-03 09:29:21 -0700916 # Wrappers for multi-pass microkernels use VLAs for temporary buffers.
917 "-Wno-vla",
918 ],
919 deps = [
920 "@FP16",
921 "@FXdiv",
922 "@clog",
923 "@pthreadpool",
924 ],
925)
926
927cc_library(
928 name = "enable_assembly",
929 defines = select({
930 ":xnn_enable_assembly_explicit_true": ["XNN_ENABLE_ASSEMBLY=1"],
931 ":xnn_enable_assembly_explicit_false": ["XNN_ENABLE_ASSEMBLY=0"],
Frank Barchard810171d2019-10-10 10:34:51 -0700932 "//conditions:default": ["XNN_ENABLE_ASSEMBLY=1"],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700933 }),
934)
935
Marat Dukhancf056b22019-10-07 10:26:29 -0700936xnnpack_cc_library(
Marat Dukhan08c4a432019-10-03 09:29:21 -0700937 name = "operators",
938 srcs = OPERATOR_SRCS + [
Marat Dukhan04f03be2019-11-19 12:36:47 -0800939 "src/memory.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700940 "src/operator-delete.c",
Marat Dukhancf056b22019-10-07 10:26:29 -0700941 ],
942 hdrs = INTERNAL_HDRS + LOGGING_HDRS,
Marat Dukhanc8e00eb2019-10-04 14:55:26 -0700943 copts = xnnpack_std_copts() + LOGGING_COPTS + [
Marat Dukhan08c4a432019-10-03 09:29:21 -0700944 "-Isrc",
945 "-Iinclude",
946 ] + select({
947 ":debug_build": [],
948 "//conditions:default": xnnpack_min_size_copts(),
949 }),
Marat Dukhancf056b22019-10-07 10:26:29 -0700950 wasm_srcs = ["src/wasm-stubs.c"],
951 wasmsimd_srcs = ["src/wasm-stubs.c"],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700952 deps = [
Marat Dukhan08c4a432019-10-03 09:29:21 -0700953 ":indirection",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700954 "@FP16",
955 "@FXdiv",
956 "@clog",
Marat Dukhan08c4a432019-10-03 09:29:21 -0700957 "@pthreadpool",
Marat Dukhan8fe54e42019-10-10 14:12:59 -0700958 ],
959)
960
961cc_library(
962 name = "XNNPACK",
963 srcs = [
964 "src/init.c",
965 ],
966 copts = xnnpack_std_copts() + LOGGING_COPTS + [
967 "-Isrc",
968 "-Iinclude",
969 ] + select({
970 ":debug_build": [],
971 "//conditions:default": xnnpack_min_size_copts(),
972 }),
973 includes = ["include"],
974 linkstatic = True,
975 textual_hdrs = ["include/xnnpack.h"],
976 visibility = xnnpack_visibility(),
977 deps = [
978 ":enable_assembly",
979 ":ukernels",
980 ":operator_run",
981 ":operators",
982 "@clog",
983 "@pthreadpool",
Marat Dukhand343c222019-10-07 09:22:14 -0700984 ] + select({
985 ":emscripten": [],
986 "//conditions:default": ["@cpuinfo"],
987 }),
Marat Dukhan08c4a432019-10-03 09:29:21 -0700988)
989
990cc_library(
Marat Dukhan8fe54e42019-10-10 14:12:59 -0700991 name = "xnnpack_operators_nhwc_f32",
992 srcs = [
993 "src/init.c",
994 ],
995 copts = xnnpack_std_copts() + LOGGING_COPTS + [
996 "-Isrc",
997 "-Iinclude",
998 ] + select({
999 ":debug_build": [],
1000 "//conditions:default": xnnpack_min_size_copts(),
1001 }),
1002 defines = [
1003 "XNN_NO_Q8_OPERATORS",
1004 "XNN_NO_U8_OPERATORS",
1005 "XNN_NO_X8_OPERATORS",
Marat Dukhanefc47b82019-11-18 09:25:38 -08001006 "XNN_NO_NCHW_OPERATORS",
Marat Dukhan8fe54e42019-10-10 14:12:59 -07001007 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -07001008 includes = ["include"],
1009 linkstatic = True,
Marat Dukhan8fe54e42019-10-10 14:12:59 -07001010 textual_hdrs = ["include/xnnpack.h"],
Marat Dukhan08c4a432019-10-03 09:29:21 -07001011 visibility = xnnpack_visibility(),
1012 deps = [
Marat Dukhan8fe54e42019-10-10 14:12:59 -07001013 ":enable_assembly",
1014 ":ukernels",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001015 ":operator_run",
1016 ":operators",
Marat Dukhan8fe54e42019-10-10 14:12:59 -07001017 "@clog",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001018 "@pthreadpool",
Marat Dukhan8fe54e42019-10-10 14:12:59 -07001019 ] + select({
1020 ":emscripten": [],
1021 "//conditions:default": ["@cpuinfo"],
1022 }),
Marat Dukhan08c4a432019-10-03 09:29:21 -07001023)
1024
Marat Dukhancf056b22019-10-07 10:26:29 -07001025xnnpack_cc_library(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001026 name = "bench_utils",
1027 srcs = ["bench/utils.cc"],
1028 hdrs = ["bench/utils.h"],
1029 copts = ["-Wno-unused-result"],
Marat Dukhanbad48fe2019-11-04 10:35:22 -08001030 deps = [
1031 "@com_google_benchmark//:benchmark",
1032 "@cpuinfo",
1033 ],
Marat Dukhan08c4a432019-10-03 09:29:21 -07001034)
1035
Frank Barchard7e955972019-10-11 10:34:25 -07001036######################### Benchmarks for micro-kernels #########################
Marat Dukhan08c4a432019-10-03 09:29:21 -07001037
1038xnnpack_benchmark(
1039 name = "q8_gemm_bench",
1040 srcs = [
1041 "bench/gemm.h",
1042 "bench/q8-gemm.cc",
1043 "src/xnnpack/AlignedAllocator.h",
1044 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_BENCHMARK_HDRS,
1045 copts = ["-Wno-unused-function"] + xnnpack_optional_ruy_copts() + xnnpack_optional_gemmlowp_copts(),
1046 deps = MICROKERNEL_BENCHMARK_DEPS + xnnpack_optional_ruy_deps() + xnnpack_optional_gemmlowp_deps(),
1047)
1048
1049xnnpack_benchmark(
1050 name = "f16_gemm_bench",
1051 srcs = [
1052 "bench/f16-gemm.cc",
1053 "bench/gemm.h",
1054 "src/xnnpack/AlignedAllocator.h",
1055 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_BENCHMARK_HDRS,
1056 copts = ["-Wno-unused-function"],
1057 deps = MICROKERNEL_BENCHMARK_DEPS,
1058)
1059
1060xnnpack_benchmark(
1061 name = "f32_igemm_bench",
1062 srcs = [
1063 "bench/f32-igemm.cc",
1064 "bench/conv.h",
1065 "src/xnnpack/AlignedAllocator.h",
1066 ] + MICROKERNEL_BENCHMARK_HDRS,
Frank Barchard7e955972019-10-11 10:34:25 -07001067 deps = MICROKERNEL_BENCHMARK_DEPS + [":indirection"],
Marat Dukhan08c4a432019-10-03 09:29:21 -07001068)
1069
1070xnnpack_benchmark(
1071 name = "f32_conv_hwc_bench",
1072 srcs = [
1073 "bench/f32-conv-hwc.cc",
1074 "bench/dconv.h",
1075 "src/xnnpack/AlignedAllocator.h",
1076 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_BENCHMARK_HDRS,
1077 copts = ["-Wno-unused-function"],
1078 deps = MICROKERNEL_BENCHMARK_DEPS,
1079)
1080
1081xnnpack_benchmark(
Erich Elsen563df5f2019-10-23 08:02:21 -07001082 name = "f32_conv_hwc2spchw_bench",
1083 srcs = [
1084 "bench/f32-conv-hwc2spchw.cc",
1085 "bench/dconv.h",
1086 "src/xnnpack/AlignedAllocator.h",
1087 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_BENCHMARK_HDRS,
1088 copts = ["-Wno-unused-function"],
1089 deps = MICROKERNEL_BENCHMARK_DEPS,
1090)
1091
1092xnnpack_benchmark(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001093 name = "f32_dwconv_bench",
1094 srcs = [
1095 "bench/f32-dwconv.cc",
1096 "bench/dwconv.h",
1097 "src/xnnpack/AlignedAllocator.h",
1098 ] + MICROKERNEL_BENCHMARK_HDRS,
1099 deps = MICROKERNEL_BENCHMARK_DEPS + [":indirection"],
1100)
1101
1102xnnpack_benchmark(
1103 name = "f32_dwconv_spchw_bench",
1104 srcs = [
1105 "bench/f32-dwconv-spchw.cc",
1106 "bench/dwconv.h",
1107 "src/xnnpack/AlignedAllocator.h",
1108 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_BENCHMARK_HDRS,
1109 deps = MICROKERNEL_BENCHMARK_DEPS + [":indirection"],
1110)
1111
1112xnnpack_benchmark(
1113 name = "f32_gemm_bench",
1114 srcs = [
1115 "bench/f32-gemm.cc",
1116 "bench/gemm.h",
1117 "src/xnnpack/AlignedAllocator.h",
1118 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_BENCHMARK_HDRS,
1119 copts = ["-Wno-unused-function"] + xnnpack_optional_ruy_copts(),
Frank Barchard7e955972019-10-11 10:34:25 -07001120 deps = MICROKERNEL_BENCHMARK_DEPS + xnnpack_optional_ruy_deps(),
Marat Dukhan08c4a432019-10-03 09:29:21 -07001121)
1122
1123xnnpack_benchmark(
1124 name = "f32_rmax_bench",
1125 srcs = [
1126 "bench/f32-rmax.cc",
1127 "src/xnnpack/AlignedAllocator.h",
1128 ] + MICROKERNEL_BENCHMARK_HDRS,
1129 deps = MICROKERNEL_BENCHMARK_DEPS,
1130)
1131
1132xnnpack_benchmark(
Marat Dukhan14bec502019-11-18 11:35:31 -08001133 name = "f32_sigmoid_bench",
1134 srcs = [
1135 "bench/f32-sigmoid.cc",
1136 "src/xnnpack/AlignedAllocator.h",
1137 ] + MICROKERNEL_BENCHMARK_HDRS,
1138 copts = ["-Wno-unused-function"],
1139 deps = MICROKERNEL_BENCHMARK_DEPS,
1140)
1141
1142xnnpack_benchmark(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001143 name = "f32_spmm_bench",
1144 srcs = [
1145 "bench/f32-spmm.cc",
1146 "bench/gemm.h",
1147 "src/xnnpack/AlignedAllocator.h",
1148 ] + MICROKERNEL_BENCHMARK_HDRS,
1149 copts = ["-Wno-unused-function"],
1150 deps = MICROKERNEL_BENCHMARK_DEPS,
1151)
1152
1153xnnpack_benchmark(
Marat Dukhan4a4a7fa2019-10-21 13:46:14 -07001154 name = "f32_softargmax_bench",
1155 srcs = [
1156 "bench/f32-softargmax.cc",
1157 ] + MICROKERNEL_BENCHMARK_HDRS,
1158 copts = ["-Wno-unused-function"],
1159 deps = MICROKERNEL_BENCHMARK_DEPS,
1160)
1161
1162xnnpack_benchmark(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001163 name = "f32_im2col_gemm_bench",
1164 srcs = [
1165 "bench/f32-im2col-gemm.cc",
1166 "bench/conv.h",
1167 "src/xnnpack/AlignedAllocator.h",
1168 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_BENCHMARK_HDRS,
1169 deps = MICROKERNEL_BENCHMARK_DEPS + [":im2col"],
1170)
1171
1172########################### Benchmarks for operators ###########################
1173
1174xnnpack_benchmark(
1175 name = "add_bench",
1176 srcs = ["bench/add.cc"],
1177 deps = OPERATOR_BENCHMARK_DEPS,
1178)
1179
1180xnnpack_benchmark(
1181 name = "average_pooling_bench",
1182 srcs = ["bench/average-pooling.cc"],
1183 deps = OPERATOR_BENCHMARK_DEPS,
1184)
1185
1186xnnpack_benchmark(
1187 name = "channel_shuffle_bench",
1188 srcs = ["bench/channel-shuffle.cc"],
1189 deps = OPERATOR_BENCHMARK_DEPS,
1190)
1191
1192xnnpack_benchmark(
1193 name = "convolution_bench",
1194 srcs = ["bench/convolution.cc"],
1195 copts = xnnpack_optional_tflite_copts() + xnnpack_optional_armcl_copts(),
1196 deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps() + xnnpack_optional_armcl_deps(),
1197)
1198
1199xnnpack_benchmark(
1200 name = "deconvolution_bench",
1201 srcs = ["bench/deconvolution.cc"],
1202 copts = xnnpack_optional_tflite_copts(),
1203 deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
1204)
1205
1206xnnpack_benchmark(
1207 name = "global_average_pooling_bench",
1208 srcs = ["bench/global-average-pooling.cc"],
1209 deps = OPERATOR_BENCHMARK_DEPS,
1210)
1211
1212xnnpack_benchmark(
1213 name = "max_pooling_bench",
1214 srcs = ["bench/max-pooling.cc"],
1215 deps = OPERATOR_BENCHMARK_DEPS,
1216)
1217
1218xnnpack_benchmark(
1219 name = "sigmoid_bench",
1220 srcs = ["bench/sigmoid.cc"],
Marat Dukhanc3b9e862019-11-17 13:18:54 -08001221 copts = xnnpack_optional_tflite_copts(),
1222 deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
Marat Dukhan08c4a432019-10-03 09:29:21 -07001223)
1224
1225xnnpack_benchmark(
Marat Dukhan95b22432019-10-30 16:30:14 -07001226 name = "prelu_bench",
1227 srcs = ["bench/prelu.cc"],
1228 copts = xnnpack_optional_tflite_copts(),
1229 deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
1230)
1231
1232xnnpack_benchmark(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001233 name = "softargmax_bench",
1234 srcs = ["bench/softargmax.cc"],
1235 deps = OPERATOR_BENCHMARK_DEPS,
1236)
1237
Marat Dukhanc068bb62019-10-04 13:24:39 -07001238############################# End-to-end benchmarks ############################
1239
1240cc_library(
1241 name = "mobilenet_v1",
1242 srcs = ["models/mobilenet-v1.cc"],
1243 hdrs = ["models/models.h"],
1244 linkstatic = True,
1245 deps = [
1246 ":XNNPACK",
1247 "@pthreadpool",
1248 ],
1249)
1250
1251cc_library(
1252 name = "mobilenet_v2",
1253 srcs = ["models/mobilenet-v2.cc"],
1254 hdrs = ["models/models.h"],
1255 linkstatic = True,
1256 deps = [
1257 ":XNNPACK",
1258 "@pthreadpool",
1259 ],
1260)
1261
1262xnnpack_benchmark(
Marat Dukhanef4416e2019-10-31 13:44:40 -07001263 name = "f32_dwconv_e2e_bench",
1264 srcs = ["bench/f32-dwconv-e2e.cc"] + MICROKERNEL_BENCHMARK_HDRS,
1265 copts = ["-Wno-unused-function"],
1266 deps = MICROKERNEL_BENCHMARK_DEPS + [
1267 ":XNNPACK",
1268 ":mobilenet_v1",
1269 ":mobilenet_v2",
1270 ],
1271)
1272
1273xnnpack_benchmark(
Marat Dukhan5f18d262019-10-31 10:24:14 -07001274 name = "f32_gemm_e2e_bench",
1275 srcs = ["bench/f32-gemm-e2e.cc"] + MICROKERNEL_BENCHMARK_HDRS,
1276 copts = ["-Wno-unused-function"],
1277 deps = MICROKERNEL_BENCHMARK_DEPS + [
1278 ":XNNPACK",
1279 ":mobilenet_v1",
1280 ":mobilenet_v2",
1281 ],
1282)
1283
1284xnnpack_benchmark(
Marat Dukhanc068bb62019-10-04 13:24:39 -07001285 name = "end2end_bench",
1286 srcs = ["bench/end2end.cc"],
1287 deps = [
1288 ":XNNPACK",
Frank Barchardc712fa42019-10-31 14:00:21 -07001289 ":bench_utils",
Marat Dukhanc068bb62019-10-04 13:24:39 -07001290 ":mobilenet_v1",
1291 ":mobilenet_v2",
1292 "@pthreadpool",
1293 ],
1294)
1295
Marat Dukhan6adff4e2019-10-14 18:32:07 -07001296#################### Accuracy evaluation for math functions ####################
1297
1298xnnpack_benchmark(
1299 name = "f32_exp_eval",
1300 srcs = [
1301 "eval/f32-exp.cc",
1302 "src/xnnpack/AlignedAllocator.h",
1303 ] + ACCURACY_EVAL_HDRS,
1304 deps = ACCURACY_EVAL_DEPS,
1305)
1306
Marat Dukhan515c9772019-10-17 18:07:57 -07001307xnnpack_benchmark(
1308 name = "f32_expminus_eval",
1309 srcs = [
1310 "eval/f32-expminus.cc",
1311 "src/xnnpack/AlignedAllocator.h",
1312 ] + ACCURACY_EVAL_HDRS,
1313 deps = ACCURACY_EVAL_DEPS,
1314)
1315
Marat Dukhan98ba4412019-10-23 02:14:28 -07001316xnnpack_benchmark(
1317 name = "f32_extexp_eval",
1318 srcs = [
1319 "eval/f32-extexp.cc",
1320 "src/xnnpack/AlignedAllocator.h",
1321 ] + ACCURACY_EVAL_HDRS,
1322 deps = ACCURACY_EVAL_DEPS,
1323)
1324
Marat Dukhan346a9e52019-11-15 09:06:30 -08001325xnnpack_benchmark(
1326 name = "f32_sigmoid_eval",
1327 srcs = [
1328 "eval/f32-sigmoid.cc",
1329 "src/xnnpack/AlignedAllocator.h",
1330 ] + ACCURACY_EVAL_HDRS,
1331 deps = ACCURACY_EVAL_DEPS,
1332)
1333
Marat Dukhan08c4a432019-10-03 09:29:21 -07001334######################### Unit tests for micro-kernels #########################
1335
1336xnnpack_unit_test(
1337 name = "f16_gemm_test",
1338 srcs = [
1339 "test/f16-gemm.cc",
1340 "test/gemm-microkernel-tester.h",
1341 "src/xnnpack/AlignedAllocator.h",
1342 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1343 deps = MICROKERNEL_TEST_DEPS,
1344)
1345
1346xnnpack_unit_test(
1347 name = "f32_argmaxpool_test",
1348 srcs = [
1349 "test/f32-argmaxpool.cc",
1350 "test/argmaxpool-microkernel-tester.h",
1351 "src/xnnpack/AlignedAllocator.h",
1352 ] + MICROKERNEL_TEST_HDRS,
1353 deps = MICROKERNEL_TEST_DEPS,
1354)
1355
1356xnnpack_unit_test(
1357 name = "f32_avgpool_test",
1358 srcs = [
1359 "test/f32-avgpool.cc",
1360 "test/avgpool-microkernel-tester.h",
1361 "src/xnnpack/AlignedAllocator.h",
1362 ] + MICROKERNEL_TEST_HDRS,
1363 deps = MICROKERNEL_TEST_DEPS,
1364)
1365
1366xnnpack_unit_test(
Marat Dukhan35dacfb2019-11-07 19:18:16 -08001367 name = "f32_bilinear_test",
1368 srcs = [
1369 "test/f32-bilinear.cc",
1370 "test/bilinear-microkernel-tester.h",
1371 "src/xnnpack/AlignedAllocator.h",
1372 ] + MICROKERNEL_TEST_HDRS,
1373 deps = MICROKERNEL_TEST_DEPS,
1374)
1375
1376xnnpack_unit_test(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001377 name = "f32_clamp_test",
1378 srcs = [
1379 "test/f32-clamp.cc",
1380 "test/clamp-microkernel-tester.h",
1381 ] + MICROKERNEL_TEST_HDRS,
1382 deps = MICROKERNEL_TEST_DEPS,
1383)
1384
1385xnnpack_unit_test(
1386 name = "f32_igemm_test",
1387 srcs = [
1388 "test/f32-igemm.cc",
1389 "test/gemm-microkernel-tester.h",
1390 "src/xnnpack/AlignedAllocator.h",
1391 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1392 deps = MICROKERNEL_TEST_DEPS,
1393)
1394
1395xnnpack_unit_test(
1396 name = "f32_conv_hwc_test",
1397 srcs = [
1398 "test/f32-conv-hwc.cc",
1399 "test/conv-hwc-microkernel-tester.h",
1400 "src/xnnpack/AlignedAllocator.h",
1401 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1402 deps = MICROKERNEL_TEST_DEPS,
1403)
1404
1405xnnpack_unit_test(
1406 name = "f32_conv_hwc2spchw_test",
1407 srcs = [
1408 "test/f32-conv-hwc2spchw.cc",
1409 "test/conv-hwc2spchw-microkernel-tester.h",
1410 "src/xnnpack/AlignedAllocator.h",
1411 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1412 deps = MICROKERNEL_TEST_DEPS,
1413)
1414
1415xnnpack_unit_test(
1416 name = "f32_dwconv_test",
1417 srcs = [
1418 "test/f32-dwconv.cc",
1419 "test/dwconv-microkernel-tester.h",
1420 "src/xnnpack/AlignedAllocator.h",
1421 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1422 deps = MICROKERNEL_TEST_DEPS,
1423)
1424
1425xnnpack_unit_test(
1426 name = "f32_dwconv_spchw_test",
1427 srcs = [
1428 "test/f32-dwconv-spchw.cc",
1429 "test/dwconv-spchw-microkernel-tester.h",
1430 "src/xnnpack/AlignedAllocator.h",
1431 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1432 deps = MICROKERNEL_TEST_DEPS,
1433)
1434
1435xnnpack_unit_test(
1436 name = "f32_gavgpool_test",
1437 srcs = [
1438 "test/f32-gavgpool.cc",
1439 "test/gavgpool-microkernel-tester.h",
1440 "src/xnnpack/AlignedAllocator.h",
1441 ] + MICROKERNEL_TEST_HDRS,
1442 deps = MICROKERNEL_TEST_DEPS,
1443)
1444
1445xnnpack_unit_test(
1446 name = "f32_gavgpool_spchw_test",
1447 srcs = [
1448 "test/f32-gavgpool-spchw.cc",
1449 "test/gavgpool-spchw-microkernel-tester.h",
1450 "src/xnnpack/AlignedAllocator.h",
1451 ] + MICROKERNEL_TEST_HDRS,
1452 deps = MICROKERNEL_TEST_DEPS,
1453)
1454
1455xnnpack_unit_test(
1456 name = "f32_gemm_test",
1457 srcs = [
1458 "test/f32-gemm.cc",
1459 "test/gemm-microkernel-tester.h",
1460 "src/xnnpack/AlignedAllocator.h",
1461 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1462 deps = MICROKERNEL_TEST_DEPS,
1463)
1464
1465xnnpack_unit_test(
1466 name = "f32_gemminc_test",
1467 srcs = [
1468 "test/f32-gemminc.cc",
1469 "test/gemm-microkernel-tester.h",
1470 "src/xnnpack/AlignedAllocator.h",
1471 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1472 deps = MICROKERNEL_TEST_DEPS,
1473)
1474
1475xnnpack_unit_test(
1476 name = "f32_hswish_test",
1477 srcs = [
1478 "test/f32-hswish.cc",
1479 "test/hswish-microkernel-tester.h",
1480 ] + MICROKERNEL_TEST_HDRS,
1481 deps = MICROKERNEL_TEST_DEPS,
1482)
1483
1484xnnpack_unit_test(
1485 name = "f32_maxpool_test",
1486 srcs = [
1487 "test/f32-maxpool.cc",
1488 "test/maxpool-microkernel-tester.h",
1489 ] + MICROKERNEL_TEST_HDRS,
1490 deps = MICROKERNEL_TEST_DEPS,
1491)
1492
1493xnnpack_unit_test(
1494 name = "f32_pavgpool_test",
1495 srcs = [
1496 "test/f32-pavgpool.cc",
1497 "test/avgpool-microkernel-tester.h",
1498 "src/xnnpack/AlignedAllocator.h",
1499 ] + MICROKERNEL_TEST_HDRS,
1500 deps = MICROKERNEL_TEST_DEPS,
1501)
1502
1503xnnpack_unit_test(
1504 name = "f32_ppmm_test",
1505 srcs = [
1506 "test/f32-ppmm.cc",
1507 "test/gemm-microkernel-tester.h",
1508 "src/xnnpack/AlignedAllocator.h",
1509 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1510 deps = MICROKERNEL_TEST_DEPS,
1511)
1512
1513xnnpack_unit_test(
1514 name = "f32_prelu_test",
1515 srcs = [
1516 "test/f32-prelu.cc",
1517 "test/prelu-microkernel-tester.h",
1518 "src/xnnpack/AlignedAllocator.h",
1519 ] + MICROKERNEL_TEST_HDRS,
1520 deps = MICROKERNEL_TEST_DEPS,
1521)
1522
1523xnnpack_unit_test(
Marat Dukhan97579532019-10-18 16:40:39 -07001524 name = "f32_raddexpminusmax_test",
1525 srcs = [
1526 "test/f32-raddexpminusmax.cc",
1527 "test/raddexpminusmax-microkernel-tester.h",
1528 ] + MICROKERNEL_TEST_HDRS,
1529 deps = MICROKERNEL_TEST_DEPS,
1530)
1531
1532xnnpack_unit_test(
Marat Dukhan6f8d4d32019-10-25 17:07:09 -07001533 name = "f32_raddextexp_test",
1534 srcs = [
1535 "test/f32-raddextexp.cc",
1536 "test/raddextexp-microkernel-tester.h",
1537 ] + MICROKERNEL_TEST_HDRS,
1538 deps = MICROKERNEL_TEST_DEPS,
1539)
1540
1541xnnpack_unit_test(
Marat Dukhan97579532019-10-18 16:40:39 -07001542 name = "f32_raddstoreexpminusmax_test",
1543 srcs = [
1544 "test/f32-raddstoreexpminusmax.cc",
1545 "test/raddstoreexpminusmax-microkernel-tester.h",
1546 ] + MICROKERNEL_TEST_HDRS,
1547 deps = MICROKERNEL_TEST_DEPS,
1548)
1549
1550xnnpack_unit_test(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001551 name = "f32_rmax_test",
1552 srcs = [
1553 "test/f32-rmax.cc",
1554 "test/rmax-microkernel-tester.h",
1555 ] + MICROKERNEL_TEST_HDRS,
1556 deps = MICROKERNEL_TEST_DEPS,
1557)
1558
1559xnnpack_unit_test(
Marat Dukhan346a9e52019-11-15 09:06:30 -08001560 name = "f32_sigmoid_test",
1561 srcs = [
1562 "test/f32-sigmoid.cc",
1563 "test/vunop-microkernel-tester.h",
1564 ] + MICROKERNEL_TEST_HDRS,
1565 deps = MICROKERNEL_TEST_DEPS,
1566)
1567
1568xnnpack_unit_test(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001569 name = "f32_spmm_test",
1570 srcs = [
1571 "test/f32-spmm.cc",
1572 "test/spmm-microkernel-tester.h",
1573 "src/xnnpack/AlignedAllocator.h",
1574 ] + MICROKERNEL_TEST_HDRS,
1575 deps = MICROKERNEL_TEST_DEPS,
1576)
1577
1578xnnpack_unit_test(
1579 name = "f32_vadd_test",
1580 srcs = [
1581 "test/f32-vadd.cc",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -08001582 "test/vbinop-microkernel-tester.h",
1583 ] + MICROKERNEL_TEST_HDRS,
1584 deps = MICROKERNEL_TEST_DEPS,
1585)
1586
1587xnnpack_unit_test(
1588 name = "f32_vaddc_test",
1589 srcs = [
1590 "test/f32-vaddc.cc",
1591 "test/vbinopc-microkernel-tester.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001592 ] + MICROKERNEL_TEST_HDRS,
1593 deps = MICROKERNEL_TEST_DEPS,
1594)
1595
1596xnnpack_unit_test(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001597 name = "f32_vmul_test",
1598 srcs = [
1599 "test/f32-vmul.cc",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -08001600 "test/vbinop-microkernel-tester.h",
1601 ] + MICROKERNEL_TEST_HDRS,
1602 deps = MICROKERNEL_TEST_DEPS,
1603)
1604
1605xnnpack_unit_test(
1606 name = "f32_vmulc_test",
1607 srcs = [
1608 "test/f32-vmulc.cc",
1609 "test/vbinopc-microkernel-tester.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001610 ] + MICROKERNEL_TEST_HDRS,
1611 deps = MICROKERNEL_TEST_DEPS,
1612)
1613
1614xnnpack_unit_test(
1615 name = "f32_vmulcaddc_test",
1616 srcs = [
1617 "test/f32-vmulcaddc.cc",
1618 "test/vmulcaddc-microkernel-tester.h",
1619 "src/xnnpack/AlignedAllocator.h",
1620 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1621 deps = MICROKERNEL_TEST_DEPS,
1622)
1623
1624xnnpack_unit_test(
Marat Dukhan05ac8e32019-10-21 15:39:33 -07001625 name = "f32_vscale_test",
1626 srcs = [
1627 "test/f32-vscale.cc",
1628 "test/vscale-microkernel-tester.h",
1629 ] + MICROKERNEL_TEST_HDRS,
1630 deps = MICROKERNEL_TEST_DEPS,
1631)
1632
1633xnnpack_unit_test(
Marat Dukhan97579532019-10-18 16:40:39 -07001634 name = "f32_vscaleexpminusmax_test",
1635 srcs = [
1636 "test/f32-vscaleexpminusmax.cc",
1637 "test/vscaleexpminusmax-microkernel-tester.h",
1638 ] + MICROKERNEL_TEST_HDRS,
1639 deps = MICROKERNEL_TEST_DEPS,
1640)
1641
1642xnnpack_unit_test(
Marat Dukhan6f8d4d32019-10-25 17:07:09 -07001643 name = "f32_vscaleextexp_test",
1644 srcs = [
1645 "test/f32-vscaleextexp.cc",
1646 "test/vscaleextexp-microkernel-tester.h",
1647 ] + MICROKERNEL_TEST_HDRS,
1648 deps = MICROKERNEL_TEST_DEPS,
1649)
1650
1651xnnpack_unit_test(
Marat Dukhan97579532019-10-18 16:40:39 -07001652 name = "f32_vsub_test",
1653 srcs = [
1654 "test/f32-vsub.cc",
Marat Dukhanc07cb7f2019-11-14 15:32:05 -08001655 "test/vbinop-microkernel-tester.h",
1656 ] + MICROKERNEL_TEST_HDRS,
1657 deps = MICROKERNEL_TEST_DEPS,
1658)
1659
1660xnnpack_unit_test(
1661 name = "f32_vsubc_test",
1662 srcs = [
1663 "test/f32-vsubc.cc",
1664 "test/vbinopc-microkernel-tester.h",
1665 ] + MICROKERNEL_TEST_HDRS,
1666 deps = MICROKERNEL_TEST_DEPS,
1667)
1668
1669xnnpack_unit_test(
1670 name = "f32_vrsubc_test",
1671 srcs = [
1672 "test/f32-vrsubc.cc",
1673 "test/vbinopc-microkernel-tester.h",
Marat Dukhan97579532019-10-18 16:40:39 -07001674 ] + MICROKERNEL_TEST_HDRS,
1675 deps = MICROKERNEL_TEST_DEPS,
1676)
1677
1678xnnpack_unit_test(
Marat Dukhan08c4a432019-10-03 09:29:21 -07001679 name = "q8_avgpool_test",
1680 srcs = [
1681 "test/q8-avgpool.cc",
1682 "test/avgpool-microkernel-tester.h",
1683 "src/xnnpack/AlignedAllocator.h",
1684 ] + MICROKERNEL_TEST_HDRS,
1685 deps = MICROKERNEL_TEST_DEPS,
1686)
1687
1688xnnpack_unit_test(
1689 name = "q8_igemm_test",
1690 srcs = [
1691 "test/q8-igemm.cc",
1692 "test/gemm-microkernel-tester.h",
1693 "src/xnnpack/AlignedAllocator.h",
1694 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1695 deps = MICROKERNEL_TEST_DEPS,
1696)
1697
1698xnnpack_unit_test(
1699 name = "q8_dwconv_test",
1700 srcs = [
1701 "test/q8-dwconv.cc",
1702 "test/dwconv-microkernel-tester.h",
1703 "src/xnnpack/AlignedAllocator.h",
1704 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1705 deps = MICROKERNEL_TEST_DEPS,
1706)
1707
1708xnnpack_unit_test(
1709 name = "q8_gavgpool_test",
1710 srcs = [
1711 "test/q8-gavgpool.cc",
1712 "test/gavgpool-microkernel-tester.h",
1713 "src/xnnpack/AlignedAllocator.h",
1714 ] + MICROKERNEL_TEST_HDRS,
1715 deps = MICROKERNEL_TEST_DEPS,
1716)
1717
1718xnnpack_unit_test(
1719 name = "q8_gemm_test",
1720 srcs = [
1721 "test/q8-gemm.cc",
1722 "test/gemm-microkernel-tester.h",
1723 "src/xnnpack/AlignedAllocator.h",
1724 ] + WEIGHTS_PACK_HDRS + MICROKERNEL_TEST_HDRS,
1725 deps = MICROKERNEL_TEST_DEPS,
1726)
1727
1728xnnpack_unit_test(
1729 name = "q8_vadd_test",
1730 srcs = [
1731 "test/q8-vadd.cc",
1732 "test/vadd-microkernel-tester.h",
1733 ] + MICROKERNEL_TEST_HDRS,
1734 deps = MICROKERNEL_TEST_DEPS,
1735)
1736
1737xnnpack_unit_test(
1738 name = "u8_clamp_test",
1739 srcs = [
1740 "test/u8-clamp.cc",
1741 "test/clamp-microkernel-tester.h",
1742 ] + MICROKERNEL_TEST_HDRS,
1743 deps = MICROKERNEL_TEST_DEPS,
1744)
1745
1746xnnpack_unit_test(
1747 name = "u8_lut32norm_test",
1748 srcs = [
1749 "test/u8-lut32norm.cc",
1750 "test/lut-norm-microkernel-tester.h",
1751 ] + MICROKERNEL_TEST_HDRS,
1752 deps = MICROKERNEL_TEST_DEPS,
1753)
1754
1755xnnpack_unit_test(
1756 name = "u8_maxpool_test",
1757 srcs = [
1758 "test/u8-maxpool.cc",
1759 "test/maxpool-microkernel-tester.h",
1760 ] + MICROKERNEL_TEST_HDRS,
1761 deps = MICROKERNEL_TEST_DEPS,
1762)
1763
1764xnnpack_unit_test(
1765 name = "u8_rmax_test",
1766 srcs = [
1767 "test/u8-rmax.cc",
1768 "test/rmax-microkernel-tester.h",
1769 ] + MICROKERNEL_TEST_HDRS,
1770 deps = MICROKERNEL_TEST_DEPS,
1771)
1772
1773xnnpack_unit_test(
1774 name = "x32_packx_test",
1775 srcs = [
1776 "test/x32-packx.cc",
1777 "test/pack-microkernel-tester.h",
1778 "src/xnnpack/AlignedAllocator.h",
1779 ] + MICROKERNEL_TEST_HDRS,
1780 deps = MICROKERNEL_TEST_DEPS,
1781)
1782
1783xnnpack_unit_test(
1784 name = "x32_pad_test",
1785 srcs = [
1786 "test/x32-pad.cc",
1787 "test/pad-microkernel-tester.h",
1788 ] + MICROKERNEL_TEST_HDRS,
1789 deps = MICROKERNEL_TEST_DEPS,
1790)
1791
1792xnnpack_unit_test(
1793 name = "x32_unpool_test",
1794 srcs = [
1795 "test/x32-unpool.cc",
1796 "test/unpool-microkernel-tester.h",
1797 ] + MICROKERNEL_TEST_HDRS,
1798 deps = MICROKERNEL_TEST_DEPS,
1799)
1800
1801xnnpack_unit_test(
1802 name = "x32_zip_test",
1803 srcs = [
1804 "test/x32-zip.cc",
1805 "test/zip-microkernel-tester.h",
1806 ] + MICROKERNEL_TEST_HDRS,
1807 deps = MICROKERNEL_TEST_DEPS,
1808)
1809
1810xnnpack_unit_test(
1811 name = "x8_lut_test",
1812 srcs = [
1813 "test/x8-lut.cc",
1814 "test/lut-microkernel-tester.h",
1815 ] + MICROKERNEL_TEST_HDRS,
1816 deps = MICROKERNEL_TEST_DEPS,
1817)
1818
1819xnnpack_unit_test(
1820 name = "x8_zip_test",
1821 srcs = [
1822 "test/x8-zip.cc",
1823 "test/zip-microkernel-tester.h",
1824 ] + MICROKERNEL_TEST_HDRS,
1825 deps = MICROKERNEL_TEST_DEPS,
1826)
1827
1828########################### Size test for the library ##########################
1829
1830xnnpack_binary(
1831 name = "size_test",
1832 srcs = ["test/size.c"],
Marat Dukhan8fe54e42019-10-10 14:12:59 -07001833 deps = [":xnnpack_operators_nhwc_f32"],
Marat Dukhan08c4a432019-10-03 09:29:21 -07001834)
1835
1836########################### Unit tests for operators ###########################
1837
1838xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001839 name = "add_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001840 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001841 "test/add-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001842 "test/add-operator-tester.h",
1843 ],
1844 deps = OPERATOR_TEST_DEPS,
1845)
1846
1847xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001848 name = "argmax_pooling_nhwc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001849 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001850 "test/argmax-pooling-nhwc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001851 "test/argmax-pooling-operator-tester.h",
1852 ] + OPERATOR_TEST_PARAMS_HDRS,
1853 deps = OPERATOR_TEST_DEPS,
1854)
1855
1856xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001857 name = "average_pooling_nhwc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001858 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001859 "test/average-pooling-nhwc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001860 "test/average-pooling-operator-tester.h",
1861 ] + OPERATOR_TEST_PARAMS_HDRS,
1862 deps = OPERATOR_TEST_DEPS,
1863)
1864
1865xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001866 name = "channel_pad_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001867 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001868 "test/channel-pad-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001869 "test/channel-pad-operator-tester.h",
1870 ] + OPERATOR_TEST_PARAMS_HDRS,
1871 deps = OPERATOR_TEST_DEPS,
1872)
1873
1874xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001875 name = "channel_shuffle_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001876 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001877 "test/channel-shuffle-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001878 "test/channel-shuffle-operator-tester.h",
1879 ],
1880 deps = OPERATOR_TEST_DEPS,
1881)
1882
1883xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001884 name = "clamp_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001885 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001886 "test/clamp-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001887 "test/clamp-operator-tester.h",
1888 ],
1889 deps = OPERATOR_TEST_DEPS,
1890)
1891
1892xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001893 name = "convolution_nhwc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001894 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001895 "test/convolution-nhwc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001896 "test/convolution-operator-tester.h",
1897 ],
1898 deps = OPERATOR_TEST_DEPS,
1899)
1900
1901xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001902 name = "convolution_nchw_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001903 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001904 "test/convolution-nchw.cc",
1905 "test/convolution-operator-tester.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001906 ],
1907 deps = OPERATOR_TEST_DEPS,
1908)
1909
1910xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001911 name = "deconvolution_nhwc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001912 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001913 "test/deconvolution-nhwc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001914 "test/deconvolution-operator-tester.h",
1915 ] + OPERATOR_TEST_PARAMS_HDRS,
1916 deps = OPERATOR_TEST_DEPS,
1917)
1918
1919xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001920 name = "fully_connected_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001921 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001922 "test/fully-connected-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001923 "test/fully-connected-operator-tester.h",
1924 ],
1925 deps = OPERATOR_TEST_DEPS,
1926)
1927
1928xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001929 name = "global_average_pooling_nwc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001930 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001931 "test/global-average-pooling-nwc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001932 "test/global-average-pooling-operator-tester.h",
1933 ] + OPERATOR_TEST_PARAMS_HDRS,
1934 deps = OPERATOR_TEST_DEPS,
1935)
1936
1937xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001938 name = "global_average_pooling_ncw_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001939 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001940 "test/global-average-pooling-ncw.cc",
1941 "test/global-average-pooling-operator-tester.h",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001942 ],
1943 deps = OPERATOR_TEST_DEPS,
1944)
1945
1946xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001947 name = "hardswish_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001948 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001949 "test/hardswish-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001950 "test/hardswish-operator-tester.h",
1951 ],
1952 deps = OPERATOR_TEST_DEPS,
1953)
1954
1955xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001956 name = "leaky_relu_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001957 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001958 "test/leaky-relu-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001959 "test/leaky-relu-operator-tester.h",
1960 ],
1961 deps = OPERATOR_TEST_DEPS,
1962)
1963
1964xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001965 name = "max_pooling_nhwc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001966 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001967 "test/max-pooling-nhwc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001968 "test/max-pooling-operator-tester.h",
1969 ] + OPERATOR_TEST_PARAMS_HDRS,
1970 deps = OPERATOR_TEST_DEPS,
1971)
1972
1973xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001974 name = "multiply_nd_test",
Marat Dukhanca2733c2019-11-15 23:21:17 -08001975 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001976 "test/multiply-nd.cc",
Marat Dukhanca2733c2019-11-15 23:21:17 -08001977 "test/multiply-operator-tester.h",
1978 ],
1979 deps = OPERATOR_TEST_DEPS,
1980)
1981
1982xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001983 name = "prelu_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001984 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001985 "test/prelu-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07001986 "test/prelu-operator-tester.h",
1987 ] + OPERATOR_TEST_PARAMS_HDRS,
1988 deps = OPERATOR_TEST_DEPS,
1989)
1990
1991xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08001992 name = "resize_bilinear_nhwc_test",
Marat Dukhan69722492019-11-11 19:55:50 -08001993 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08001994 "test/resize-bilinear-nhwc.cc",
Marat Dukhan69722492019-11-11 19:55:50 -08001995 "test/resize-bilinear-operator-tester.h",
1996 ] + OPERATOR_TEST_PARAMS_HDRS,
1997 deps = OPERATOR_TEST_DEPS,
1998)
1999
2000xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08002001 name = "sigmoid_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002002 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08002003 "test/sigmoid-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002004 "test/sigmoid-operator-tester.h",
2005 ],
2006 deps = OPERATOR_TEST_DEPS,
2007)
2008
2009xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08002010 name = "softargmax_nc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002011 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08002012 "test/softargmax-nc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002013 "test/softargmax-operator-tester.h",
2014 ],
2015 deps = OPERATOR_TEST_DEPS,
2016)
2017
2018xnnpack_unit_test(
Marat Dukhanefc47b82019-11-18 09:25:38 -08002019 name = "unpooling_nhwc_test",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002020 srcs = [
Marat Dukhanefc47b82019-11-18 09:25:38 -08002021 "test/unpooling-nhwc.cc",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002022 "test/unpooling-operator-tester.h",
2023 ],
2024 deps = OPERATOR_TEST_DEPS,
2025)
2026
2027############################# Build configurations #############################
2028
Marat Dukhanb8642352019-10-30 15:43:02 -07002029# Enables usage of assembly kernels.
Marat Dukhan08c4a432019-10-03 09:29:21 -07002030config_setting(
Marat Dukhanb8642352019-10-30 15:43:02 -07002031 name = "xnn_enable_assembly_explicit_true",
2032 define_values = {"xnn_enable_assembly": "true"},
2033)
2034
2035# Disables usage of assembly kernels.
2036config_setting(
2037 name = "xnn_enable_assembly_explicit_false",
2038 define_values = {"xnn_enable_assembly": "false"},
2039)
2040
2041# Builds with -c dbg
2042config_setting(
2043 name = "debug_build",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002044 values = {
Marat Dukhanb8642352019-10-30 15:43:02 -07002045 "compilation_mode": "dbg",
2046 },
2047)
2048
2049# Builds with -c opt
2050config_setting(
2051 name = "optimized_build",
2052 values = {
2053 "compilation_mode": "opt",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002054 },
2055)
2056
2057config_setting(
Marat Dukhanb8642352019-10-30 15:43:02 -07002058 name = "linux_k8",
2059 values = {"cpu": "k8"},
2060)
2061
2062config_setting(
Marat Dukhan4e45e662019-10-03 15:40:24 -07002063 name = "linux_aarch64",
Marat Dukhanb8642352019-10-30 15:43:02 -07002064 values = {"cpu": "aarch64"},
Marat Dukhan4e45e662019-10-03 15:40:24 -07002065)
2066
2067config_setting(
Marat Dukhan08c4a432019-10-03 09:29:21 -07002068 name = "android",
2069 values = {"crosstool_top": "//external:android/crosstool"},
2070)
2071
2072config_setting(
2073 name = "android_armv7",
2074 values = {
2075 "crosstool_top": "//external:android/crosstool",
2076 "cpu": "armeabi-v7a",
2077 },
2078)
2079
2080config_setting(
2081 name = "android_arm64",
2082 values = {
2083 "crosstool_top": "//external:android/crosstool",
2084 "cpu": "arm64-v8a",
2085 },
2086)
2087
2088config_setting(
2089 name = "android_x86",
2090 values = {
2091 "crosstool_top": "//external:android/crosstool",
2092 "cpu": "x86",
2093 },
2094)
2095
2096config_setting(
2097 name = "android_x86_64",
2098 values = {
2099 "crosstool_top": "//external:android/crosstool",
2100 "cpu": "x86_64",
2101 },
2102)
2103
2104config_setting(
Marat Dukhan885ca242019-10-07 09:17:32 -07002105 name = "macos_x86_64",
2106 values = {
2107 "apple_platform_type": "macos",
2108 "cpu": "darwin",
2109 },
2110)
2111
2112config_setting(
Marat Dukhan08c4a432019-10-03 09:29:21 -07002113 name = "emscripten",
Marat Dukhan1a729ec2019-10-07 09:31:44 -07002114 values = {"crosstool_top": "//toolchain:emscripten"},
Marat Dukhan08c4a432019-10-03 09:29:21 -07002115)
2116
2117config_setting(
2118 name = "emscripten_wasm",
2119 values = {
Marat Dukhan1a729ec2019-10-07 09:31:44 -07002120 "crosstool_top": "//toolchain:emscripten",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002121 "cpu": "wasm",
2122 },
2123)
2124
2125config_setting(
2126 name = "emscripten_wasmsimd",
2127 values = {
Marat Dukhan1a729ec2019-10-07 09:31:44 -07002128 "crosstool_top": "//toolchain:emscripten",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002129 "cpu": "wasm",
Marat Dukhan8c19e3c2019-10-30 12:14:58 -07002130 "features": "wasm_simd",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002131 },
2132)
2133
2134config_setting(
2135 name = "emscripten_asmjs",
2136 values = {
Marat Dukhan1a729ec2019-10-07 09:31:44 -07002137 "crosstool_top": "//toolchain:emscripten",
Marat Dukhan08c4a432019-10-03 09:29:21 -07002138 "cpu": "asmjs",
2139 },
2140)