xref: /aosp_15_r20/external/XNNPACK/bench/convolution.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker // Copyright (c) Facebook, Inc. and its affiliates.
2*4bdc9457SAndroid Build Coastguard Worker // All rights reserved.
3*4bdc9457SAndroid Build Coastguard Worker //
4*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
5*4bdc9457SAndroid Build Coastguard Worker //
6*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
7*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
8*4bdc9457SAndroid Build Coastguard Worker 
9*4bdc9457SAndroid Build Coastguard Worker #include <algorithm>
10*4bdc9457SAndroid Build Coastguard Worker #include <cfloat>
11*4bdc9457SAndroid Build Coastguard Worker #include <cmath>
12*4bdc9457SAndroid Build Coastguard Worker #include <functional>
13*4bdc9457SAndroid Build Coastguard Worker #include <limits>
14*4bdc9457SAndroid Build Coastguard Worker #include <ostream>
15*4bdc9457SAndroid Build Coastguard Worker #include <random>
16*4bdc9457SAndroid Build Coastguard Worker #include <string>
17*4bdc9457SAndroid Build Coastguard Worker #include <vector>
18*4bdc9457SAndroid Build Coastguard Worker 
19*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack.h>
20*4bdc9457SAndroid Build Coastguard Worker 
21*4bdc9457SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
22*4bdc9457SAndroid Build Coastguard Worker #include <fp16.h>
23*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_TENSORFLOW_LITE
24*4bdc9457SAndroid Build Coastguard Worker #include "flatbuffers/include/flatbuffers/flatbuffers.h"
25*4bdc9457SAndroid Build Coastguard Worker #include "tensorflow/lite/interpreter.h"
26*4bdc9457SAndroid Build Coastguard Worker #include "tensorflow/lite/kernels/register.h"
27*4bdc9457SAndroid Build Coastguard Worker #include "tensorflow/lite/model.h"
28*4bdc9457SAndroid Build Coastguard Worker #include "tensorflow/lite/schema/schema_generated.h"
29*4bdc9457SAndroid Build Coastguard Worker #include "tensorflow/lite/version.h"
30*4bdc9457SAndroid Build Coastguard Worker #endif  // BENCHMARK_TENSORFLOW_LITE
31*4bdc9457SAndroid Build Coastguard Worker #include "bench/utils.h"
32*4bdc9457SAndroid Build Coastguard Worker 
33*4bdc9457SAndroid Build Coastguard Worker #ifndef XNN_NO_QU8_OPERATORS
xnnpack_convolution_qu8(benchmark::State & state,const char * net)34*4bdc9457SAndroid Build Coastguard Worker void xnnpack_convolution_qu8(benchmark::State& state, const char* net) {
35*4bdc9457SAndroid Build Coastguard Worker   const size_t batch_size = state.range(0);
36*4bdc9457SAndroid Build Coastguard Worker   const size_t input_height = state.range(1);
37*4bdc9457SAndroid Build Coastguard Worker   const size_t input_width = state.range(2);
38*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_height = state.range(3);
39*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_width = state.range(4);
40*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_height = state.range(5);
41*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_width = state.range(6);
42*4bdc9457SAndroid Build Coastguard Worker   const size_t subsampling = state.range(7);
43*4bdc9457SAndroid Build Coastguard Worker   const size_t dilation = state.range(8);
44*4bdc9457SAndroid Build Coastguard Worker   const size_t groups = state.range(9);
45*4bdc9457SAndroid Build Coastguard Worker   const size_t group_input_channels = state.range(10);
46*4bdc9457SAndroid Build Coastguard Worker   const size_t group_output_channels = state.range(11);
47*4bdc9457SAndroid Build Coastguard Worker 
48*4bdc9457SAndroid Build Coastguard Worker   std::random_device random_device;
49*4bdc9457SAndroid Build Coastguard Worker   auto rng = std::mt19937(random_device());
50*4bdc9457SAndroid Build Coastguard Worker   auto i32rng = std::bind(std::uniform_int_distribution<int32_t>(-10000, 10000), std::ref(rng));
51*4bdc9457SAndroid Build Coastguard Worker   auto u8rng = std::bind(std::uniform_int_distribution<uint32_t>(0, std::numeric_limits<uint8_t>::max()), std::ref(rng));
52*4bdc9457SAndroid Build Coastguard Worker 
53*4bdc9457SAndroid Build Coastguard Worker   const size_t output_pixel_stride = groups * group_output_channels;
54*4bdc9457SAndroid Build Coastguard Worker   const size_t input_pixel_stride = groups * group_input_channels;
55*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_height = (kernel_height - 1) * dilation + 1;
56*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_width = (kernel_width - 1) * dilation + 1;
57*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_left = padding_width / 2;
58*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_top = padding_height / 2;
59*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_right = padding_width - padding_left;
60*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_bottom = padding_height - padding_top;
61*4bdc9457SAndroid Build Coastguard Worker   const size_t output_height = (input_height + padding_height - effective_kernel_height) / subsampling + 1;
62*4bdc9457SAndroid Build Coastguard Worker   const size_t output_width = (input_width + padding_width - effective_kernel_width) / subsampling + 1;
63*4bdc9457SAndroid Build Coastguard Worker 
64*4bdc9457SAndroid Build Coastguard Worker   std::vector<uint8_t> input(batch_size * input_height * input_width * input_pixel_stride);
65*4bdc9457SAndroid Build Coastguard Worker   std::generate(input.begin(), input.end(), std::ref(u8rng));
66*4bdc9457SAndroid Build Coastguard Worker   std::vector<uint8_t> kernel(groups * group_output_channels * kernel_height * kernel_width * group_input_channels);
67*4bdc9457SAndroid Build Coastguard Worker   std::generate(kernel.begin(), kernel.end(), std::ref(u8rng));
68*4bdc9457SAndroid Build Coastguard Worker   std::vector<int32_t> bias(groups * group_output_channels);
69*4bdc9457SAndroid Build Coastguard Worker   std::generate(bias.begin(), bias.end(), std::ref(i32rng));
70*4bdc9457SAndroid Build Coastguard Worker   const size_t output_elements = batch_size * output_height * output_width * output_pixel_stride;
71*4bdc9457SAndroid Build Coastguard Worker 
72*4bdc9457SAndroid Build Coastguard Worker   xnn_status status = xnn_initialize(nullptr /* allocator */);
73*4bdc9457SAndroid Build Coastguard Worker   if (status != xnn_status_success) {
74*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to initialize XNNPACK");
75*4bdc9457SAndroid Build Coastguard Worker     return;
76*4bdc9457SAndroid Build Coastguard Worker   }
77*4bdc9457SAndroid Build Coastguard Worker 
78*4bdc9457SAndroid Build Coastguard Worker   const size_t num_buffers = 1 +
79*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::DivideRoundUp<size_t>(benchmark::utils::GetMaxCacheSize(),
80*4bdc9457SAndroid Build Coastguard Worker       sizeof(uint8_t) * kernel.size() + sizeof(int32_t) * bias.size() + sizeof(uint8_t) * output_elements);
81*4bdc9457SAndroid Build Coastguard Worker   std::vector<uint8_t> output(output_elements * num_buffers);
82*4bdc9457SAndroid Build Coastguard Worker 
83*4bdc9457SAndroid Build Coastguard Worker   std::vector<xnn_operator_t> convolution_operators(num_buffers);
84*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
85*4bdc9457SAndroid Build Coastguard Worker     status = xnn_create_convolution2d_nhwc_qu8(
86*4bdc9457SAndroid Build Coastguard Worker       padding_top, padding_right, padding_bottom, padding_left,
87*4bdc9457SAndroid Build Coastguard Worker       kernel_height, kernel_width,
88*4bdc9457SAndroid Build Coastguard Worker       subsampling, subsampling,
89*4bdc9457SAndroid Build Coastguard Worker       dilation, dilation,
90*4bdc9457SAndroid Build Coastguard Worker       groups, group_input_channels, group_output_channels,
91*4bdc9457SAndroid Build Coastguard Worker       input_pixel_stride, output_pixel_stride,
92*4bdc9457SAndroid Build Coastguard Worker       127, 0.5f,
93*4bdc9457SAndroid Build Coastguard Worker       127, 0.5f,
94*4bdc9457SAndroid Build Coastguard Worker       kernel.data(), bias.data(),
95*4bdc9457SAndroid Build Coastguard Worker       127, 0.5f, 0, 255,
96*4bdc9457SAndroid Build Coastguard Worker       0 /* flags */, NULL, &convolution_op);
97*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
98*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to create QUINT8 Convolution operator");
99*4bdc9457SAndroid Build Coastguard Worker       return;
100*4bdc9457SAndroid Build Coastguard Worker     }
101*4bdc9457SAndroid Build Coastguard Worker   }
102*4bdc9457SAndroid Build Coastguard Worker 
103*4bdc9457SAndroid Build Coastguard Worker   for (size_t i = 0; i < convolution_operators.size(); i++) {
104*4bdc9457SAndroid Build Coastguard Worker     status = xnn_setup_convolution2d_nhwc_qu8(
105*4bdc9457SAndroid Build Coastguard Worker       convolution_operators[i],
106*4bdc9457SAndroid Build Coastguard Worker       batch_size, input_height, input_width,
107*4bdc9457SAndroid Build Coastguard Worker       input.data(), output.data() + i * output_elements,
108*4bdc9457SAndroid Build Coastguard Worker       nullptr /* thread pool */);
109*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
110*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to setup QUINT8 Convolution operator");
111*4bdc9457SAndroid Build Coastguard Worker       return;
112*4bdc9457SAndroid Build Coastguard Worker     }
113*4bdc9457SAndroid Build Coastguard Worker   }
114*4bdc9457SAndroid Build Coastguard Worker 
115*4bdc9457SAndroid Build Coastguard Worker   size_t buffer_index = 0;
116*4bdc9457SAndroid Build Coastguard Worker   for (auto _ : state) {
117*4bdc9457SAndroid Build Coastguard Worker     state.PauseTiming();
118*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::PrefetchToL1(input.data(), input.size() * sizeof(uint8_t));
119*4bdc9457SAndroid Build Coastguard Worker     buffer_index = (buffer_index + 1) % num_buffers;
120*4bdc9457SAndroid Build Coastguard Worker     state.ResumeTiming();
121*4bdc9457SAndroid Build Coastguard Worker 
122*4bdc9457SAndroid Build Coastguard Worker     status = xnn_run_operator(convolution_operators[buffer_index],
123*4bdc9457SAndroid Build Coastguard Worker       nullptr /* thread pool */);
124*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
125*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to run QUINT8 Convolution operator");
126*4bdc9457SAndroid Build Coastguard Worker       return;
127*4bdc9457SAndroid Build Coastguard Worker     }
128*4bdc9457SAndroid Build Coastguard Worker   }
129*4bdc9457SAndroid Build Coastguard Worker 
130*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
131*4bdc9457SAndroid Build Coastguard Worker     status = xnn_delete_operator(convolution_op);
132*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
133*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to delete QUINT8 Convolution operator");
134*4bdc9457SAndroid Build Coastguard Worker       return;
135*4bdc9457SAndroid Build Coastguard Worker     }
136*4bdc9457SAndroid Build Coastguard Worker     convolution_op = nullptr;
137*4bdc9457SAndroid Build Coastguard Worker   }
138*4bdc9457SAndroid Build Coastguard Worker 
139*4bdc9457SAndroid Build Coastguard Worker   const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
140*4bdc9457SAndroid Build Coastguard Worker   if (cpu_frequency != 0) {
141*4bdc9457SAndroid Build Coastguard Worker     state.counters["cpufreq"] = cpu_frequency;
142*4bdc9457SAndroid Build Coastguard Worker   }
143*4bdc9457SAndroid Build Coastguard Worker 
144*4bdc9457SAndroid Build Coastguard Worker   state.counters["OPS"] = benchmark::Counter(
145*4bdc9457SAndroid Build Coastguard Worker     uint64_t(state.iterations()) * 2 *
146*4bdc9457SAndroid Build Coastguard Worker       batch_size * output_height * output_width *
147*4bdc9457SAndroid Build Coastguard Worker       groups * group_input_channels * group_output_channels *
148*4bdc9457SAndroid Build Coastguard Worker       kernel_height * kernel_width,
149*4bdc9457SAndroid Build Coastguard Worker     benchmark::Counter::kIsRate);
150*4bdc9457SAndroid Build Coastguard Worker }
151*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_NO_QU8_OPERATORS
152*4bdc9457SAndroid Build Coastguard Worker 
153*4bdc9457SAndroid Build Coastguard Worker #ifndef XNN_NO_QS8_OPERATORS
xnnpack_convolution_qs8(benchmark::State & state,const char * net)154*4bdc9457SAndroid Build Coastguard Worker void xnnpack_convolution_qs8(benchmark::State& state, const char* net) {
155*4bdc9457SAndroid Build Coastguard Worker   const size_t batch_size = state.range(0);
156*4bdc9457SAndroid Build Coastguard Worker   const size_t input_height = state.range(1);
157*4bdc9457SAndroid Build Coastguard Worker   const size_t input_width = state.range(2);
158*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_height = state.range(3);
159*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_width = state.range(4);
160*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_height = state.range(5);
161*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_width = state.range(6);
162*4bdc9457SAndroid Build Coastguard Worker   const size_t subsampling = state.range(7);
163*4bdc9457SAndroid Build Coastguard Worker   const size_t dilation = state.range(8);
164*4bdc9457SAndroid Build Coastguard Worker   const size_t groups = state.range(9);
165*4bdc9457SAndroid Build Coastguard Worker   const size_t group_input_channels = state.range(10);
166*4bdc9457SAndroid Build Coastguard Worker   const size_t group_output_channels = state.range(11);
167*4bdc9457SAndroid Build Coastguard Worker 
168*4bdc9457SAndroid Build Coastguard Worker   std::random_device random_device;
169*4bdc9457SAndroid Build Coastguard Worker   auto rng = std::mt19937(random_device());
170*4bdc9457SAndroid Build Coastguard Worker   auto i32rng = std::bind(std::uniform_int_distribution<int32_t>(-10000, 10000), std::ref(rng));
171*4bdc9457SAndroid Build Coastguard Worker   auto i8rng = std::bind(
172*4bdc9457SAndroid Build Coastguard Worker     std::uniform_int_distribution<int32_t>(std::numeric_limits<int8_t>::min(), std::numeric_limits<int8_t>::max()), std::ref(rng));
173*4bdc9457SAndroid Build Coastguard Worker 
174*4bdc9457SAndroid Build Coastguard Worker   const size_t output_pixel_stride = groups * group_output_channels;
175*4bdc9457SAndroid Build Coastguard Worker   const size_t input_pixel_stride = groups * group_input_channels;
176*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_height = (kernel_height - 1) * dilation + 1;
177*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_width = (kernel_width - 1) * dilation + 1;
178*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_left = padding_width / 2;
179*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_top = padding_height / 2;
180*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_right = padding_width - padding_left;
181*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_bottom = padding_height - padding_top;
182*4bdc9457SAndroid Build Coastguard Worker   const size_t output_height = (input_height + padding_height - effective_kernel_height) / subsampling + 1;
183*4bdc9457SAndroid Build Coastguard Worker   const size_t output_width = (input_width + padding_width - effective_kernel_width) / subsampling + 1;
184*4bdc9457SAndroid Build Coastguard Worker 
185*4bdc9457SAndroid Build Coastguard Worker   std::vector<int8_t> input(batch_size * input_height * input_width * input_pixel_stride);
186*4bdc9457SAndroid Build Coastguard Worker   std::generate(input.begin(), input.end(), std::ref(i8rng));
187*4bdc9457SAndroid Build Coastguard Worker   std::vector<int8_t> kernel(groups * group_output_channels * kernel_height * kernel_width * group_input_channels);
188*4bdc9457SAndroid Build Coastguard Worker   std::generate(kernel.begin(), kernel.end(), std::ref(i8rng));
189*4bdc9457SAndroid Build Coastguard Worker   std::vector<int32_t> bias(groups * group_output_channels);
190*4bdc9457SAndroid Build Coastguard Worker   std::generate(bias.begin(), bias.end(), std::ref(i32rng));
191*4bdc9457SAndroid Build Coastguard Worker   const size_t output_elements = batch_size * output_height * output_width * output_pixel_stride;
192*4bdc9457SAndroid Build Coastguard Worker 
193*4bdc9457SAndroid Build Coastguard Worker   xnn_status status = xnn_initialize(nullptr /* allocator */);
194*4bdc9457SAndroid Build Coastguard Worker   if (status != xnn_status_success) {
195*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to initialize XNNPACK");
196*4bdc9457SAndroid Build Coastguard Worker     return;
197*4bdc9457SAndroid Build Coastguard Worker   }
198*4bdc9457SAndroid Build Coastguard Worker 
199*4bdc9457SAndroid Build Coastguard Worker   const size_t num_buffers = 1 +
200*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::DivideRoundUp<size_t>(benchmark::utils::GetMaxCacheSize(),
201*4bdc9457SAndroid Build Coastguard Worker       sizeof(int8_t) * kernel.size() + sizeof(int32_t) * bias.size() + sizeof(int8_t) * output_elements);
202*4bdc9457SAndroid Build Coastguard Worker   std::vector<int8_t> output(output_elements * num_buffers);
203*4bdc9457SAndroid Build Coastguard Worker 
204*4bdc9457SAndroid Build Coastguard Worker   std::vector<xnn_operator_t> convolution_operators(num_buffers);
205*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
206*4bdc9457SAndroid Build Coastguard Worker     status = xnn_create_convolution2d_nhwc_qs8(
207*4bdc9457SAndroid Build Coastguard Worker       padding_top, padding_right, padding_bottom, padding_left,
208*4bdc9457SAndroid Build Coastguard Worker       kernel_height, kernel_width,
209*4bdc9457SAndroid Build Coastguard Worker       subsampling, subsampling,
210*4bdc9457SAndroid Build Coastguard Worker       dilation, dilation,
211*4bdc9457SAndroid Build Coastguard Worker       groups, group_input_channels, group_output_channels,
212*4bdc9457SAndroid Build Coastguard Worker       input_pixel_stride, output_pixel_stride,
213*4bdc9457SAndroid Build Coastguard Worker       127, 0.5f, 0.5f,
214*4bdc9457SAndroid Build Coastguard Worker       kernel.data(), bias.data(),
215*4bdc9457SAndroid Build Coastguard Worker       127, 0.5f, -128, 127,
216*4bdc9457SAndroid Build Coastguard Worker       0 /* flags */, NULL, &convolution_op);
217*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
218*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to create QINT8 Convolution operator");
219*4bdc9457SAndroid Build Coastguard Worker       return;
220*4bdc9457SAndroid Build Coastguard Worker     }
221*4bdc9457SAndroid Build Coastguard Worker   }
222*4bdc9457SAndroid Build Coastguard Worker 
223*4bdc9457SAndroid Build Coastguard Worker   for (size_t i = 0; i < convolution_operators.size(); i++) {
224*4bdc9457SAndroid Build Coastguard Worker     status = xnn_setup_convolution2d_nhwc_qs8(
225*4bdc9457SAndroid Build Coastguard Worker       convolution_operators[i],
226*4bdc9457SAndroid Build Coastguard Worker       batch_size, input_height, input_width,
227*4bdc9457SAndroid Build Coastguard Worker       input.data(), output.data() + i * output_elements,
228*4bdc9457SAndroid Build Coastguard Worker       nullptr /* thread pool */);
229*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
230*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to setup QINT8 Convolution operator");
231*4bdc9457SAndroid Build Coastguard Worker       return;
232*4bdc9457SAndroid Build Coastguard Worker     }
233*4bdc9457SAndroid Build Coastguard Worker   }
234*4bdc9457SAndroid Build Coastguard Worker 
235*4bdc9457SAndroid Build Coastguard Worker   size_t buffer_index = 0;
236*4bdc9457SAndroid Build Coastguard Worker   for (auto _ : state) {
237*4bdc9457SAndroid Build Coastguard Worker     state.PauseTiming();
238*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::PrefetchToL1(input.data(), input.size() * sizeof(uint8_t));
239*4bdc9457SAndroid Build Coastguard Worker     buffer_index = (buffer_index + 1) % num_buffers;
240*4bdc9457SAndroid Build Coastguard Worker     state.ResumeTiming();
241*4bdc9457SAndroid Build Coastguard Worker 
242*4bdc9457SAndroid Build Coastguard Worker     status = xnn_run_operator(convolution_operators[buffer_index],
243*4bdc9457SAndroid Build Coastguard Worker       nullptr /* thread pool */);
244*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
245*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to run QINT8 Convolution operator");
246*4bdc9457SAndroid Build Coastguard Worker       return;
247*4bdc9457SAndroid Build Coastguard Worker     }
248*4bdc9457SAndroid Build Coastguard Worker   }
249*4bdc9457SAndroid Build Coastguard Worker 
250*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
251*4bdc9457SAndroid Build Coastguard Worker     status = xnn_delete_operator(convolution_op);
252*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
253*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to delete QINT8 Convolution operator");
254*4bdc9457SAndroid Build Coastguard Worker       return;
255*4bdc9457SAndroid Build Coastguard Worker     }
256*4bdc9457SAndroid Build Coastguard Worker     convolution_op = nullptr;
257*4bdc9457SAndroid Build Coastguard Worker   }
258*4bdc9457SAndroid Build Coastguard Worker 
259*4bdc9457SAndroid Build Coastguard Worker   const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
260*4bdc9457SAndroid Build Coastguard Worker   if (cpu_frequency != 0) {
261*4bdc9457SAndroid Build Coastguard Worker     state.counters["cpufreq"] = cpu_frequency;
262*4bdc9457SAndroid Build Coastguard Worker   }
263*4bdc9457SAndroid Build Coastguard Worker 
264*4bdc9457SAndroid Build Coastguard Worker   state.counters["OPS"] = benchmark::Counter(
265*4bdc9457SAndroid Build Coastguard Worker     uint64_t(state.iterations()) * 2 *
266*4bdc9457SAndroid Build Coastguard Worker       batch_size * output_height * output_width *
267*4bdc9457SAndroid Build Coastguard Worker       groups * group_input_channels * group_output_channels *
268*4bdc9457SAndroid Build Coastguard Worker       kernel_height * kernel_width,
269*4bdc9457SAndroid Build Coastguard Worker     benchmark::Counter::kIsRate);
270*4bdc9457SAndroid Build Coastguard Worker }
271*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_NO_QS8_OPERATORS
272*4bdc9457SAndroid Build Coastguard Worker 
273*4bdc9457SAndroid Build Coastguard Worker #ifndef XNN_NO_F16_OPERATORS
xnnpack_convolution_f16(benchmark::State & state,const char * net)274*4bdc9457SAndroid Build Coastguard Worker void xnnpack_convolution_f16(benchmark::State& state, const char* net) {
275*4bdc9457SAndroid Build Coastguard Worker   if (!benchmark::utils::CheckNEONFP16ARITH(state)) {
276*4bdc9457SAndroid Build Coastguard Worker     return;
277*4bdc9457SAndroid Build Coastguard Worker   }
278*4bdc9457SAndroid Build Coastguard Worker   const size_t batch_size = state.range(0);
279*4bdc9457SAndroid Build Coastguard Worker   const size_t input_height = state.range(1);
280*4bdc9457SAndroid Build Coastguard Worker   const size_t input_width = state.range(2);
281*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_height = state.range(3);
282*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_width = state.range(4);
283*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_height = state.range(5);
284*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_width = state.range(6);
285*4bdc9457SAndroid Build Coastguard Worker   const size_t subsampling = state.range(7);
286*4bdc9457SAndroid Build Coastguard Worker   const size_t dilation = state.range(8);
287*4bdc9457SAndroid Build Coastguard Worker   const size_t groups = state.range(9);
288*4bdc9457SAndroid Build Coastguard Worker   const size_t group_input_channels = state.range(10);
289*4bdc9457SAndroid Build Coastguard Worker   const size_t group_output_channels = state.range(11);
290*4bdc9457SAndroid Build Coastguard Worker 
291*4bdc9457SAndroid Build Coastguard Worker   std::random_device random_device;
292*4bdc9457SAndroid Build Coastguard Worker   auto rng = std::mt19937(random_device());
293*4bdc9457SAndroid Build Coastguard Worker   auto f32rng = std::bind(std::uniform_real_distribution<float>(0.1f, 1.0f), std::ref(rng));
294*4bdc9457SAndroid Build Coastguard Worker   auto f16rng = std::bind(fp16_ieee_from_fp32_value, f32rng);
295*4bdc9457SAndroid Build Coastguard Worker 
296*4bdc9457SAndroid Build Coastguard Worker   const size_t output_pixel_stride = groups * group_output_channels;
297*4bdc9457SAndroid Build Coastguard Worker   const size_t input_pixel_stride = groups * group_input_channels;
298*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_height = (kernel_height - 1) * dilation + 1;
299*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_width = (kernel_width - 1) * dilation + 1;
300*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_left = padding_width / 2;
301*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_top = padding_height / 2;
302*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_right = padding_width - padding_left;
303*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_bottom = padding_height - padding_top;
304*4bdc9457SAndroid Build Coastguard Worker   const size_t output_height = (input_height + padding_height - effective_kernel_height) / subsampling + 1;
305*4bdc9457SAndroid Build Coastguard Worker   const size_t output_width = (input_width + padding_width - effective_kernel_width) / subsampling + 1;
306*4bdc9457SAndroid Build Coastguard Worker 
307*4bdc9457SAndroid Build Coastguard Worker   std::vector<uint16_t> input(batch_size * input_height * input_width * input_pixel_stride + XNN_EXTRA_BYTES / sizeof(uint16_t));
308*4bdc9457SAndroid Build Coastguard Worker   std::generate(input.begin(), input.end(), std::ref(f16rng));
309*4bdc9457SAndroid Build Coastguard Worker   std::vector<uint16_t> kernel(groups * group_output_channels * kernel_height * kernel_width * group_input_channels);
310*4bdc9457SAndroid Build Coastguard Worker   std::generate(kernel.begin(), kernel.end(), std::ref(f16rng));
311*4bdc9457SAndroid Build Coastguard Worker   std::vector<uint16_t> bias(groups * group_output_channels);
312*4bdc9457SAndroid Build Coastguard Worker   std::generate(bias.begin(), bias.end(), std::ref(f16rng));
313*4bdc9457SAndroid Build Coastguard Worker   const size_t output_elements = batch_size * output_height * output_width * output_pixel_stride;
314*4bdc9457SAndroid Build Coastguard Worker 
315*4bdc9457SAndroid Build Coastguard Worker   xnn_status status = xnn_initialize(nullptr /* allocator */);
316*4bdc9457SAndroid Build Coastguard Worker   if (status != xnn_status_success) {
317*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to initialize XNNPACK");
318*4bdc9457SAndroid Build Coastguard Worker     return;
319*4bdc9457SAndroid Build Coastguard Worker   }
320*4bdc9457SAndroid Build Coastguard Worker 
321*4bdc9457SAndroid Build Coastguard Worker   const size_t num_buffers = 1 +
322*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::DivideRoundUp<size_t>(benchmark::utils::GetMaxCacheSize(),
323*4bdc9457SAndroid Build Coastguard Worker       sizeof(uint16_t) * (kernel.size() + bias.size() + output_elements));
324*4bdc9457SAndroid Build Coastguard Worker   std::vector<uint16_t> output(output_elements * num_buffers);
325*4bdc9457SAndroid Build Coastguard Worker 
326*4bdc9457SAndroid Build Coastguard Worker   std::vector<xnn_operator_t> convolution_operators(num_buffers);
327*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
328*4bdc9457SAndroid Build Coastguard Worker     status = xnn_create_convolution2d_nhwc_f16(
329*4bdc9457SAndroid Build Coastguard Worker       padding_top, padding_right, padding_bottom, padding_left,
330*4bdc9457SAndroid Build Coastguard Worker       kernel_height, kernel_width,
331*4bdc9457SAndroid Build Coastguard Worker       subsampling, subsampling,
332*4bdc9457SAndroid Build Coastguard Worker       dilation, dilation,
333*4bdc9457SAndroid Build Coastguard Worker       groups, group_input_channels, group_output_channels,
334*4bdc9457SAndroid Build Coastguard Worker       input_pixel_stride, output_pixel_stride,
335*4bdc9457SAndroid Build Coastguard Worker       kernel.data(), bias.data(),
336*4bdc9457SAndroid Build Coastguard Worker       -std::numeric_limits<float>::infinity(), +std::numeric_limits<float>::infinity(),
337*4bdc9457SAndroid Build Coastguard Worker       0 /* flags */, NULL, &convolution_op);
338*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
339*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to create FP16 Convolution operator");
340*4bdc9457SAndroid Build Coastguard Worker       return;
341*4bdc9457SAndroid Build Coastguard Worker     }
342*4bdc9457SAndroid Build Coastguard Worker   }
343*4bdc9457SAndroid Build Coastguard Worker 
344*4bdc9457SAndroid Build Coastguard Worker   for (size_t i = 0; i < convolution_operators.size(); i++) {
345*4bdc9457SAndroid Build Coastguard Worker     status = xnn_setup_convolution2d_nhwc_f16(
346*4bdc9457SAndroid Build Coastguard Worker       convolution_operators[i],
347*4bdc9457SAndroid Build Coastguard Worker       batch_size, input_height, input_width,
348*4bdc9457SAndroid Build Coastguard Worker       input.data(), output.data() + i * output_elements,
349*4bdc9457SAndroid Build Coastguard Worker       nullptr /* thread pool */);
350*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
351*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to setup FP16 Convolution operator");
352*4bdc9457SAndroid Build Coastguard Worker       return;
353*4bdc9457SAndroid Build Coastguard Worker     }
354*4bdc9457SAndroid Build Coastguard Worker   }
355*4bdc9457SAndroid Build Coastguard Worker 
356*4bdc9457SAndroid Build Coastguard Worker   size_t buffer_index = 0;
357*4bdc9457SAndroid Build Coastguard Worker   for (auto _ : state) {
358*4bdc9457SAndroid Build Coastguard Worker     state.PauseTiming();
359*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::PrefetchToL1(input.data(), input.size() * sizeof(uint16_t));
360*4bdc9457SAndroid Build Coastguard Worker     buffer_index = (buffer_index + 1) % num_buffers;
361*4bdc9457SAndroid Build Coastguard Worker     state.ResumeTiming();
362*4bdc9457SAndroid Build Coastguard Worker 
363*4bdc9457SAndroid Build Coastguard Worker     status = xnn_run_operator(convolution_operators[buffer_index], nullptr /* thread pool */);
364*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
365*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to run FP16 Convolution operator");
366*4bdc9457SAndroid Build Coastguard Worker       return;
367*4bdc9457SAndroid Build Coastguard Worker     }
368*4bdc9457SAndroid Build Coastguard Worker   }
369*4bdc9457SAndroid Build Coastguard Worker 
370*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
371*4bdc9457SAndroid Build Coastguard Worker     status = xnn_delete_operator(convolution_op);
372*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
373*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to delete FP16 Convolution operator");
374*4bdc9457SAndroid Build Coastguard Worker       return;
375*4bdc9457SAndroid Build Coastguard Worker     }
376*4bdc9457SAndroid Build Coastguard Worker     convolution_op = nullptr;
377*4bdc9457SAndroid Build Coastguard Worker   }
378*4bdc9457SAndroid Build Coastguard Worker 
379*4bdc9457SAndroid Build Coastguard Worker   const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
380*4bdc9457SAndroid Build Coastguard Worker   if (cpu_frequency != 0) {
381*4bdc9457SAndroid Build Coastguard Worker     state.counters["cpufreq"] = cpu_frequency;
382*4bdc9457SAndroid Build Coastguard Worker   }
383*4bdc9457SAndroid Build Coastguard Worker 
384*4bdc9457SAndroid Build Coastguard Worker   state.counters["FLOPS"] = benchmark::Counter(
385*4bdc9457SAndroid Build Coastguard Worker     uint64_t(state.iterations()) * 2 *
386*4bdc9457SAndroid Build Coastguard Worker       batch_size * output_height * output_width *
387*4bdc9457SAndroid Build Coastguard Worker       groups * group_input_channels * group_output_channels *
388*4bdc9457SAndroid Build Coastguard Worker       kernel_height * kernel_width,
389*4bdc9457SAndroid Build Coastguard Worker     benchmark::Counter::kIsRate);
390*4bdc9457SAndroid Build Coastguard Worker }
391*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_NO_F16_OPERATORS
392*4bdc9457SAndroid Build Coastguard Worker 
xnnpack_convolution_f32(benchmark::State & state,const char * net)393*4bdc9457SAndroid Build Coastguard Worker void xnnpack_convolution_f32(benchmark::State& state, const char* net) {
394*4bdc9457SAndroid Build Coastguard Worker   const size_t batch_size = state.range(0);
395*4bdc9457SAndroid Build Coastguard Worker   const size_t input_height = state.range(1);
396*4bdc9457SAndroid Build Coastguard Worker   const size_t input_width = state.range(2);
397*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_height = state.range(3);
398*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_width = state.range(4);
399*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_height = state.range(5);
400*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_width = state.range(6);
401*4bdc9457SAndroid Build Coastguard Worker   const size_t subsampling = state.range(7);
402*4bdc9457SAndroid Build Coastguard Worker   const size_t dilation = state.range(8);
403*4bdc9457SAndroid Build Coastguard Worker   const size_t groups = state.range(9);
404*4bdc9457SAndroid Build Coastguard Worker   const size_t group_input_channels = state.range(10);
405*4bdc9457SAndroid Build Coastguard Worker   const size_t group_output_channels = state.range(11);
406*4bdc9457SAndroid Build Coastguard Worker 
407*4bdc9457SAndroid Build Coastguard Worker   std::random_device random_device;
408*4bdc9457SAndroid Build Coastguard Worker   auto rng = std::mt19937(random_device());
409*4bdc9457SAndroid Build Coastguard Worker   auto f32rng = std::bind(std::uniform_real_distribution<float>(0.0f, 1.0f), std::ref(rng));
410*4bdc9457SAndroid Build Coastguard Worker 
411*4bdc9457SAndroid Build Coastguard Worker   const size_t output_pixel_stride = groups * group_output_channels;
412*4bdc9457SAndroid Build Coastguard Worker   const size_t input_pixel_stride = groups * group_input_channels;
413*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_height = (kernel_height - 1) * dilation + 1;
414*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_width = (kernel_width - 1) * dilation + 1;
415*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_left = padding_width / 2;
416*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_top = padding_height / 2;
417*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_right = padding_width - padding_left;
418*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_bottom = padding_height - padding_top;
419*4bdc9457SAndroid Build Coastguard Worker   const size_t output_height = (input_height + padding_height - effective_kernel_height) / subsampling + 1;
420*4bdc9457SAndroid Build Coastguard Worker   const size_t output_width = (input_width + padding_width - effective_kernel_width) / subsampling + 1;
421*4bdc9457SAndroid Build Coastguard Worker 
422*4bdc9457SAndroid Build Coastguard Worker   std::vector<float> input(batch_size * input_height * input_width * input_pixel_stride + XNN_EXTRA_BYTES / sizeof(float));
423*4bdc9457SAndroid Build Coastguard Worker   std::generate(input.begin(), input.end(), std::ref(f32rng));
424*4bdc9457SAndroid Build Coastguard Worker   std::vector<float> kernel(groups * group_output_channels * kernel_height * kernel_width * group_input_channels);
425*4bdc9457SAndroid Build Coastguard Worker   std::generate(kernel.begin(), kernel.end(), std::ref(f32rng));
426*4bdc9457SAndroid Build Coastguard Worker   std::vector<float> bias(groups * group_output_channels);
427*4bdc9457SAndroid Build Coastguard Worker   std::generate(bias.begin(), bias.end(), std::ref(f32rng));
428*4bdc9457SAndroid Build Coastguard Worker   const size_t output_elements = batch_size * output_height * output_width * output_pixel_stride;
429*4bdc9457SAndroid Build Coastguard Worker 
430*4bdc9457SAndroid Build Coastguard Worker   xnn_status status = xnn_initialize(nullptr /* allocator */);
431*4bdc9457SAndroid Build Coastguard Worker   if (status != xnn_status_success) {
432*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to initialize XNNPACK");
433*4bdc9457SAndroid Build Coastguard Worker     return;
434*4bdc9457SAndroid Build Coastguard Worker   }
435*4bdc9457SAndroid Build Coastguard Worker 
436*4bdc9457SAndroid Build Coastguard Worker   const size_t num_buffers = 1 +
437*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::DivideRoundUp<size_t>(benchmark::utils::GetMaxCacheSize(),
438*4bdc9457SAndroid Build Coastguard Worker       sizeof(float) * (kernel.size() + bias.size() + output_elements));
439*4bdc9457SAndroid Build Coastguard Worker   std::vector<float> output(output_elements * num_buffers);
440*4bdc9457SAndroid Build Coastguard Worker 
441*4bdc9457SAndroid Build Coastguard Worker   std::vector<xnn_operator_t> convolution_operators(num_buffers);
442*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
443*4bdc9457SAndroid Build Coastguard Worker     status = xnn_create_convolution2d_nhwc_f32(
444*4bdc9457SAndroid Build Coastguard Worker       padding_top, padding_right, padding_bottom, padding_left,
445*4bdc9457SAndroid Build Coastguard Worker       kernel_height, kernel_width,
446*4bdc9457SAndroid Build Coastguard Worker       subsampling, subsampling,
447*4bdc9457SAndroid Build Coastguard Worker       dilation, dilation,
448*4bdc9457SAndroid Build Coastguard Worker       groups, group_input_channels, group_output_channels,
449*4bdc9457SAndroid Build Coastguard Worker       input_pixel_stride, output_pixel_stride,
450*4bdc9457SAndroid Build Coastguard Worker       kernel.data(), bias.data(),
451*4bdc9457SAndroid Build Coastguard Worker       -std::numeric_limits<float>::infinity(), +std::numeric_limits<float>::infinity(),
452*4bdc9457SAndroid Build Coastguard Worker       0 /* flags */, NULL, &convolution_op);
453*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
454*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to create FP32 Convolution operator");
455*4bdc9457SAndroid Build Coastguard Worker       return;
456*4bdc9457SAndroid Build Coastguard Worker     }
457*4bdc9457SAndroid Build Coastguard Worker   }
458*4bdc9457SAndroid Build Coastguard Worker 
459*4bdc9457SAndroid Build Coastguard Worker   for (size_t i = 0; i < convolution_operators.size(); i++) {
460*4bdc9457SAndroid Build Coastguard Worker     status = xnn_setup_convolution2d_nhwc_f32(
461*4bdc9457SAndroid Build Coastguard Worker       convolution_operators[i],
462*4bdc9457SAndroid Build Coastguard Worker       batch_size, input_height, input_width,
463*4bdc9457SAndroid Build Coastguard Worker       input.data(), output.data() + i * output_elements,
464*4bdc9457SAndroid Build Coastguard Worker       nullptr /* thread pool */);
465*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
466*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to setup FP32 Convolution operator");
467*4bdc9457SAndroid Build Coastguard Worker       return;
468*4bdc9457SAndroid Build Coastguard Worker     }
469*4bdc9457SAndroid Build Coastguard Worker   }
470*4bdc9457SAndroid Build Coastguard Worker 
471*4bdc9457SAndroid Build Coastguard Worker   size_t buffer_index = 0;
472*4bdc9457SAndroid Build Coastguard Worker   for (auto _ : state) {
473*4bdc9457SAndroid Build Coastguard Worker     state.PauseTiming();
474*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::PrefetchToL1(input.data(), input.size() * sizeof(float));
475*4bdc9457SAndroid Build Coastguard Worker     buffer_index = (buffer_index + 1) % num_buffers;
476*4bdc9457SAndroid Build Coastguard Worker     state.ResumeTiming();
477*4bdc9457SAndroid Build Coastguard Worker 
478*4bdc9457SAndroid Build Coastguard Worker     status = xnn_run_operator(convolution_operators[buffer_index], nullptr /* thread pool */);
479*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
480*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to run FP32 Convolution operator");
481*4bdc9457SAndroid Build Coastguard Worker       return;
482*4bdc9457SAndroid Build Coastguard Worker     }
483*4bdc9457SAndroid Build Coastguard Worker   }
484*4bdc9457SAndroid Build Coastguard Worker 
485*4bdc9457SAndroid Build Coastguard Worker   for (xnn_operator_t& convolution_op : convolution_operators) {
486*4bdc9457SAndroid Build Coastguard Worker     status = xnn_delete_operator(convolution_op);
487*4bdc9457SAndroid Build Coastguard Worker     if (status != xnn_status_success) {
488*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to delete FP32 Convolution operator");
489*4bdc9457SAndroid Build Coastguard Worker       return;
490*4bdc9457SAndroid Build Coastguard Worker     }
491*4bdc9457SAndroid Build Coastguard Worker     convolution_op = nullptr;
492*4bdc9457SAndroid Build Coastguard Worker   }
493*4bdc9457SAndroid Build Coastguard Worker 
494*4bdc9457SAndroid Build Coastguard Worker   const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
495*4bdc9457SAndroid Build Coastguard Worker   if (cpu_frequency != 0) {
496*4bdc9457SAndroid Build Coastguard Worker     state.counters["cpufreq"] = cpu_frequency;
497*4bdc9457SAndroid Build Coastguard Worker   }
498*4bdc9457SAndroid Build Coastguard Worker 
499*4bdc9457SAndroid Build Coastguard Worker   state.counters["FLOPS"] = benchmark::Counter(
500*4bdc9457SAndroid Build Coastguard Worker     uint64_t(state.iterations()) * 2 *
501*4bdc9457SAndroid Build Coastguard Worker       batch_size * output_height * output_width *
502*4bdc9457SAndroid Build Coastguard Worker       groups * group_input_channels * group_output_channels *
503*4bdc9457SAndroid Build Coastguard Worker       kernel_height * kernel_width,
504*4bdc9457SAndroid Build Coastguard Worker     benchmark::Counter::kIsRate);
505*4bdc9457SAndroid Build Coastguard Worker }
506*4bdc9457SAndroid Build Coastguard Worker 
507*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_TENSORFLOW_LITE
tflite_convolution_f32(benchmark::State & state,const char * net)508*4bdc9457SAndroid Build Coastguard Worker void tflite_convolution_f32(benchmark::State& state, const char* net) {
509*4bdc9457SAndroid Build Coastguard Worker   const size_t batch_size = state.range(0);
510*4bdc9457SAndroid Build Coastguard Worker   const size_t input_height = state.range(1);
511*4bdc9457SAndroid Build Coastguard Worker   const size_t input_width = state.range(2);
512*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_height = state.range(3);
513*4bdc9457SAndroid Build Coastguard Worker   const size_t kernel_width = state.range(4);
514*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_height = state.range(5);
515*4bdc9457SAndroid Build Coastguard Worker   const size_t padding_width = state.range(6);
516*4bdc9457SAndroid Build Coastguard Worker   const size_t subsampling = state.range(7);
517*4bdc9457SAndroid Build Coastguard Worker   const size_t dilation = state.range(8);
518*4bdc9457SAndroid Build Coastguard Worker   const size_t groups = state.range(9);
519*4bdc9457SAndroid Build Coastguard Worker   const size_t group_input_channels = state.range(10);
520*4bdc9457SAndroid Build Coastguard Worker   const size_t group_output_channels = state.range(11);
521*4bdc9457SAndroid Build Coastguard Worker 
522*4bdc9457SAndroid Build Coastguard Worker   bool is_depthwise = false;
523*4bdc9457SAndroid Build Coastguard Worker   if (groups != 1) {
524*4bdc9457SAndroid Build Coastguard Worker     if (group_input_channels == 1) {
525*4bdc9457SAndroid Build Coastguard Worker       is_depthwise = true;
526*4bdc9457SAndroid Build Coastguard Worker     } else {
527*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("grouped convolution is not supported");
528*4bdc9457SAndroid Build Coastguard Worker       return;
529*4bdc9457SAndroid Build Coastguard Worker     }
530*4bdc9457SAndroid Build Coastguard Worker   }
531*4bdc9457SAndroid Build Coastguard Worker 
532*4bdc9457SAndroid Build Coastguard Worker   std::random_device random_device;
533*4bdc9457SAndroid Build Coastguard Worker   auto rng = std::mt19937(random_device());
534*4bdc9457SAndroid Build Coastguard Worker   auto f32rng = std::bind(std::uniform_real_distribution<float>(0.0f, 1.0f), std::ref(rng));
535*4bdc9457SAndroid Build Coastguard Worker 
536*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_height = (kernel_height - 1) * dilation + 1;
537*4bdc9457SAndroid Build Coastguard Worker   const size_t effective_kernel_width = (kernel_width - 1) * dilation + 1;
538*4bdc9457SAndroid Build Coastguard Worker 
539*4bdc9457SAndroid Build Coastguard Worker   tflite::Padding padding = tflite::Padding_VALID;
540*4bdc9457SAndroid Build Coastguard Worker   if (padding_width == (effective_kernel_width - 1) && padding_height == (effective_kernel_height - 1)) {
541*4bdc9457SAndroid Build Coastguard Worker     padding = tflite::Padding_SAME;
542*4bdc9457SAndroid Build Coastguard Worker   } else if (padding_width == 0 && padding_height == 0) {
543*4bdc9457SAndroid Build Coastguard Worker     padding = tflite::Padding_VALID;
544*4bdc9457SAndroid Build Coastguard Worker   } else {
545*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("unsupported padding");
546*4bdc9457SAndroid Build Coastguard Worker     return;
547*4bdc9457SAndroid Build Coastguard Worker   }
548*4bdc9457SAndroid Build Coastguard Worker 
549*4bdc9457SAndroid Build Coastguard Worker   const size_t output_height = (input_height + padding_height - effective_kernel_height) / subsampling + 1;
550*4bdc9457SAndroid Build Coastguard Worker   const size_t output_width = (input_width + padding_width - effective_kernel_width) / subsampling + 1;
551*4bdc9457SAndroid Build Coastguard Worker 
552*4bdc9457SAndroid Build Coastguard Worker   std::vector<float> kernel(groups * group_output_channels * kernel_height * kernel_width * group_input_channels);
553*4bdc9457SAndroid Build Coastguard Worker   std::generate(kernel.begin(), kernel.end(), std::ref(f32rng));
554*4bdc9457SAndroid Build Coastguard Worker   std::vector<float> bias(groups * group_output_channels);
555*4bdc9457SAndroid Build Coastguard Worker   std::generate(bias.begin(), bias.end(), std::ref(f32rng));
556*4bdc9457SAndroid Build Coastguard Worker 
557*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::FlatBufferBuilder builder;
558*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::OperatorCode> operator_code =
559*4bdc9457SAndroid Build Coastguard Worker       CreateOperatorCode(
560*4bdc9457SAndroid Build Coastguard Worker         builder,
561*4bdc9457SAndroid Build Coastguard Worker         is_depthwise ? tflite::BuiltinOperator_DEPTHWISE_CONV_2D : tflite::BuiltinOperator_CONV_2D,
562*4bdc9457SAndroid Build Coastguard Worker         0);
563*4bdc9457SAndroid Build Coastguard Worker 
564*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::Conv2DOptions> conv2d_options = CreateConv2DOptions(
565*4bdc9457SAndroid Build Coastguard Worker       builder,
566*4bdc9457SAndroid Build Coastguard Worker       padding,
567*4bdc9457SAndroid Build Coastguard Worker       static_cast<int32_t>(subsampling), static_cast<int32_t>(subsampling),
568*4bdc9457SAndroid Build Coastguard Worker       tflite::ActivationFunctionType_NONE,
569*4bdc9457SAndroid Build Coastguard Worker       static_cast<int32_t>(dilation), static_cast<int32_t>(dilation));
570*4bdc9457SAndroid Build Coastguard Worker 
571*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::DepthwiseConv2DOptions> dwconv2d_options = CreateDepthwiseConv2DOptions(
572*4bdc9457SAndroid Build Coastguard Worker       builder,
573*4bdc9457SAndroid Build Coastguard Worker       padding,
574*4bdc9457SAndroid Build Coastguard Worker       static_cast<int32_t>(subsampling), static_cast<int32_t>(subsampling),
575*4bdc9457SAndroid Build Coastguard Worker       static_cast<int32_t>(group_output_channels),
576*4bdc9457SAndroid Build Coastguard Worker       tflite::ActivationFunctionType_NONE,
577*4bdc9457SAndroid Build Coastguard Worker       static_cast<int32_t>(dilation), static_cast<int32_t>(dilation));
578*4bdc9457SAndroid Build Coastguard Worker 
579*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::Buffer> buffers[3] = {
580*4bdc9457SAndroid Build Coastguard Worker     tflite::CreateBuffer(builder, builder.CreateVector({})),
581*4bdc9457SAndroid Build Coastguard Worker     tflite::CreateBuffer(builder, builder.CreateVector(
582*4bdc9457SAndroid Build Coastguard Worker       reinterpret_cast<const uint8_t*>(kernel.data()),
583*4bdc9457SAndroid Build Coastguard Worker       sizeof(float) * kernel.size())),
584*4bdc9457SAndroid Build Coastguard Worker     tflite::CreateBuffer(builder, builder.CreateVector(
585*4bdc9457SAndroid Build Coastguard Worker       reinterpret_cast<const uint8_t*>(bias.data()),
586*4bdc9457SAndroid Build Coastguard Worker       sizeof(float) * bias.size())),
587*4bdc9457SAndroid Build Coastguard Worker   };
588*4bdc9457SAndroid Build Coastguard Worker 
589*4bdc9457SAndroid Build Coastguard Worker   const int32_t input_shape[4] = {
590*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(batch_size),
591*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(input_height),
592*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(input_width),
593*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(groups * group_input_channels)
594*4bdc9457SAndroid Build Coastguard Worker   };
595*4bdc9457SAndroid Build Coastguard Worker   const int32_t output_shape[4] = {
596*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(batch_size),
597*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(output_height),
598*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(output_width),
599*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(groups * group_output_channels)
600*4bdc9457SAndroid Build Coastguard Worker   };
601*4bdc9457SAndroid Build Coastguard Worker   const int32_t filter_shape[4] = {
602*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(group_output_channels),
603*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(kernel_height),
604*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(kernel_width),
605*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(groups * group_input_channels)
606*4bdc9457SAndroid Build Coastguard Worker   };
607*4bdc9457SAndroid Build Coastguard Worker   const int32_t bias_shape[1] = {
608*4bdc9457SAndroid Build Coastguard Worker     static_cast<int32_t>(groups * group_output_channels)
609*4bdc9457SAndroid Build Coastguard Worker   };
610*4bdc9457SAndroid Build Coastguard Worker 
611*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::Tensor> tensors[4] = {
612*4bdc9457SAndroid Build Coastguard Worker     tflite::CreateTensor(builder,
613*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateVector<int32_t>(input_shape, 4),
614*4bdc9457SAndroid Build Coastguard Worker                          tflite::TensorType_FLOAT32,
615*4bdc9457SAndroid Build Coastguard Worker                          0 /* buffer id */,
616*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateString("input")),
617*4bdc9457SAndroid Build Coastguard Worker     tflite::CreateTensor(builder,
618*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateVector<int32_t>(filter_shape, 4),
619*4bdc9457SAndroid Build Coastguard Worker                          tflite::TensorType_FLOAT32,
620*4bdc9457SAndroid Build Coastguard Worker                          1 /* buffer id */,
621*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateString("filter")),
622*4bdc9457SAndroid Build Coastguard Worker     tflite::CreateTensor(builder,
623*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateVector<int32_t>(bias_shape, 1),
624*4bdc9457SAndroid Build Coastguard Worker                          tflite::TensorType_FLOAT32,
625*4bdc9457SAndroid Build Coastguard Worker                          2 /* buffer id */,
626*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateString("bias")),
627*4bdc9457SAndroid Build Coastguard Worker     tflite::CreateTensor(builder,
628*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateVector<int32_t>(output_shape, 4),
629*4bdc9457SAndroid Build Coastguard Worker                          tflite::TensorType_FLOAT32,
630*4bdc9457SAndroid Build Coastguard Worker                          0 /* buffer id */,
631*4bdc9457SAndroid Build Coastguard Worker                          builder.CreateString("output")),
632*4bdc9457SAndroid Build Coastguard Worker   };
633*4bdc9457SAndroid Build Coastguard Worker 
634*4bdc9457SAndroid Build Coastguard Worker   const int32_t op_inputs[3] = { 0, 1, 2 };
635*4bdc9457SAndroid Build Coastguard Worker   const int32_t op_outputs[1] = { 3 };
636*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::Operator> op = CreateOperator(
637*4bdc9457SAndroid Build Coastguard Worker       builder,
638*4bdc9457SAndroid Build Coastguard Worker       0 /* opcode_index */,
639*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector<int32_t>(op_inputs, 3),
640*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector<int32_t>(op_outputs, 1),
641*4bdc9457SAndroid Build Coastguard Worker       is_depthwise ? tflite::BuiltinOptions_DepthwiseConv2DOptions : tflite::BuiltinOptions_Conv2DOptions,
642*4bdc9457SAndroid Build Coastguard Worker       is_depthwise ? dwconv2d_options.Union() : conv2d_options.Union(),
643*4bdc9457SAndroid Build Coastguard Worker       /*custom_options */ 0,
644*4bdc9457SAndroid Build Coastguard Worker       tflite::CustomOptionsFormat_FLEXBUFFERS);
645*4bdc9457SAndroid Build Coastguard Worker 
646*4bdc9457SAndroid Build Coastguard Worker   const int32_t graph_inputs[1] = { 0 };
647*4bdc9457SAndroid Build Coastguard Worker   const int32_t graph_outputs[1] = { 3 };
648*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::SubGraph> subgraph = CreateSubGraph(
649*4bdc9457SAndroid Build Coastguard Worker       builder,
650*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector(tensors, 4),
651*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector<int32_t>(graph_inputs, 1),
652*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector<int32_t>(graph_outputs, 1),
653*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector(&op, 1),
654*4bdc9457SAndroid Build Coastguard Worker       builder.CreateString("Conv2D subgraph"));
655*4bdc9457SAndroid Build Coastguard Worker 
656*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<flatbuffers::String> description = builder.CreateString("Conv2D model");
657*4bdc9457SAndroid Build Coastguard Worker 
658*4bdc9457SAndroid Build Coastguard Worker   flatbuffers::Offset<tflite::Model> model_buffer = tflite::CreateModel(builder,
659*4bdc9457SAndroid Build Coastguard Worker       TFLITE_SCHEMA_VERSION,
660*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector(&operator_code, 1),
661*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector(&subgraph, 1),
662*4bdc9457SAndroid Build Coastguard Worker       description,
663*4bdc9457SAndroid Build Coastguard Worker       builder.CreateVector(buffers, 3));
664*4bdc9457SAndroid Build Coastguard Worker 
665*4bdc9457SAndroid Build Coastguard Worker   builder.Finish(model_buffer);
666*4bdc9457SAndroid Build Coastguard Worker 
667*4bdc9457SAndroid Build Coastguard Worker   const tflite::Model* model = tflite::GetModel(builder.GetBufferPointer());
668*4bdc9457SAndroid Build Coastguard Worker   tflite::ops::builtin::BuiltinOpResolverWithoutDefaultDelegates resolver;
669*4bdc9457SAndroid Build Coastguard Worker   tflite::InterpreterBuilder interpreterBuilder(model, resolver);
670*4bdc9457SAndroid Build Coastguard Worker   std::unique_ptr<tflite::Interpreter> interpreter;
671*4bdc9457SAndroid Build Coastguard Worker   if (interpreterBuilder(&interpreter) != kTfLiteOk) {
672*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to create TFLite interpreter");
673*4bdc9457SAndroid Build Coastguard Worker     return;
674*4bdc9457SAndroid Build Coastguard Worker   }
675*4bdc9457SAndroid Build Coastguard Worker   if (interpreter == nullptr) {
676*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("TFLite interpreter is null");
677*4bdc9457SAndroid Build Coastguard Worker     return;
678*4bdc9457SAndroid Build Coastguard Worker   }
679*4bdc9457SAndroid Build Coastguard Worker   interpreter->SetNumThreads(1);
680*4bdc9457SAndroid Build Coastguard Worker 
681*4bdc9457SAndroid Build Coastguard Worker   if (interpreter->AllocateTensors() != kTfLiteOk) {
682*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to allocate tensors");
683*4bdc9457SAndroid Build Coastguard Worker     return;
684*4bdc9457SAndroid Build Coastguard Worker   }
685*4bdc9457SAndroid Build Coastguard Worker 
686*4bdc9457SAndroid Build Coastguard Worker   std::generate(
687*4bdc9457SAndroid Build Coastguard Worker     interpreter->typed_tensor<float>(0),
688*4bdc9457SAndroid Build Coastguard Worker     interpreter->typed_tensor<float>(0) + batch_size * groups * group_input_channels * input_height * input_width,
689*4bdc9457SAndroid Build Coastguard Worker     std::ref(f32rng));
690*4bdc9457SAndroid Build Coastguard Worker 
691*4bdc9457SAndroid Build Coastguard Worker   for (auto _ : state) {
692*4bdc9457SAndroid Build Coastguard Worker     state.PauseTiming();
693*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::WipeCache();
694*4bdc9457SAndroid Build Coastguard Worker     benchmark::utils::PrefetchToL1(
695*4bdc9457SAndroid Build Coastguard Worker       interpreter->typed_tensor<float>(0),
696*4bdc9457SAndroid Build Coastguard Worker       batch_size * groups * group_input_channels * input_height * input_width * sizeof(float));
697*4bdc9457SAndroid Build Coastguard Worker     state.ResumeTiming();
698*4bdc9457SAndroid Build Coastguard Worker 
699*4bdc9457SAndroid Build Coastguard Worker     if (interpreter->Invoke() != kTfLiteOk) {
700*4bdc9457SAndroid Build Coastguard Worker       state.SkipWithError("failed to invoke TFLite interpreter");
701*4bdc9457SAndroid Build Coastguard Worker       return;
702*4bdc9457SAndroid Build Coastguard Worker     }
703*4bdc9457SAndroid Build Coastguard Worker   }
704*4bdc9457SAndroid Build Coastguard Worker 
705*4bdc9457SAndroid Build Coastguard Worker   const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
706*4bdc9457SAndroid Build Coastguard Worker   if (cpu_frequency != 0) {
707*4bdc9457SAndroid Build Coastguard Worker     state.counters["cpufreq"] = cpu_frequency;
708*4bdc9457SAndroid Build Coastguard Worker   }
709*4bdc9457SAndroid Build Coastguard Worker 
710*4bdc9457SAndroid Build Coastguard Worker   state.counters["FLOPS"] = benchmark::Counter(
711*4bdc9457SAndroid Build Coastguard Worker     uint64_t(state.iterations()) * 2 *
712*4bdc9457SAndroid Build Coastguard Worker       batch_size * output_height * output_width *
713*4bdc9457SAndroid Build Coastguard Worker       groups * group_input_channels * group_output_channels *
714*4bdc9457SAndroid Build Coastguard Worker       kernel_height * kernel_width,
715*4bdc9457SAndroid Build Coastguard Worker     benchmark::Counter::kIsRate);
716*4bdc9457SAndroid Build Coastguard Worker 
717*4bdc9457SAndroid Build Coastguard Worker   interpreter.reset();
718*4bdc9457SAndroid Build Coastguard Worker }
719*4bdc9457SAndroid Build Coastguard Worker #endif  // BENCHMARK_TENSORFLOW_LITE
720*4bdc9457SAndroid Build Coastguard Worker 
721*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v1 with 1 group.
ShuffleNetV1G1(benchmark::internal::Benchmark * b)722*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV1G1(benchmark::internal::Benchmark* b) {
723*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
724*4bdc9457SAndroid Build Coastguard Worker 
725*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
726*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
727*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
728*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-2 unit ******************/
729*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
730*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   36});
731*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  36,    1,    1});
732*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   36,  120});
733*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-1 units *****************/
734*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
735*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  144,   36});
736*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  36,    1,    1});
737*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   36,  144});
738*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-2 unit ******************/
739*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
740*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  144,   72});
741*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  72,    1,    1});
742*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   72,  144});
743*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-1 units *****************/
744*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
745*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  288,   72});
746*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1,  72,    1,    1});
747*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   72,  288});
748*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-2 unit ******************/
749*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
750*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  288,  144});
751*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 144,    1,    1});
752*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  144,  288});
753*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-1 units *****************/
754*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
755*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  576,  144});
756*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 2, 1, 144,    1,    1});
757*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  144,  576});
758*4bdc9457SAndroid Build Coastguard Worker }
759*4bdc9457SAndroid Build Coastguard Worker 
760*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v1 with 2 groups.
ShuffleNetV1G2(benchmark::internal::Benchmark * b)761*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV1G2(benchmark::internal::Benchmark* b) {
762*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
763*4bdc9457SAndroid Build Coastguard Worker 
764*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
765*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
766*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
767*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-2 unit ******************/
768*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
769*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   50});
770*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  50,    1,    1});
771*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   2,   25,   88});
772*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-1 units *****************/
773*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
774*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   2,  100,   25});
775*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  50,    1,    1});
776*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   2,   25,  100});
777*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-2 unit ******************/
778*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
779*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   2,  100,   50});
780*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 100,    1,    1});
781*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   2,   50,  100});
782*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-1 units *****************/
783*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
784*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   2,  200,   50});
785*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 100,    1,    1});
786*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   2,   50,  200});
787*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-2 unit ******************/
788*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
789*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   2,  200,  100});
790*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 200,    1,    1});
791*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   2,  100,  200});
792*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-1 units *****************/
793*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
794*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   2,  400,  100});
795*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 2, 1, 200,    1,    1});
796*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   2,  100,  400});
797*4bdc9457SAndroid Build Coastguard Worker }
798*4bdc9457SAndroid Build Coastguard Worker 
799*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v1 with 3 groups.
ShuffleNetV1G3(benchmark::internal::Benchmark * b)800*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV1G3(benchmark::internal::Benchmark* b) {
801*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
802*4bdc9457SAndroid Build Coastguard Worker 
803*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
804*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
805*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
806*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-2 unit ******************/
807*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
808*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   60});
809*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  60,    1,    1});
810*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   3,   20,   72});
811*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-1 units *****************/
812*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
813*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   3,   80,   20});
814*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  60,    1,    1});
815*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   3,   20,   80});
816*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-2 unit ******************/
817*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
818*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   3,   80,   40});
819*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 120,    1,    1});
820*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   3,   40,   80});
821*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-1 units *****************/
822*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
823*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   3,  160,   40});
824*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 120,    1,    1});
825*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   3,   40,  160});
826*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-2 unit ******************/
827*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
828*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   3,  160,   80});
829*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 240,    1,    1});
830*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   3,   80,  160});
831*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-1 units *****************/
832*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
833*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   3,  320,   80});
834*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 2, 1, 240,    1,    1});
835*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   3,   80,  320});
836*4bdc9457SAndroid Build Coastguard Worker }
837*4bdc9457SAndroid Build Coastguard Worker 
838*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v1 with 4 groups.
ShuffleNetV1G4(benchmark::internal::Benchmark * b)839*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV1G4(benchmark::internal::Benchmark* b) {
840*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
841*4bdc9457SAndroid Build Coastguard Worker 
842*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
843*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
844*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
845*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-2 unit ******************/
846*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
847*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   68});
848*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  68,    1,    1});
849*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   4,   17,   62});
850*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-1 units *****************/
851*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
852*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   4,   68,   17});
853*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  68,    1,    1});
854*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   4,   17,   68});
855*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-2 unit ******************/
856*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
857*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   4,   68,   34});
858*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 136,    1,    1});
859*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   4,   34,   68});
860*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-1 units *****************/
861*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
862*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   4,  136,   34});
863*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 136,    1,    1});
864*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   4,   34,  136});
865*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-2 unit ******************/
866*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
867*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   4,  136,   68});
868*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 272,    1,    1});
869*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   4,   68,  136});
870*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-1 units *****************/
871*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
872*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   4,  272,   68});
873*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 2, 1, 272,    1,    1});
874*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   4,   68,  272});
875*4bdc9457SAndroid Build Coastguard Worker }
876*4bdc9457SAndroid Build Coastguard Worker 
877*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v1 with 8 groups.
ShuffleNetV1G8(benchmark::internal::Benchmark * b)878*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV1G8(benchmark::internal::Benchmark* b) {
879*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
880*4bdc9457SAndroid Build Coastguard Worker 
881*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
882*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
883*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
884*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-2 unit ******************/
885*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
886*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   96});
887*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  96,    1,    1});
888*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   8,   12,   45});
889*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 2: stride-1 units *****************/
890*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
891*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   8,   48,   12});
892*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  96,    1,    1});
893*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   8,   12,   48});
894*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-2 unit ******************/
895*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
896*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   8,   48,   24});
897*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 192,    1,    1});
898*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   8,   24,   48});
899*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 3: stride-1 units *****************/
900*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
901*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   8,   96,   24});
902*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 192,    1,    1});
903*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   8,   24,   96});
904*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-2 unit ******************/
905*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
906*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   8,   96,   48});
907*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 384,    1,    1});
908*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   8,   48,   96});
909*4bdc9457SAndroid Build Coastguard Worker   /******************* Stage 4: stride-1 units *****************/
910*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
911*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   8,  192,   48});
912*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 2, 1, 384,    1,    1});
913*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   8,   48,  192});
914*4bdc9457SAndroid Build Coastguard Worker }
915*4bdc9457SAndroid Build Coastguard Worker 
916*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v2 (0.5X scale)
ShuffleNetV2X05(benchmark::internal::Benchmark * b)917*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV2X05(benchmark::internal::Benchmark* b) {
918*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
919*4bdc9457SAndroid Build Coastguard Worker 
920*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
921*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
922*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
923*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 2 **************************/
924*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
925*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  24,    1,    1});
926*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   24,   24});
927*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   24});
928*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1,  24,    1,    1});
929*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 3 **************************/
930*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
931*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  48,    1,    1});
932*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   48,   48});
933*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   48,   48});
934*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1,  48,    1,    1});
935*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 4 **************************/
936*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
937*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1,  96,    1,    1});
938*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,   96,   96});
939*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   96,   96});
940*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1,  96,    1,    1});
941*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 5 **************************/
942*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
943*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  192, 1024});
944*4bdc9457SAndroid Build Coastguard Worker }
945*4bdc9457SAndroid Build Coastguard Worker 
946*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v2 (1.0X scale)
ShuffleNetV2X10(benchmark::internal::Benchmark * b)947*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV2X10(benchmark::internal::Benchmark* b) {
948*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
949*4bdc9457SAndroid Build Coastguard Worker 
950*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
951*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
952*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
953*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 2 **************************/
954*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
955*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  24,    1,    1});
956*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   24,   58});
957*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   58});
958*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  58,    1,    1});
959*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   58,   58});
960*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1,  58,    1,    1});
961*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 3 **************************/
962*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
963*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 116,    1,    1});
964*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  116,  116});
965*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  116,  116});
966*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 116,    1,    1});
967*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 4 **************************/
968*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
969*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 232,    1,    1});
970*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  232,  232});
971*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  232,  232});
972*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 232,    1,    1});
973*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 5 **************************/
974*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
975*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  464, 1024});
976*4bdc9457SAndroid Build Coastguard Worker }
977*4bdc9457SAndroid Build Coastguard Worker 
978*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v2 (1.5X scale)
ShuffleNetV2X15(benchmark::internal::Benchmark * b)979*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV2X15(benchmark::internal::Benchmark* b) {
980*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
981*4bdc9457SAndroid Build Coastguard Worker 
982*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
983*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
984*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
985*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 2 **************************/
986*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
987*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  24,    1,    1});
988*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   24,   88});
989*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   88});
990*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  88,    1,    1});
991*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   88,   88});
992*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1,  88,    1,    1});
993*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 3 **************************/
994*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
995*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 176,    1,    1});
996*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  176,  176});
997*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  176,  176});
998*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 176,    1,    1});
999*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 4 **************************/
1000*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1001*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 352,    1,    1});
1002*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  352,  352});
1003*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  352,  352});
1004*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 352,    1,    1});
1005*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 5 **************************/
1006*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1007*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  704, 1024});
1008*4bdc9457SAndroid Build Coastguard Worker }
1009*4bdc9457SAndroid Build Coastguard Worker 
1010*4bdc9457SAndroid Build Coastguard Worker // ShuffleNet v2 (2.0X scale)
ShuffleNetV2X20(benchmark::internal::Benchmark * b)1011*4bdc9457SAndroid Build Coastguard Worker static void ShuffleNetV2X20(benchmark::internal::Benchmark* b) {
1012*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1013*4bdc9457SAndroid Build Coastguard Worker 
1014*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 1 **************************/
1015*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1016*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   24});
1017*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 2 **************************/
1018*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1019*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  24,    1,    1});
1020*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   24,  122});
1021*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,  122});
1022*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1, 122,    1,    1});
1023*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  122,  122});
1024*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1, 122,    1,    1});
1025*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 3 **************************/
1026*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1027*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 244,    1,    1});
1028*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  244,  244});
1029*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  244,  244});
1030*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 244,    1,    1});
1031*4bdc9457SAndroid Build Coastguard Worker   /************************** Stage 4 **************************/
1032*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1033*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 488,    1,    1});
1034*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  488,  488});
1035*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  488,  488});
1036*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 488,    1,    1});
1037*4bdc9457SAndroid Build Coastguard Worker   /*************************** Conv 5 **************************/
1038*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1039*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  976, 2048});
1040*4bdc9457SAndroid Build Coastguard Worker }
1041*4bdc9457SAndroid Build Coastguard Worker 
MobileNetV1(benchmark::internal::Benchmark * b)1042*4bdc9457SAndroid Build Coastguard Worker static void MobileNetV1(benchmark::internal::Benchmark* b) {
1043*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1044*4bdc9457SAndroid Build Coastguard Worker 
1045*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G   GCin  GCout */
1046*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,    1,    3,   32});
1047*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 1, 1,   32,    1,    1});
1048*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  1,  1,  0,  0, 1, 1,    1,   32,   64});
1049*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 2, 1,   64,    1,    1});
1050*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,    1,   64,  128});
1051*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1,  128,    1,    1});
1052*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,    1,  128,  128});
1053*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  128,    1,    1});
1054*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,    1,  128,  256});
1055*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1,  256,    1,    1});
1056*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,    1,  256,  256});
1057*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1,  256,    1,    1});
1058*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,    1,  256,  512});
1059*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1,  512,    1,    1});
1060*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,    1,  512,  512});
1061*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1,  512,    1,    1});
1062*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,    1,  512, 1024});
1063*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 1024,    1,    1});
1064*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,    1, 1024, 1024});
1065*4bdc9457SAndroid Build Coastguard Worker }
1066*4bdc9457SAndroid Build Coastguard Worker 
MobileNetV2(benchmark::internal::Benchmark * b)1067*4bdc9457SAndroid Build Coastguard Worker static void MobileNetV2(benchmark::internal::Benchmark* b) {
1068*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1069*4bdc9457SAndroid Build Coastguard Worker 
1070*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1071*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   32});
1072*4bdc9457SAndroid Build Coastguard Worker 
1073*4bdc9457SAndroid Build Coastguard Worker   /************************ Bottleneck 1 ***********************/
1074*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1075*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 1, 1,  32,    1,    1});
1076*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  1,  1,  0,  0, 1, 1,   1,   32,   16});
1077*4bdc9457SAndroid Build Coastguard Worker 
1078*4bdc9457SAndroid Build Coastguard Worker   /************************ Bottleneck 2 ***********************/
1079*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1080*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  1,  1,  0,  0, 1, 1,   1,   16,   96});
1081*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 2, 1,  96,    1,    1});
1082*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   96,   24});
1083*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,  144});
1084*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1, 144,    1,    1});
1085*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,  144,   24});
1086*4bdc9457SAndroid Build Coastguard Worker 
1087*4bdc9457SAndroid Build Coastguard Worker   /************************ Bottleneck 3 ***********************/
1088*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1089*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,  144});
1090*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1, 144,    1,    1});
1091*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  144,   32});
1092*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   32,  192});
1093*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1, 192,    1,    1});
1094*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  192,   32});
1095*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   32,  192});
1096*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1, 192,    1,    1});
1097*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  192,   32});
1098*4bdc9457SAndroid Build Coastguard Worker 
1099*4bdc9457SAndroid Build Coastguard Worker   /************************ Bottleneck 4 ***********************/
1100*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1101*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   32,  192});
1102*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 192,    1,    1});
1103*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  192,   64});
1104*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   64,  384});
1105*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 384,    1,    1});
1106*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  384,   64});
1107*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   64,  384});
1108*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 384,    1,    1});
1109*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  384,   64});
1110*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   64,  384});
1111*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 384,    1,    1});
1112*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  384,   64});
1113*4bdc9457SAndroid Build Coastguard Worker 
1114*4bdc9457SAndroid Build Coastguard Worker   /************************ Bottleneck 5 ***********************/
1115*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1116*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   64,  384});
1117*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 384,    1,    1});
1118*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  384,   96});
1119*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   96,  576});
1120*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 576,    1,    1});
1121*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  576,   96});
1122*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   96,  576});
1123*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 576,    1,    1});
1124*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  576,   96});
1125*4bdc9457SAndroid Build Coastguard Worker 
1126*4bdc9457SAndroid Build Coastguard Worker   /************************ Bottleneck 6 ***********************/
1127*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1128*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   96,  576});
1129*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 576,    1,    1});
1130*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  576,  160});
1131*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  160,  960});
1132*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 960,    1,    1});
1133*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  960,  160});
1134*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  160,  960});
1135*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 960,    1,    1});
1136*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  960,  160});
1137*4bdc9457SAndroid Build Coastguard Worker 
1138*4bdc9457SAndroid Build Coastguard Worker   /************************ Bottleneck 7 ***********************/
1139*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1140*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  160,  960});
1141*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 960,    1,    1});
1142*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  960,  320});
1143*4bdc9457SAndroid Build Coastguard Worker 
1144*4bdc9457SAndroid Build Coastguard Worker   /******************** Pre-pooling Conv2D *********************/
1145*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1146*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  320, 1280});
1147*4bdc9457SAndroid Build Coastguard Worker   /******************** Post-pooling Conv2D ********************/
1148*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D    G  GCin  GCout */
1149*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1, 1280, 1000});
1150*4bdc9457SAndroid Build Coastguard Worker }
1151*4bdc9457SAndroid Build Coastguard Worker 
MobileNetV3Small(benchmark::internal::Benchmark * b)1152*4bdc9457SAndroid Build Coastguard Worker static void MobileNetV3Small(benchmark::internal::Benchmark* b) {
1153*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1154*4bdc9457SAndroid Build Coastguard Worker 
1155*4bdc9457SAndroid Build Coastguard Worker   /*********************** Initial Stage ***********************/
1156*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1157*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   16});
1158*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 1 ************************/
1159*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1160*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 2, 1,  16,    1,    1});
1161*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   16,    8});
1162*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,    8,   16});
1163*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   16,   16});
1164*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 2 ************************/
1165*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1166*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   16,   72});
1167*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1,  72,    1,    1});
1168*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   72,   24});
1169*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 3 ************************/
1170*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1171*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   24,   88});
1172*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1,  88,    1,    1});
1173*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   88,   24});
1174*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 4 ************************/
1175*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1176*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   24,   96});
1177*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  5,  5,  4,  4, 2, 1,  96,    1,    1});
1178*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   96,   24});
1179*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   24,   96});
1180*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   96,   40});
1181*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 5 ************************/
1182*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1183*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   40,  240});
1184*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  5,  5,  4,  4, 1, 1, 240,    1,    1});
1185*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  240,   64});
1186*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   64,  240});
1187*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  240,   40});
1188*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 6 ************************/
1189*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1190*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   40,  240});
1191*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  5,  5,  4,  4, 1, 1, 240,    1,    1});
1192*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  240,   64});
1193*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   64,  240});
1194*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  240,   40});
1195*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 7 ************************/
1196*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1197*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   40,  120});
1198*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  5,  5,  4,  4, 1, 1, 120,    1,    1});
1199*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  120,   32});
1200*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   32,  120});
1201*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  120,   48});
1202*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 8 ************************/
1203*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1204*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   48,  144});
1205*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  5,  5,  4,  4, 1, 1, 144,    1,    1});
1206*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  144,   40});
1207*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   40,  144});
1208*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  144,   48});
1209*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 9 ************************/
1210*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1211*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   48,  288});
1212*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  5,  5,  4,  4, 2, 1, 288,    1,    1});
1213*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  288,   72});
1214*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   72,  288});
1215*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  288,   96});
1216*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 10 ***********************/
1217*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1218*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,   96,  576});
1219*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  5,  5,  4,  4, 1, 1, 576,    1,    1});
1220*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  576,  144});
1221*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  144,  576});
1222*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  576,   96});
1223*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 11 ***********************/
1224*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1225*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,   96,  576});
1226*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  5,  5,  4,  4, 1, 1, 576,    1,    1});
1227*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  576,  144});
1228*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  144,  576});
1229*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  576,   96});
1230*4bdc9457SAndroid Build Coastguard Worker   /************************ Last Stage  ************************/
1231*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1232*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,   96,  576});
1233*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  576, 1024});
1234*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1, 1024, 1001});
1235*4bdc9457SAndroid Build Coastguard Worker }
1236*4bdc9457SAndroid Build Coastguard Worker 
MobileNetV3Large(benchmark::internal::Benchmark * b)1237*4bdc9457SAndroid Build Coastguard Worker static void MobileNetV3Large(benchmark::internal::Benchmark* b) {
1238*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1239*4bdc9457SAndroid Build Coastguard Worker 
1240*4bdc9457SAndroid Build Coastguard Worker   /*********************** Initial Stage ***********************/
1241*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1242*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1,   1,    3,   16});
1243*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 1 ************************/
1244*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1245*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 1, 1,  16,    1,    1});
1246*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  1,  1,  0,  0, 1, 1,   1,   16,   16});
1247*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 2 ************************/
1248*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1249*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  1,  1,  0,  0, 1, 1,   1,   16,   64});
1250*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 2, 1,  64,    1,    1});
1251*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   64,   24});
1252*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 3 ************************/
1253*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1254*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   72});
1255*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1,  72,    1,    1});
1256*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   72,   24});
1257*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 4 ************************/
1258*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1259*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1,   1,   24,   72});
1260*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  5,  5,  4,  4, 2, 1,  72,    1,    1});
1261*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   72,   24});
1262*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   24,   72});
1263*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   72,   40});
1264*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 5 ************************/
1265*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1266*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   40,  120});
1267*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  5,  5,  4,  4, 1, 1, 120,    1,    1});
1268*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  120,   32});
1269*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   32,  120});
1270*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  120,   40});
1271*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 6 ************************/
1272*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1273*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   40,  120});
1274*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  5,  5,  4,  4, 1, 1, 120,    1,    1});
1275*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  120,   32});
1276*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,   32,  120});
1277*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,  120,   40});
1278*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 7 ************************/
1279*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1280*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1,   1,   40,  240});
1281*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 240,    1,    1});
1282*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  240,   80});
1283*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 8 ************************/
1284*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1285*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   80,  200});
1286*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 200,    1,    1});
1287*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  200,   80});
1288*4bdc9457SAndroid Build Coastguard Worker   /*********************** Bottleneck 9 ************************/
1289*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1290*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   80,  184});
1291*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 184,    1,    1});
1292*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  184,   80});
1293*4bdc9457SAndroid Build Coastguard Worker   /********************** Bottleneck 10 ***********************/
1294*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1295*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   80,  184});
1296*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 184,    1,    1});
1297*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  184,   80});
1298*4bdc9457SAndroid Build Coastguard Worker   /********************** Bottleneck 11 ***********************/
1299*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1300*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,   80,  480});
1301*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 480,    1,    1});
1302*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  480,  120});
1303*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  120,  480});
1304*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  480,  112});
1305*4bdc9457SAndroid Build Coastguard Worker   /********************** Bottleneck 12 ***********************/
1306*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1307*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  112,  672});
1308*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 672,    1,    1});
1309*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  672,  168});
1310*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  168,  672});
1311*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  672,  112});
1312*4bdc9457SAndroid Build Coastguard Worker   /********************** Bottleneck 13 ***********************/
1313*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1314*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1,   1,  112,  672});
1315*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  5,  5,  4,  4, 2, 1, 672,    1,    1});
1316*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  672,  160});
1317*4bdc9457SAndroid Build Coastguard Worker   /********************** Bottleneck 14 ***********************/
1318*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1319*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  160,  960});
1320*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  5,  5,  4,  4, 1, 1, 960,    1,    1});
1321*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  960,  240});
1322*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  240,  960});
1323*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  960,  160});
1324*4bdc9457SAndroid Build Coastguard Worker   /********************** Bottleneck 15 ***********************/
1325*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1326*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  160,  960});
1327*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  5,  5,  4,  4, 1, 1, 960,    1,    1});
1328*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  960,  240});
1329*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  240,  960});
1330*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  960,  160});
1331*4bdc9457SAndroid Build Coastguard Worker   /************************ Last Stage  ***********************/
1332*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D   G   GCin  GCout */
1333*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1,   1,  160,  960});
1334*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1,  960, 1280});
1335*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1,   1, 1280, 1001});
1336*4bdc9457SAndroid Build Coastguard Worker }
1337*4bdc9457SAndroid Build Coastguard Worker 
1338*4bdc9457SAndroid Build Coastguard Worker // SqueezeNet 1.0
SqueezeNetV10(benchmark::internal::Benchmark * b)1339*4bdc9457SAndroid Build Coastguard Worker static void SqueezeNetV10(benchmark::internal::Benchmark* b) {
1340*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1341*4bdc9457SAndroid Build Coastguard Worker 
1342*4bdc9457SAndroid Build Coastguard Worker   /************************** Conv 1 *************************/
1343*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1344*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  7,  7,  6,  6, 2, 1, 1,    3,   96});
1345*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 2 *************************/
1346*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1347*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,   96,   16});
1348*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,   16,   64});
1349*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  3,  3,  2,  2, 1, 1, 1,   16,   64});
1350*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 3 *************************/
1351*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1352*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  55,  1,  1,  0,  0, 1, 1, 1,  128,   16});
1353*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,   16,   64});
1354*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  55,  55,  3,  3,  2,  2, 1, 1, 1,   16,   64});
1355*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 4 *************************/
1356*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1357*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,  128,   32});
1358*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,   32,  128});
1359*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  3,  3,  2,  2, 1, 1, 1,   32,  128});
1360*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 5 *************************/
1361*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1362*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,  256,   32});
1363*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,   32,  128});
1364*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  3,  3,  2,  2, 1, 1, 1,   32,  128});
1365*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 6 *************************/
1366*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1367*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,  256,   48});
1368*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,   48,  192});
1369*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  3,  3,  2,  2, 1, 1, 1,   48,  192});
1370*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 7 *************************/
1371*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1372*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,  384,   48});
1373*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,   48,  192});
1374*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  27,  27,  3,  3,  2,  2, 1, 1, 1,   48,  192});
1375*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 8 *************************/
1376*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1377*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,  384,   64});
1378*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,   64,  256});
1379*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  3,  3,  2,  2, 1, 1, 1,   64,  256});
1380*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 9 *************************/
1381*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1382*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,  512,   64});
1383*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,   64,  256});
1384*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  3,  3,  2,  2, 1, 1, 1,   64,  256});
1385*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 10 *************************/
1386*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1387*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,  512, 1000});
1388*4bdc9457SAndroid Build Coastguard Worker }
1389*4bdc9457SAndroid Build Coastguard Worker 
1390*4bdc9457SAndroid Build Coastguard Worker // SqueezeNet 1.1
SqueezeNetV11(benchmark::internal::Benchmark * b)1391*4bdc9457SAndroid Build Coastguard Worker static void SqueezeNetV11(benchmark::internal::Benchmark* b) {
1392*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1393*4bdc9457SAndroid Build Coastguard Worker 
1394*4bdc9457SAndroid Build Coastguard Worker   /************************** Conv 1 *************************/
1395*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1396*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 2, 1, 1,    3,   64});
1397*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 2 *************************/
1398*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1399*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,   64,   16});
1400*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,   16,   64});
1401*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  3,  3,  2,  2, 1, 1, 1,   16,   64});
1402*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 3 *************************/
1403*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1404*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,  128,   16});
1405*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  55,  55,  1,  1,  0,  0, 1, 1, 1,   16,   64});
1406*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  55,  55,  3,  3,  2,  2, 1, 1, 1,   16,   64});
1407*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 4 *************************/
1408*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1409*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,  128,   32});
1410*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,   32,  128});
1411*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  3,  3,  2,  2, 1, 1, 1,   32,  128});
1412*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 5 *************************/
1413*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1414*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,  256,   32});
1415*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  27,  27,  1,  1,  0,  0, 1, 1, 1,   32,  128});
1416*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  27,  27,  3,  3,  2,  2, 1, 1, 1,   32,  128});
1417*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 6 *************************/
1418*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1419*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,  256,   48});
1420*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,   48,  192});
1421*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  3,  3,  2,  2, 1, 1, 1,   48,  192});
1422*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 7 *************************/
1423*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1424*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,  384,   48});
1425*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,   48,  192});
1426*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  13,  13,  3,  3,  2,  2, 1, 1, 1,   48,  192});
1427*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 8 *************************/
1428*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1429*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,  384,   64});
1430*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,   64,  256});
1431*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  3,  3,  2,  2, 1, 1, 1,   64,  256});
1432*4bdc9457SAndroid Build Coastguard Worker   /************************** Fire 9 *************************/
1433*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1434*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,  512,   64});
1435*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,   64,  256});
1436*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  13,  13,  3,  3,  2,  2, 1, 1, 1,   64,  256});
1437*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 10 *************************/
1438*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1439*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  13,  13,  1,  1,  0,  0, 1, 1, 1,  512, 1000});
1440*4bdc9457SAndroid Build Coastguard Worker }
1441*4bdc9457SAndroid Build Coastguard Worker 
InceptionV3(benchmark::internal::Benchmark * b)1442*4bdc9457SAndroid Build Coastguard Worker static void InceptionV3(benchmark::internal::Benchmark* b) {
1443*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1444*4bdc9457SAndroid Build Coastguard Worker 
1445*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1446*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 299, 299,  3,  3,  0,  0, 2, 1, 1,    3,   32});
1447*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 149, 149,  3,  3,  0,  0, 1, 1, 1,   32,   32});
1448*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 147, 147,  3,  3,  2,  2, 1, 1, 1,   32,   64});
1449*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  73,  73,  1,  1,  0,  0, 1, 1, 1,   64,   80});
1450*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  73,  73,  3,  3,  0,  0, 1, 1, 1,   80,  192});
1451*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  1,  1,  0,  0, 1, 1, 1,  192,   64});
1452*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  1,  1,  0,  0, 1, 1, 1,  192,   48});
1453*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  5,  5,  4,  4, 1, 1, 1,   48,   64});
1454*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  3,  3,  2,  2, 1, 1, 1,   64,   96});
1455*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  3,  3,  2,  2, 1, 1, 1,   96,   96});
1456*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  1,  1,  0,  0, 1, 1, 1,  192,   32});
1457*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  1,  1,  0,  0, 1, 1, 1,  256,   64});
1458*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  1,  1,  0,  0, 1, 1, 1,  256,   48});
1459*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  1,  1,  0,  0, 1, 1, 1,  288,   64});
1460*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  1,  1,  0,  0, 1, 1, 1,  288,   48});
1461*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  3,  3,  0,  0, 2, 1, 1,  288,  384});
1462*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  35,  35,  3,  3,  0,  0, 2, 1, 1,   96,   96});
1463*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  1,  0,  0, 1, 1, 1,  768,  192});
1464*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  1,  0,  0, 1, 1, 1,  768,  128});
1465*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  7,  0,  6, 1, 1, 1,  128,  128});
1466*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  7,  1,  6,  0, 1, 1, 1,  128,  192});
1467*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  7,  1,  6,  0, 1, 1, 1,  128,  128});
1468*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  7,  0,  6, 1, 1, 1,  128,  192});
1469*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  1,  0,  0, 1, 1, 1,  768,  160});
1470*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  7,  0,  6, 1, 1, 1,  160,  160});
1471*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  7,  1,  6,  0, 1, 1, 1,  160,  192});
1472*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  7,  1,  6,  0, 1, 1, 1,  160,  160});
1473*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  7,  0,  6, 1, 1, 1,  160,  192});
1474*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  1,  7,  0,  6, 1, 1, 1,  192,  192});
1475*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  7,  1,  6,  0, 1, 1, 1,  192,  192});
1476*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  3,  3,  0,  0, 2, 1, 1,  192,  320});
1477*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  17,  17,  3,  3,  0,  0, 2, 1, 1,  192,  192});
1478*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 1280,  320});
1479*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 1280,  384});
1480*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  3,  0,  2, 1, 1, 1,  384,  384});
1481*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  3,  1,  2,  0, 1, 1, 1,  384,  384});
1482*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 1280,  448});
1483*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  3,  3,  2,  2, 1, 1, 1,  448,  384});
1484*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 1280,  192});
1485*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 2048,  320});
1486*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 2048,  384});
1487*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 2048,  448});
1488*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   8,   8,  1,  1,  0,  0, 1, 1, 1, 2048,  192});
1489*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   1,   1,  1,  1,  0,  0, 1, 1, 1, 2048, 1001});
1490*4bdc9457SAndroid Build Coastguard Worker }
1491*4bdc9457SAndroid Build Coastguard Worker 
ResNet18(benchmark::internal::Benchmark * b)1492*4bdc9457SAndroid Build Coastguard Worker static void ResNet18(benchmark::internal::Benchmark* b) {
1493*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1494*4bdc9457SAndroid Build Coastguard Worker 
1495*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 1 *************************/
1496*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1497*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  7,  7,  6,  6, 2, 1, 1,    3,   64});
1498*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 2.X ************************/
1499*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1500*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1, 1,   64,   64});
1501*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 3.X ************************/
1502*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1503*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1, 1,   64,  128});
1504*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1, 1,  128,  128});
1505*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 2, 1, 1,   64,  128});
1506*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 4.X ************************/
1507*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1508*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 1,  128,  256});
1509*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 1,  256,  256});
1510*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 2, 1, 1,  128,  256});
1511*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 5.X ************************/
1512*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1513*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 1,  256,  512});
1514*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 1,  512,  512});
1515*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 2, 1, 1,  256,  512});
1516*4bdc9457SAndroid Build Coastguard Worker }
1517*4bdc9457SAndroid Build Coastguard Worker 
ResNet50(benchmark::internal::Benchmark * b)1518*4bdc9457SAndroid Build Coastguard Worker static void ResNet50(benchmark::internal::Benchmark* b) {
1519*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1520*4bdc9457SAndroid Build Coastguard Worker 
1521*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 1 *************************/
1522*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1523*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  7,  7,  6,  6, 2, 1, 1,    3,   64});
1524*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 2.1 ************************/
1525*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1526*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1, 1,   64,   64});
1527*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1, 1,   64,   64});
1528*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1, 1,   64,  256});
1529*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1, 1,   64,  256});
1530*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 2.X ************************/
1531*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1532*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1, 1,  256,   64});
1533*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1, 1,   64,   64});
1534*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1, 1,   64,  256});
1535*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 3.1 ************************/
1536*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1537*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1, 1,  256,  128});
1538*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 2, 1, 1,  128,  128});
1539*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1, 1,  128,  512});
1540*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 2, 1, 1,  256,  512});
1541*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 3.X ************************/
1542*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1543*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1, 1,  512,  128});
1544*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1, 1,  128,  128});
1545*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1, 1,  128,  512});
1546*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 4.1 ************************/
1547*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1548*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1, 1,  512,  256});
1549*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 2, 1, 1,  256,  256});
1550*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1, 1,  256, 1024});
1551*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 2, 1, 1,  512, 1024});
1552*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 4.X ************************/
1553*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1554*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1, 1, 1024,  256});
1555*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 1,  256,  256});
1556*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1, 1,  256, 1024});
1557*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 5.1 ************************/
1558*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1559*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1, 1, 1024,  512});
1560*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 2, 1, 1,  512,  512});
1561*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1, 1,  512, 2048});
1562*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 2, 1, 1, 1024, 2048});
1563*4bdc9457SAndroid Build Coastguard Worker   /************************ Conv 5.X ************************/
1564*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G GCin  GCout */
1565*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1, 1, 2048,  512});
1566*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,   7,   7,  3,  3,  2,  2, 1, 1, 1,  512,  512});
1567*4bdc9457SAndroid Build Coastguard Worker //b->Args({1,   7,   7,  1,  1,  0,  0, 1, 1, 1,  512, 2048});
1568*4bdc9457SAndroid Build Coastguard Worker }
1569*4bdc9457SAndroid Build Coastguard Worker 
VGG(benchmark::internal::Benchmark * b)1570*4bdc9457SAndroid Build Coastguard Worker static void VGG(benchmark::internal::Benchmark* b) {
1571*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1572*4bdc9457SAndroid Build Coastguard Worker 
1573*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 1.1 ************************/
1574*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1575*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 1, 1, 1,    3,   64});
1576*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 1.2 ************************/
1577*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1578*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 224, 224,  3,  3,  2,  2, 1, 1, 1,   64,   64});
1579*4bdc9457SAndroid Build Coastguard Worker 
1580*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 2.1 ************************/
1581*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1582*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 1, 1, 1,   64,  128});
1583*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 2.2 ************************/
1584*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1585*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 112, 112,  3,  3,  2,  2, 1, 1, 1,  128,  128});
1586*4bdc9457SAndroid Build Coastguard Worker 
1587*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 3.1 ************************/
1588*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1589*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1, 1,  128,  256});
1590*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 3.2 ************************/
1591*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1592*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  3,  3,  2,  2, 1, 1, 1,  256,  256});
1593*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 3.3 ************************/
1594*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1595*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  56,  56,  1,  1,  0,  0, 1, 1, 1,  256,  256});
1596*4bdc9457SAndroid Build Coastguard Worker 
1597*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 4.1 ************************/
1598*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1599*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1, 1,  256,  512});
1600*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 4.2 ************************/
1601*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1602*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  3,  3,  2,  2, 1, 1, 1,  512,  512});
1603*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 4.3 ************************/
1604*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1605*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  28,  28,  1,  1,  0,  0, 1, 1, 1,  512,  512});
1606*4bdc9457SAndroid Build Coastguard Worker 
1607*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 5.X ************************/
1608*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1609*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  3,  3,  2,  2, 1, 1, 1,  512,  512});
1610*4bdc9457SAndroid Build Coastguard Worker   /************************* Conv 5.3 ************************/
1611*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1612*4bdc9457SAndroid Build Coastguard Worker   b->Args({1,  14,  14,  1,  1,  0,  0, 1, 1, 1,  512,  512});
1613*4bdc9457SAndroid Build Coastguard Worker }
1614*4bdc9457SAndroid Build Coastguard Worker 
1615*4bdc9457SAndroid Build Coastguard Worker // SRCNN (9-1-5)
SRCNN915(benchmark::internal::Benchmark * b)1616*4bdc9457SAndroid Build Coastguard Worker static void SRCNN915(benchmark::internal::Benchmark* b) {
1617*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1618*4bdc9457SAndroid Build Coastguard Worker 
1619*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1620*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 384, 384,  9,  9,  0,  0, 1, 1, 1,    1,   64});
1621*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 376, 376,  1,  1,  0,  0, 1, 1, 1,   64,   32});
1622*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 376, 376,  5,  5,  0,  0, 1, 1, 1,   32,    1});
1623*4bdc9457SAndroid Build Coastguard Worker }
1624*4bdc9457SAndroid Build Coastguard Worker 
1625*4bdc9457SAndroid Build Coastguard Worker // SRCNN (9-3-5)
SRCNN935(benchmark::internal::Benchmark * b)1626*4bdc9457SAndroid Build Coastguard Worker static void SRCNN935(benchmark::internal::Benchmark* b) {
1627*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1628*4bdc9457SAndroid Build Coastguard Worker 
1629*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1630*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 384, 384,  9,  9,  0,  0, 1, 1, 1,    1,   64});
1631*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 376, 376,  3,  3,  0,  0, 1, 1, 1,   64,   32});
1632*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 374, 374,  5,  5,  0,  0, 1, 1, 1,   32,    1});
1633*4bdc9457SAndroid Build Coastguard Worker }
1634*4bdc9457SAndroid Build Coastguard Worker 
1635*4bdc9457SAndroid Build Coastguard Worker // SRCNN (9-5-5)
SRCNN955(benchmark::internal::Benchmark * b)1636*4bdc9457SAndroid Build Coastguard Worker static void SRCNN955(benchmark::internal::Benchmark* b) {
1637*4bdc9457SAndroid Build Coastguard Worker   b->ArgNames({"N", "H", "W", "KH", "KW", "PH", "PW", "S", "D", "G", "GCin", "GCout"});
1638*4bdc9457SAndroid Build Coastguard Worker 
1639*4bdc9457SAndroid Build Coastguard Worker   /*       N   H    W   KH  KW  PH  PW  S  D  G  GCin  GCout */
1640*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 384, 384,  9,  9,  0,  0, 1, 1, 1,    1,   64});
1641*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 376, 376,  5,  5,  0,  0, 1, 1, 1,   64,   32});
1642*4bdc9457SAndroid Build Coastguard Worker   b->Args({1, 372, 372,  5,  5,  0,  0, 1, 1, 1,   32,    1});
1643*4bdc9457SAndroid Build Coastguard Worker }
1644*4bdc9457SAndroid Build Coastguard Worker 
1645*4bdc9457SAndroid Build Coastguard Worker #ifndef XNN_NO_F16_OPERATORS
1646*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, mobilenet_v1, "MobileNet v1")->Apply(MobileNetV1)->UseRealTime();
1647*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, mobilenet_v2, "MobileNet v2")->Apply(MobileNetV2)->UseRealTime();
1648*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, mobilenet_v3_small, "MobileNet v3 Small")->Apply(MobileNetV3Small)->UseRealTime();
1649*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, mobilenet_v3_large, "MobileNet v3 Large")->Apply(MobileNetV3Large)->UseRealTime();
1650*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v1_g1, "ShuffleNet v1 (1 group)")->Apply(ShuffleNetV1G1)->UseRealTime();
1651*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v1_g2, "ShuffleNet v1 (2 groups)")->Apply(ShuffleNetV1G2)->UseRealTime();
1652*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v1_g3, "ShuffleNet v1 (3 groups)")->Apply(ShuffleNetV1G3)->UseRealTime();
1653*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v1_g4, "ShuffleNet v1 (4 groups)")->Apply(ShuffleNetV1G4)->UseRealTime();
1654*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v1_g8, "ShuffleNet v1 (8 groups)")->Apply(ShuffleNetV1G8)->UseRealTime();
1655*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v2_x05, "ShuffleNet v2 0.5X")->Apply(ShuffleNetV2X05)->UseRealTime();
1656*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v2_x10, "ShuffleNet v2 1.0X")->Apply(ShuffleNetV2X10)->UseRealTime();
1657*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v2_x15, "ShuffleNet v2 1.5X")->Apply(ShuffleNetV2X15)->UseRealTime();
1658*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, shufflenet_v2_x20, "ShuffleNet v2 2.0X")->Apply(ShuffleNetV2X20)->UseRealTime();
1659*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, squeezenet_v10, "SqueezeNet 1.0")->Apply(SqueezeNetV10)->UseRealTime();
1660*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, squeezenet_v11, "SqueezeNet 1.1")->Apply(SqueezeNetV11)->UseRealTime();
1661*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, inception_v3, "Inception v3")->Apply(InceptionV3)->UseRealTime();
1662*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, resnet18, "ResNet-18")->Apply(ResNet18)->UseRealTime();
1663*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, resnet50, "ResNet-50")->Apply(ResNet50)->UseRealTime();
1664*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, vgg, "VGG")->Apply(VGG)->UseRealTime();
1665*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, srcnn915, "SRCNN (9-1-5)")->Apply(SRCNN915)->UseRealTime();
1666*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, srcnn935, "SRCNN (9-3-5)")->Apply(SRCNN935)->UseRealTime();
1667*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f16, srcnn955, "SRCNN (9-5-5)")->Apply(SRCNN955)->UseRealTime();
1668*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_NO_F16_OPERATORS
1669*4bdc9457SAndroid Build Coastguard Worker 
1670*4bdc9457SAndroid Build Coastguard Worker #ifndef XNN_NO_F32_OPERATORS
1671*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, mobilenet_v1, "MobileNet v1")->Apply(MobileNetV1)->UseRealTime();
1672*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, mobilenet_v2, "MobileNet v2")->Apply(MobileNetV2)->UseRealTime();
1673*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, mobilenet_v3_small, "MobileNet v3 Small")->Apply(MobileNetV3Small)->UseRealTime();
1674*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, mobilenet_v3_large, "MobileNet v3 Large")->Apply(MobileNetV3Large)->UseRealTime();
1675*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v1_g1, "ShuffleNet v1 (1 group)")->Apply(ShuffleNetV1G1)->UseRealTime();
1676*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v1_g2, "ShuffleNet v1 (2 groups)")->Apply(ShuffleNetV1G2)->UseRealTime();
1677*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v1_g3, "ShuffleNet v1 (3 groups)")->Apply(ShuffleNetV1G3)->UseRealTime();
1678*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v1_g4, "ShuffleNet v1 (4 groups)")->Apply(ShuffleNetV1G4)->UseRealTime();
1679*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v1_g8, "ShuffleNet v1 (8 groups)")->Apply(ShuffleNetV1G8)->UseRealTime();
1680*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v2_x05, "ShuffleNet v2 0.5X")->Apply(ShuffleNetV2X05)->UseRealTime();
1681*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v2_x10, "ShuffleNet v2 1.0X")->Apply(ShuffleNetV2X10)->UseRealTime();
1682*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v2_x15, "ShuffleNet v2 1.5X")->Apply(ShuffleNetV2X15)->UseRealTime();
1683*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, shufflenet_v2_x20, "ShuffleNet v2 2.0X")->Apply(ShuffleNetV2X20)->UseRealTime();
1684*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, squeezenet_v10, "SqueezeNet 1.0")->Apply(SqueezeNetV10)->UseRealTime();
1685*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, squeezenet_v11, "SqueezeNet 1.1")->Apply(SqueezeNetV11)->UseRealTime();
1686*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, inception_v3, "Inception v3")->Apply(InceptionV3)->UseRealTime();
1687*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, resnet18, "ResNet-18")->Apply(ResNet18)->UseRealTime();
1688*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, resnet50, "ResNet-50")->Apply(ResNet50)->UseRealTime();
1689*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, vgg, "VGG")->Apply(VGG)->UseRealTime();
1690*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, srcnn915, "SRCNN (9-1-5)")->Apply(SRCNN915)->UseRealTime();
1691*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, srcnn935, "SRCNN (9-3-5)")->Apply(SRCNN935)->UseRealTime();
1692*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_f32, srcnn955, "SRCNN (9-5-5)")->Apply(SRCNN955)->UseRealTime();
1693*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_NO_F32_OPERATORS
1694*4bdc9457SAndroid Build Coastguard Worker 
1695*4bdc9457SAndroid Build Coastguard Worker #ifndef XNN_NO_QS8_OPERATORS
1696*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, mobilenet_v1, "MobileNet v1")->Apply(MobileNetV1)->UseRealTime();
1697*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, mobilenet_v2, "MobileNet v2")->Apply(MobileNetV2)->UseRealTime();
1698*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, mobilenet_v3_small, "MobileNet v3 Small")->Apply(MobileNetV3Small)->UseRealTime();
1699*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, mobilenet_v3_large, "MobileNet v3 Large")->Apply(MobileNetV3Large)->UseRealTime();
1700*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v1_g1, "ShuffleNet v1 (1 group)")->Apply(ShuffleNetV1G1)->UseRealTime();
1701*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v1_g2, "ShuffleNet v1 (2 groups)")->Apply(ShuffleNetV1G2)->UseRealTime();
1702*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v1_g3, "ShuffleNet v1 (3 groups)")->Apply(ShuffleNetV1G3)->UseRealTime();
1703*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v1_g4, "ShuffleNet v1 (4 groups)")->Apply(ShuffleNetV1G4)->UseRealTime();
1704*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v1_g8, "ShuffleNet v1 (8 groups)")->Apply(ShuffleNetV1G8)->UseRealTime();
1705*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v2_x05, "ShuffleNet v2 0.5X")->Apply(ShuffleNetV2X05)->UseRealTime();
1706*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v2_x10, "ShuffleNet v2 1.0X")->Apply(ShuffleNetV2X10)->UseRealTime();
1707*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v2_x15, "ShuffleNet v2 1.5X")->Apply(ShuffleNetV2X15)->UseRealTime();
1708*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, shufflenet_v2_x20, "ShuffleNet v2 2.0X")->Apply(ShuffleNetV2X20)->UseRealTime();
1709*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, squeezenet_v10, "SqueezeNet 1.0")->Apply(SqueezeNetV10)->UseRealTime();
1710*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, squeezenet_v11, "SqueezeNet 1.1")->Apply(SqueezeNetV11)->UseRealTime();
1711*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, inception_v3, "Inception v3")->Apply(InceptionV3)->UseRealTime();
1712*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, resnet18, "ResNet-18")->Apply(ResNet18)->UseRealTime();
1713*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, resnet50, "ResNet-50")->Apply(ResNet50)->UseRealTime();
1714*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, vgg, "VGG")->Apply(VGG)->UseRealTime();
1715*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, srcnn915, "SRCNN (9-1-5)")->Apply(SRCNN915)->UseRealTime();
1716*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, srcnn935, "SRCNN (9-3-5)")->Apply(SRCNN935)->UseRealTime();
1717*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qs8, srcnn955, "SRCNN (9-5-5)")->Apply(SRCNN955)->UseRealTime();
1718*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_NO_QS8_OPERATORS
1719*4bdc9457SAndroid Build Coastguard Worker 
1720*4bdc9457SAndroid Build Coastguard Worker #ifndef XNN_NO_QU8_OPERATORS
1721*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, mobilenet_v1, "MobileNet v1")->Apply(MobileNetV1)->UseRealTime();
1722*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, mobilenet_v2, "MobileNet v2")->Apply(MobileNetV2)->UseRealTime();
1723*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, mobilenet_v3_small, "MobileNet v3 Small")->Apply(MobileNetV3Small)->UseRealTime();
1724*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, mobilenet_v3_large, "MobileNet v3 Large")->Apply(MobileNetV3Large)->UseRealTime();
1725*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v1_g1, "ShuffleNet v1 (1 group)")->Apply(ShuffleNetV1G1)->UseRealTime();
1726*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v1_g2, "ShuffleNet v1 (2 groups)")->Apply(ShuffleNetV1G2)->UseRealTime();
1727*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v1_g3, "ShuffleNet v1 (3 groups)")->Apply(ShuffleNetV1G3)->UseRealTime();
1728*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v1_g4, "ShuffleNet v1 (4 groups)")->Apply(ShuffleNetV1G4)->UseRealTime();
1729*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v1_g8, "ShuffleNet v1 (8 groups)")->Apply(ShuffleNetV1G8)->UseRealTime();
1730*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v2_x05, "ShuffleNet v2 0.5X")->Apply(ShuffleNetV2X05)->UseRealTime();
1731*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v2_x10, "ShuffleNet v2 1.0X")->Apply(ShuffleNetV2X10)->UseRealTime();
1732*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v2_x15, "ShuffleNet v2 1.5X")->Apply(ShuffleNetV2X15)->UseRealTime();
1733*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, shufflenet_v2_x20, "ShuffleNet v2 2.0X")->Apply(ShuffleNetV2X20)->UseRealTime();
1734*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, squeezenet_v10, "SqueezeNet 1.0")->Apply(SqueezeNetV10)->UseRealTime();
1735*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, squeezenet_v11, "SqueezeNet 1.1")->Apply(SqueezeNetV11)->UseRealTime();
1736*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, inception_v3, "Inception v3")->Apply(InceptionV3)->UseRealTime();
1737*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, resnet18, "ResNet-18")->Apply(ResNet18)->UseRealTime();
1738*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, resnet50, "ResNet-50")->Apply(ResNet50)->UseRealTime();
1739*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, vgg, "VGG")->Apply(VGG)->UseRealTime();
1740*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, srcnn915, "SRCNN (9-1-5)")->Apply(SRCNN915)->UseRealTime();
1741*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, srcnn935, "SRCNN (9-3-5)")->Apply(SRCNN935)->UseRealTime();
1742*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(xnnpack_convolution_qu8, srcnn955, "SRCNN (9-5-5)")->Apply(SRCNN955)->UseRealTime();
1743*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_NO_QU8_OPERATORS
1744*4bdc9457SAndroid Build Coastguard Worker 
1745*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_TENSORFLOW_LITE
1746*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, mobilenet_v1, "MobileNet v1")->Apply(MobileNetV1)->UseRealTime();
1747*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, mobilenet_v2, "MobileNet v2")->Apply(MobileNetV2)->UseRealTime();
1748*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, mobilenet_v3_small, "MobileNet v3 Small")->Apply(MobileNetV3Small)->UseRealTime();
1749*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, mobilenet_v3_large, "MobileNet v3 Large")->Apply(MobileNetV3Large)->UseRealTime();
1750*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v1_g1, "ShuffleNet v1 (1 group)")->Apply(ShuffleNetV1G1)->UseRealTime();
1751*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v1_g2, "ShuffleNet v1 (2 groups)")->Apply(ShuffleNetV1G2)->UseRealTime();
1752*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v1_g3, "ShuffleNet v1 (3 groups)")->Apply(ShuffleNetV1G3)->UseRealTime();
1753*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v1_g4, "ShuffleNet v1 (4 groups)")->Apply(ShuffleNetV1G4)->UseRealTime();
1754*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v1_g8, "ShuffleNet v1 (8 groups)")->Apply(ShuffleNetV1G8)->UseRealTime();
1755*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v2_x05, "ShuffleNet v2 0.5X")->Apply(ShuffleNetV2X05)->UseRealTime();
1756*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v2_x10, "ShuffleNet v2 1.0X")->Apply(ShuffleNetV2X10)->UseRealTime();
1757*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v2_x15, "ShuffleNet v2 1.5X")->Apply(ShuffleNetV2X15)->UseRealTime();
1758*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, shufflenet_v2_x20, "ShuffleNet v2 2.0X")->Apply(ShuffleNetV2X20)->UseRealTime();
1759*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, squeezenet_v10, "SqueezeNet 1.0")->Apply(SqueezeNetV10)->UseRealTime();
1760*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, squeezenet_v11, "SqueezeNet 1.1")->Apply(SqueezeNetV11)->UseRealTime();
1761*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, inception_v3, "Inception v3")->Apply(InceptionV3)->UseRealTime();
1762*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, resnet18, "ResNet-18")->Apply(ResNet18)->UseRealTime();
1763*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, resnet50, "ResNet-50")->Apply(ResNet50)->UseRealTime();
1764*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, vgg, "VGG")->Apply(VGG)->UseRealTime();
1765*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, srcnn915, "SRCNN (9-1-5)")->Apply(SRCNN915)->UseRealTime();
1766*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, srcnn935, "SRCNN (9-3-5)")->Apply(SRCNN935)->UseRealTime();
1767*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_CAPTURE(tflite_convolution_f32, srcnn955, "SRCNN (9-5-5)")->Apply(SRCNN955)->UseRealTime();
1768*4bdc9457SAndroid Build Coastguard Worker #endif  // BENCHMARK_TENSORFLOW_LITE
1769*4bdc9457SAndroid Build Coastguard Worker 
1770*4bdc9457SAndroid Build Coastguard Worker #ifndef XNNPACK_BENCHMARK_NO_MAIN
1771*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_MAIN();
1772*4bdc9457SAndroid Build Coastguard Worker #endif
1773