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 <chrono>
12*4bdc9457SAndroid Build Coastguard Worker #include <cmath>
13*4bdc9457SAndroid Build Coastguard Worker #include <functional>
14*4bdc9457SAndroid Build Coastguard Worker #include <limits>
15*4bdc9457SAndroid Build Coastguard Worker #include <mutex>
16*4bdc9457SAndroid Build Coastguard Worker #include <random>
17*4bdc9457SAndroid Build Coastguard Worker #include <vector>
18*4bdc9457SAndroid Build Coastguard Worker
19*4bdc9457SAndroid Build Coastguard Worker #include <cpuinfo.h>
20*4bdc9457SAndroid Build Coastguard Worker
21*4bdc9457SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
22*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_GEMMLOWP
23*4bdc9457SAndroid Build Coastguard Worker #include "gemmlowp/public/gemmlowp.h"
24*4bdc9457SAndroid Build Coastguard Worker #endif // BENCHMARK_GEMMLOWP
25*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_RUY
26*4bdc9457SAndroid Build Coastguard Worker #include "ruy/ruy.h"
27*4bdc9457SAndroid Build Coastguard Worker #endif // BENCHMARK_RUY
28*4bdc9457SAndroid Build Coastguard Worker #include "bench/gemm.h"
29*4bdc9457SAndroid Build Coastguard Worker #include "bench/utils.h"
30*4bdc9457SAndroid Build Coastguard Worker
31*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack.h>
32*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/aligned-allocator.h>
33*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
34*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/gemm.h>
35*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/math.h>
36*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/microfnptr.h>
37*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/microparams-init.h>
38*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/pack.h>
39*4bdc9457SAndroid Build Coastguard Worker
40*4bdc9457SAndroid Build Coastguard Worker
GEMMBenchmark(benchmark::State & state,xnn_qu8_gemm_minmax_ukernel_function gemm,xnn_init_qu8_conv_minmax_params_fn init_params,size_t mr,size_t nr,size_t kr,size_t sr,benchmark::utils::IsaCheckFunction isa_check=nullptr)41*4bdc9457SAndroid Build Coastguard Worker static void GEMMBenchmark(benchmark::State& state,
42*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_ukernel_function gemm,
43*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_params_fn init_params,
44*4bdc9457SAndroid Build Coastguard Worker size_t mr, size_t nr, size_t kr, size_t sr,
45*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::IsaCheckFunction isa_check = nullptr)
46*4bdc9457SAndroid Build Coastguard Worker {
47*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize()) {
48*4bdc9457SAndroid Build Coastguard Worker state.SkipWithError("cpuinfo initialization failed");
49*4bdc9457SAndroid Build Coastguard Worker return;
50*4bdc9457SAndroid Build Coastguard Worker }
51*4bdc9457SAndroid Build Coastguard Worker if (isa_check && !isa_check(state)) {
52*4bdc9457SAndroid Build Coastguard Worker return;
53*4bdc9457SAndroid Build Coastguard Worker }
54*4bdc9457SAndroid Build Coastguard Worker
55*4bdc9457SAndroid Build Coastguard Worker const size_t mc = state.range(0);
56*4bdc9457SAndroid Build Coastguard Worker const size_t nc = state.range(1);
57*4bdc9457SAndroid Build Coastguard Worker const size_t kc = state.range(2);
58*4bdc9457SAndroid Build Coastguard Worker
59*4bdc9457SAndroid Build Coastguard Worker const size_t nc_stride = benchmark::utils::RoundUp(nc, nr);
60*4bdc9457SAndroid Build Coastguard Worker const size_t kc_stride = benchmark::utils::RoundUp(kc, kr * sr);
61*4bdc9457SAndroid Build Coastguard Worker
62*4bdc9457SAndroid Build Coastguard Worker std::random_device random_device;
63*4bdc9457SAndroid Build Coastguard Worker auto rng = std::mt19937(random_device());
64*4bdc9457SAndroid Build Coastguard Worker auto i32rng = std::bind(std::uniform_int_distribution<int32_t>(-10000, 10000), std::ref(rng));
65*4bdc9457SAndroid Build Coastguard Worker auto u8rng = std::bind(std::uniform_int_distribution<uint32_t>(0, std::numeric_limits<uint8_t>::max()), std::ref(rng));
66*4bdc9457SAndroid Build Coastguard Worker
67*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> a(mc * kc + XNN_EXTRA_BYTES / sizeof(uint8_t));
68*4bdc9457SAndroid Build Coastguard Worker std::generate(a.begin(), a.end(), std::ref(u8rng));
69*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> k(nc * kc);
70*4bdc9457SAndroid Build Coastguard Worker std::generate(k.begin(), k.end(), std::ref(u8rng));
71*4bdc9457SAndroid Build Coastguard Worker std::vector<int32_t> b(nc);
72*4bdc9457SAndroid Build Coastguard Worker std::generate(b.begin(), b.end(), std::ref(i32rng));
73*4bdc9457SAndroid Build Coastguard Worker
74*4bdc9457SAndroid Build Coastguard Worker const size_t w_elements = kc_stride * nc_stride + nc_stride * sizeof(int32_t) / sizeof(uint8_t);
75*4bdc9457SAndroid Build Coastguard Worker const size_t c_elements = mc * nc;
76*4bdc9457SAndroid Build Coastguard Worker const size_t num_buffers = 1 +
77*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::DivideRoundUp<size_t>(benchmark::utils::GetMaxCacheSize(),
78*4bdc9457SAndroid Build Coastguard Worker sizeof(uint8_t) * (w_elements + c_elements));
79*4bdc9457SAndroid Build Coastguard Worker
80*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t, AlignedAllocator<uint8_t, 64>> w(w_elements * num_buffers);
81*4bdc9457SAndroid Build Coastguard Worker std::fill(w.begin(), w.end(), 0);
82*4bdc9457SAndroid Build Coastguard Worker const xnn_qu8_packing_params packing_params = { 127, 127 };
83*4bdc9457SAndroid Build Coastguard Worker xnn_pack_qu8_gemm_goi_w(1 /* groups */, nc, kc, nr, kr, sr, k.data(), b.data(), w.data(), 0, &packing_params);
84*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> c(c_elements * num_buffers);
85*4bdc9457SAndroid Build Coastguard Worker std::fill(c.begin(), c.end(), 0xA5);
86*4bdc9457SAndroid Build Coastguard Worker
87*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_conv_minmax_params quantization_params;
88*4bdc9457SAndroid Build Coastguard Worker init_params(&quantization_params, 127, 0.75f, 127, 1, 254);
89*4bdc9457SAndroid Build Coastguard Worker
90*4bdc9457SAndroid Build Coastguard Worker size_t buffer_index = 0;
91*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
92*4bdc9457SAndroid Build Coastguard Worker // Use circular buffers (exceeding cache size) and prefetch to control cache state:
93*4bdc9457SAndroid Build Coastguard Worker // - A is always in L1 cache (if fits, otherwise L2, L3, etc)
94*4bdc9457SAndroid Build Coastguard Worker // - W is not in cache (for any cache level)
95*4bdc9457SAndroid Build Coastguard Worker // - C is not in cache (for any cache level)
96*4bdc9457SAndroid Build Coastguard Worker state.PauseTiming();
97*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::PrefetchToL1(a.data(), a.size() * sizeof(uint8_t));
98*4bdc9457SAndroid Build Coastguard Worker buffer_index = (buffer_index + 1) % num_buffers;
99*4bdc9457SAndroid Build Coastguard Worker state.ResumeTiming();
100*4bdc9457SAndroid Build Coastguard Worker
101*4bdc9457SAndroid Build Coastguard Worker for (uint32_t m = 0; m < mc; m += mr) {
102*4bdc9457SAndroid Build Coastguard Worker const uint32_t mb = min(mc - m, mr);
103*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 0; n < nc; n += nr) {
104*4bdc9457SAndroid Build Coastguard Worker const uint32_t nb = min(nc - n, nr);
105*4bdc9457SAndroid Build Coastguard Worker gemm(
106*4bdc9457SAndroid Build Coastguard Worker mb, nb, kc * sizeof(uint8_t),
107*4bdc9457SAndroid Build Coastguard Worker a.data() + m * kc, kc * sizeof(uint8_t),
108*4bdc9457SAndroid Build Coastguard Worker w.data() + (w_elements * buffer_index + n * (kc_stride + sizeof(int32_t))) / sizeof(uint8_t),
109*4bdc9457SAndroid Build Coastguard Worker c.data() + (mc * buffer_index + m) * nc + n, nc * sizeof(uint8_t), nr * sizeof(uint8_t),
110*4bdc9457SAndroid Build Coastguard Worker &quantization_params);
111*4bdc9457SAndroid Build Coastguard Worker }
112*4bdc9457SAndroid Build Coastguard Worker }
113*4bdc9457SAndroid Build Coastguard Worker }
114*4bdc9457SAndroid Build Coastguard Worker
115*4bdc9457SAndroid Build Coastguard Worker const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
116*4bdc9457SAndroid Build Coastguard Worker if (cpu_frequency != 0) {
117*4bdc9457SAndroid Build Coastguard Worker state.counters["cpufreq"] = cpu_frequency;
118*4bdc9457SAndroid Build Coastguard Worker }
119*4bdc9457SAndroid Build Coastguard Worker
120*4bdc9457SAndroid Build Coastguard Worker state.counters["OPS"] = benchmark::Counter(
121*4bdc9457SAndroid Build Coastguard Worker uint64_t(state.iterations()) * 2 * mc * nc * kc, benchmark::Counter::kIsRate);
122*4bdc9457SAndroid Build Coastguard Worker }
123*4bdc9457SAndroid Build Coastguard Worker
124*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_GEMMLOWP
125*4bdc9457SAndroid Build Coastguard Worker struct GemmlowpOutputPipeline {
126*4bdc9457SAndroid Build Coastguard Worker typedef gemmlowp::VectorMap<const int32_t, gemmlowp::VectorShape::Col> ColVectorMap;
127*4bdc9457SAndroid Build Coastguard Worker typedef std::tuple<
128*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageBiasAddition<ColVectorMap>,
129*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageQuantizeDownInt32ToUint8ScaleByFixedPoint,
130*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageClamp,
131*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageSaturatingCastToUint8>
132*4bdc9457SAndroid Build Coastguard Worker Pipeline;
133*4bdc9457SAndroid Build Coastguard Worker
MakeGemmlowpOutputPipeline134*4bdc9457SAndroid Build Coastguard Worker static Pipeline Make(
135*4bdc9457SAndroid Build Coastguard Worker const int32_t* bias_data,
136*4bdc9457SAndroid Build Coastguard Worker int output_rows,
137*4bdc9457SAndroid Build Coastguard Worker int32_t output_offset,
138*4bdc9457SAndroid Build Coastguard Worker int32_t output_multiplier,
139*4bdc9457SAndroid Build Coastguard Worker int output_shift,
140*4bdc9457SAndroid Build Coastguard Worker int32_t output_activation_min,
141*4bdc9457SAndroid Build Coastguard Worker int32_t output_activation_max)
142*4bdc9457SAndroid Build Coastguard Worker {
143*4bdc9457SAndroid Build Coastguard Worker ColVectorMap bias_vector(bias_data, output_rows);
144*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageBiasAddition<ColVectorMap> bias_addition_stage;
145*4bdc9457SAndroid Build Coastguard Worker bias_addition_stage.bias_vector = bias_vector;
146*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageQuantizeDownInt32ToUint8ScaleByFixedPoint quantize_down_stage;
147*4bdc9457SAndroid Build Coastguard Worker quantize_down_stage.result_offset_after_shift = output_offset;
148*4bdc9457SAndroid Build Coastguard Worker quantize_down_stage.result_fixedpoint_multiplier = output_multiplier;
149*4bdc9457SAndroid Build Coastguard Worker quantize_down_stage.result_shift = output_shift;
150*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageClamp clamp_stage;
151*4bdc9457SAndroid Build Coastguard Worker clamp_stage.min = output_activation_min;
152*4bdc9457SAndroid Build Coastguard Worker clamp_stage.max = output_activation_max;
153*4bdc9457SAndroid Build Coastguard Worker gemmlowp::OutputStageSaturatingCastToUint8 saturating_cast_stage;
154*4bdc9457SAndroid Build Coastguard Worker return std::make_tuple(bias_addition_stage, quantize_down_stage, clamp_stage, saturating_cast_stage);
155*4bdc9457SAndroid Build Coastguard Worker }
156*4bdc9457SAndroid Build Coastguard Worker };
157*4bdc9457SAndroid Build Coastguard Worker
GemmlowpBenchmark(benchmark::State & state,uint32_t threads)158*4bdc9457SAndroid Build Coastguard Worker static void GemmlowpBenchmark(benchmark::State& state, uint32_t threads)
159*4bdc9457SAndroid Build Coastguard Worker {
160*4bdc9457SAndroid Build Coastguard Worker const size_t mc = state.range(0);
161*4bdc9457SAndroid Build Coastguard Worker const size_t nc = state.range(1);
162*4bdc9457SAndroid Build Coastguard Worker const size_t kc = state.range(2);
163*4bdc9457SAndroid Build Coastguard Worker
164*4bdc9457SAndroid Build Coastguard Worker std::random_device random_device;
165*4bdc9457SAndroid Build Coastguard Worker auto rng = std::mt19937(random_device());
166*4bdc9457SAndroid Build Coastguard Worker auto i32rng = std::bind(std::uniform_int_distribution<int32_t>(-10000, 10000), std::ref(rng));
167*4bdc9457SAndroid Build Coastguard Worker auto u8rng = std::bind(std::uniform_int_distribution<uint32_t>(0, std::numeric_limits<uint8_t>::max()), std::ref(rng));
168*4bdc9457SAndroid Build Coastguard Worker
169*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> a(mc * kc);
170*4bdc9457SAndroid Build Coastguard Worker std::generate(a.begin(), a.end(), std::ref(u8rng));
171*4bdc9457SAndroid Build Coastguard Worker
172*4bdc9457SAndroid Build Coastguard Worker const size_t kElements = nc * kc;
173*4bdc9457SAndroid Build Coastguard Worker const size_t bElements = nc;
174*4bdc9457SAndroid Build Coastguard Worker const size_t c_elements = mc * nc;
175*4bdc9457SAndroid Build Coastguard Worker const size_t num_buffers = 1 +
176*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::DivideRoundUp<size_t>(benchmark::utils::GetMaxCacheSize(),
177*4bdc9457SAndroid Build Coastguard Worker kElements * sizeof(uint8_t) + bElements * sizeof(int32_t) + c_elements * sizeof(uint8_t));
178*4bdc9457SAndroid Build Coastguard Worker
179*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> k(kElements * num_buffers);
180*4bdc9457SAndroid Build Coastguard Worker std::generate(k.begin(), k.end(), std::ref(u8rng));
181*4bdc9457SAndroid Build Coastguard Worker std::vector<int32_t> b(bElements * num_buffers);
182*4bdc9457SAndroid Build Coastguard Worker std::generate(b.begin(), b.end(), std::ref(i32rng));
183*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> c(c_elements * num_buffers);
184*4bdc9457SAndroid Build Coastguard Worker std::fill(c.begin(), c.end(), 0xA5);
185*4bdc9457SAndroid Build Coastguard Worker
186*4bdc9457SAndroid Build Coastguard Worker gemmlowp::MultiThreadGemmContext threadingContext;
187*4bdc9457SAndroid Build Coastguard Worker threadingContext.set_max_num_threads(threads);
188*4bdc9457SAndroid Build Coastguard Worker
189*4bdc9457SAndroid Build Coastguard Worker size_t buffer_index = 0;
190*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
191*4bdc9457SAndroid Build Coastguard Worker state.PauseTiming();
192*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::PrefetchToL1(a.data(), a.size() * sizeof(uint8_t));
193*4bdc9457SAndroid Build Coastguard Worker buffer_index = (buffer_index + 1) % num_buffers;
194*4bdc9457SAndroid Build Coastguard Worker state.ResumeTiming();
195*4bdc9457SAndroid Build Coastguard Worker
196*4bdc9457SAndroid Build Coastguard Worker gemmlowp::MatrixMap<const uint8_t, gemmlowp::MapOrder::RowMajor> AM(a.data(), mc, kc, kc);
197*4bdc9457SAndroid Build Coastguard Worker gemmlowp::MatrixMap<const uint8_t, gemmlowp::MapOrder::ColMajor> BM(k.data() + buffer_index * kElements, kc, nc, kc);
198*4bdc9457SAndroid Build Coastguard Worker gemmlowp::MatrixMap<uint8_t, gemmlowp::MapOrder::RowMajor> CM(c.data() + buffer_index * c_elements, mc, nc, nc);
199*4bdc9457SAndroid Build Coastguard Worker const auto& outputPipeline = GemmlowpOutputPipeline::Make(b.data() + buffer_index * bElements, nc, 127, 127, 127, 0, 255);
200*4bdc9457SAndroid Build Coastguard Worker gemmlowp::GemmWithOutputPipeline<uint8_t, uint8_t, gemmlowp::L8R8WithLhsNonzeroBitDepthParams>(
201*4bdc9457SAndroid Build Coastguard Worker &threadingContext, AM, BM, &CM, 127, 127, outputPipeline);
202*4bdc9457SAndroid Build Coastguard Worker }
203*4bdc9457SAndroid Build Coastguard Worker
204*4bdc9457SAndroid Build Coastguard Worker const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
205*4bdc9457SAndroid Build Coastguard Worker if (cpu_frequency != 0) {
206*4bdc9457SAndroid Build Coastguard Worker state.counters["cpufreq"] = cpu_frequency;
207*4bdc9457SAndroid Build Coastguard Worker }
208*4bdc9457SAndroid Build Coastguard Worker
209*4bdc9457SAndroid Build Coastguard Worker state.counters["OPS"] = benchmark::Counter(
210*4bdc9457SAndroid Build Coastguard Worker uint64_t(state.iterations()) * 2 * mc * nc * kc, benchmark::Counter::kIsRate);
211*4bdc9457SAndroid Build Coastguard Worker }
212*4bdc9457SAndroid Build Coastguard Worker
gemmlowp_st(benchmark::State & state,const char * net)213*4bdc9457SAndroid Build Coastguard Worker static void gemmlowp_st(benchmark::State& state, const char* net)
214*4bdc9457SAndroid Build Coastguard Worker {
215*4bdc9457SAndroid Build Coastguard Worker GemmlowpBenchmark(state, 1);
216*4bdc9457SAndroid Build Coastguard Worker }
217*4bdc9457SAndroid Build Coastguard Worker #endif // BENCHMARK_GEMMLOWP
218*4bdc9457SAndroid Build Coastguard Worker
219*4bdc9457SAndroid Build Coastguard Worker
220*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_RUY
RuyBenchmark(benchmark::State & state,size_t threads)221*4bdc9457SAndroid Build Coastguard Worker static void RuyBenchmark(benchmark::State& state, size_t threads)
222*4bdc9457SAndroid Build Coastguard Worker {
223*4bdc9457SAndroid Build Coastguard Worker const size_t mc = state.range(0);
224*4bdc9457SAndroid Build Coastguard Worker const size_t nc = state.range(1);
225*4bdc9457SAndroid Build Coastguard Worker const size_t kc = state.range(2);
226*4bdc9457SAndroid Build Coastguard Worker
227*4bdc9457SAndroid Build Coastguard Worker std::random_device random_device;
228*4bdc9457SAndroid Build Coastguard Worker auto rng = std::mt19937(random_device());
229*4bdc9457SAndroid Build Coastguard Worker auto i32rng = std::bind(std::uniform_int_distribution<int32_t>(-10000, 10000), std::ref(rng));
230*4bdc9457SAndroid Build Coastguard Worker auto u8rng = std::bind(std::uniform_int_distribution<uint32_t>(0, std::numeric_limits<uint8_t>::max()), std::ref(rng));
231*4bdc9457SAndroid Build Coastguard Worker
232*4bdc9457SAndroid Build Coastguard Worker const size_t num_buffers = 1 +
233*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::DivideRoundUp<size_t>(benchmark::utils::GetMaxCacheSize(),
234*4bdc9457SAndroid Build Coastguard Worker nc * (sizeof(uint8_t) * (mc + kc) + sizeof(int32_t)));
235*4bdc9457SAndroid Build Coastguard Worker
236*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> a(mc * kc);
237*4bdc9457SAndroid Build Coastguard Worker std::generate(a.begin(), a.end(), std::ref(u8rng));
238*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> k(num_buffers * nc * kc);
239*4bdc9457SAndroid Build Coastguard Worker std::generate(k.begin(), k.end(), std::ref(u8rng));
240*4bdc9457SAndroid Build Coastguard Worker std::vector<int32_t> b(num_buffers * nc);
241*4bdc9457SAndroid Build Coastguard Worker std::generate(b.begin(), b.end(), std::ref(i32rng));
242*4bdc9457SAndroid Build Coastguard Worker std::vector<uint8_t> c(num_buffers * nc * mc);
243*4bdc9457SAndroid Build Coastguard Worker std::fill(c.begin(), c.end(), std::nanf(""));
244*4bdc9457SAndroid Build Coastguard Worker
245*4bdc9457SAndroid Build Coastguard Worker // Note: context must be static to avoid the cost of re-creating it for each benchmark.
246*4bdc9457SAndroid Build Coastguard Worker static ruy::Context context;
247*4bdc9457SAndroid Build Coastguard Worker context.set_max_num_threads(threads);
248*4bdc9457SAndroid Build Coastguard Worker
249*4bdc9457SAndroid Build Coastguard Worker ruy::Matrix<uint8_t> ruy_a;
250*4bdc9457SAndroid Build Coastguard Worker ruy::MakeSimpleLayout(nc, kc, ruy::Order::kRowMajor, ruy_a.mutable_layout());
251*4bdc9457SAndroid Build Coastguard Worker ruy_a.set_zero_point(127);
252*4bdc9457SAndroid Build Coastguard Worker ruy::Matrix<uint8_t> ruy_b;
253*4bdc9457SAndroid Build Coastguard Worker ruy::MakeSimpleLayout(kc, mc, ruy::Order::kColMajor, ruy_b.mutable_layout());
254*4bdc9457SAndroid Build Coastguard Worker ruy_b.set_data(a.data());
255*4bdc9457SAndroid Build Coastguard Worker ruy_b.set_zero_point(127);
256*4bdc9457SAndroid Build Coastguard Worker ruy::Matrix<uint8_t> ruy_c;
257*4bdc9457SAndroid Build Coastguard Worker ruy::MakeSimpleLayout(nc, mc, ruy::Order::kColMajor, ruy_c.mutable_layout());
258*4bdc9457SAndroid Build Coastguard Worker ruy_c.set_zero_point(127);
259*4bdc9457SAndroid Build Coastguard Worker
260*4bdc9457SAndroid Build Coastguard Worker ruy::MulParams<int32_t, uint8_t> mul_params;
261*4bdc9457SAndroid Build Coastguard Worker mul_params.set_multiplier_fixedpoint(0x40000000);
262*4bdc9457SAndroid Build Coastguard Worker
263*4bdc9457SAndroid Build Coastguard Worker // ruy::Context uses deferred initialization, which affects percieved GEMM performance. Initialization happens during
264*4bdc9457SAndroid Build Coastguard Worker // the first GEMM calls, and per Benoit Jacob it takes up to ~250 milliseconds for performance to stabilize.
265*4bdc9457SAndroid Build Coastguard Worker // Thus, on the first benchmark, we compute GEMM for 500 milliseconds (to be safe) without recording performance, and
266*4bdc9457SAndroid Build Coastguard Worker // keep the ruy::Context object initialized (by being static) between subsequent benchmarks.
267*4bdc9457SAndroid Build Coastguard Worker static std::once_flag warmup;
268*4bdc9457SAndroid Build Coastguard Worker std::call_once(warmup, [&](){
269*4bdc9457SAndroid Build Coastguard Worker auto start = std::chrono::steady_clock::now();
270*4bdc9457SAndroid Build Coastguard Worker do {
271*4bdc9457SAndroid Build Coastguard Worker ruy_a.set_data(k.data());
272*4bdc9457SAndroid Build Coastguard Worker ruy_c.set_data(c.data());
273*4bdc9457SAndroid Build Coastguard Worker mul_params.set_bias(b.data());
274*4bdc9457SAndroid Build Coastguard Worker
275*4bdc9457SAndroid Build Coastguard Worker ruy::Mul(ruy_a, ruy_b, mul_params, &context, &ruy_c);
276*4bdc9457SAndroid Build Coastguard Worker } while (std::chrono::duration<double>(std::chrono::steady_clock::now() - start).count() < 0.5);
277*4bdc9457SAndroid Build Coastguard Worker });
278*4bdc9457SAndroid Build Coastguard Worker
279*4bdc9457SAndroid Build Coastguard Worker size_t buffer_index = 0;
280*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
281*4bdc9457SAndroid Build Coastguard Worker // Use circular buffers (exceeding cache size) and prefetch to control cache state:
282*4bdc9457SAndroid Build Coastguard Worker // - A is always in L1 cache (if fits, otherwise L2, L3, etc)
283*4bdc9457SAndroid Build Coastguard Worker // - K is not in cache (for any cache level)
284*4bdc9457SAndroid Build Coastguard Worker // - B is not in cache (for any cache level)
285*4bdc9457SAndroid Build Coastguard Worker // - C is not in cache (for any cache level)
286*4bdc9457SAndroid Build Coastguard Worker state.PauseTiming();
287*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::PrefetchToL1(a.data(), a.size() * sizeof(uint8_t));
288*4bdc9457SAndroid Build Coastguard Worker buffer_index = (buffer_index + 1) % num_buffers;
289*4bdc9457SAndroid Build Coastguard Worker state.ResumeTiming();
290*4bdc9457SAndroid Build Coastguard Worker
291*4bdc9457SAndroid Build Coastguard Worker ruy_a.set_data(k.data() + buffer_index * nc * kc);
292*4bdc9457SAndroid Build Coastguard Worker ruy_c.set_data(c.data() + buffer_index * mc * nc);
293*4bdc9457SAndroid Build Coastguard Worker mul_params.set_bias(b.data() + buffer_index * nc);
294*4bdc9457SAndroid Build Coastguard Worker
295*4bdc9457SAndroid Build Coastguard Worker ruy::Mul(ruy_a, ruy_b, mul_params, &context, &ruy_c);
296*4bdc9457SAndroid Build Coastguard Worker }
297*4bdc9457SAndroid Build Coastguard Worker
298*4bdc9457SAndroid Build Coastguard Worker const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
299*4bdc9457SAndroid Build Coastguard Worker if (cpu_frequency != 0) {
300*4bdc9457SAndroid Build Coastguard Worker state.counters["cpufreq"] = cpu_frequency;
301*4bdc9457SAndroid Build Coastguard Worker }
302*4bdc9457SAndroid Build Coastguard Worker
303*4bdc9457SAndroid Build Coastguard Worker state.counters["OPS"] = benchmark::Counter(
304*4bdc9457SAndroid Build Coastguard Worker uint64_t(state.iterations()) * 2 * mc * nc * kc, benchmark::Counter::kIsRate);
305*4bdc9457SAndroid Build Coastguard Worker }
306*4bdc9457SAndroid Build Coastguard Worker
ruy_st(benchmark::State & state,const char * net)307*4bdc9457SAndroid Build Coastguard Worker static void ruy_st(benchmark::State& state, const char* net)
308*4bdc9457SAndroid Build Coastguard Worker {
309*4bdc9457SAndroid Build Coastguard Worker RuyBenchmark(state, 1);
310*4bdc9457SAndroid Build Coastguard Worker }
311*4bdc9457SAndroid Build Coastguard Worker #endif // BENCHMARK_RUY
312*4bdc9457SAndroid Build Coastguard Worker
313*4bdc9457SAndroid Build Coastguard Worker
314*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
qu8_gemm_4x8__aarch32_neon_mlal_lane_cortex_a53(benchmark::State & state,const char * net)315*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8__aarch32_neon_mlal_lane_cortex_a53(benchmark::State& state, const char* net) {
316*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
317*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53,
318*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
319*4bdc9457SAndroid Build Coastguard Worker 4, 8, 1, 1, benchmark::utils::CheckNEON);
320*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53(benchmark::State & state,const char * net)321*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53(benchmark::State& state, const char* net) {
322*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state, xnn_qu8_gemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53,
323*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
324*4bdc9457SAndroid Build Coastguard Worker 4, 8, 1, 1, benchmark::utils::CheckNEON);
325*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8__aarch32_neon_mlal_lane_cortex_a7(benchmark::State & state,const char * net)326*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8__aarch32_neon_mlal_lane_cortex_a7(benchmark::State& state, const char* net) {
327*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
328*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a7,
329*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
330*4bdc9457SAndroid Build Coastguard Worker 4, 8, 1, 1, benchmark::utils::CheckNEON);
331*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_cortex_a7(benchmark::State & state,const char * net)332*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_cortex_a7(benchmark::State& state, const char* net) {
333*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state, xnn_qu8_gemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a7,
334*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
335*4bdc9457SAndroid Build Coastguard Worker 4, 8, 1, 1, benchmark::utils::CheckNEON);
336*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8__aarch32_neon_mlal_lane_ld64(benchmark::State & state,const char * net)337*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8__aarch32_neon_mlal_lane_ld64(benchmark::State& state, const char* net) {
338*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
339*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_ld64,
340*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
341*4bdc9457SAndroid Build Coastguard Worker 4, 8, 1, 1, benchmark::utils::CheckNEON);
342*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_ld64(benchmark::State & state,const char * net)343*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_ld64(benchmark::State& state, const char* net) {
344*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state, xnn_qu8_gemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_ld64,
345*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
346*4bdc9457SAndroid Build Coastguard Worker 4, 8, 1, 1, benchmark::utils::CheckNEON);
347*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x8__aarch32_neon_mlal_lane_cortex_a7(benchmark::State & state,const char * net)348*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x8__aarch32_neon_mlal_lane_cortex_a7(benchmark::State& state, const char* net) {
349*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
350*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7,
351*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
352*4bdc9457SAndroid Build Coastguard Worker 1, 8, 1, 1, benchmark::utils::CheckNEON);
353*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x8__aarch32_neon_mlal_lane_prfm_cortex_a7(benchmark::State & state,const char * net)354*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x8__aarch32_neon_mlal_lane_prfm_cortex_a7(benchmark::State& state, const char* net) {
355*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state, xnn_qu8_gemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_prfm_cortex_a7,
356*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
357*4bdc9457SAndroid Build Coastguard Worker 1, 8, 1, 1, benchmark::utils::CheckNEON);
358*4bdc9457SAndroid Build Coastguard Worker }
359*4bdc9457SAndroid Build Coastguard Worker
360*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8__aarch32_neon_mlal_lane_cortex_a53)
BENCHMARK_GEMM(qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53)361*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53)
362*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8__aarch32_neon_mlal_lane_cortex_a7)
363*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_cortex_a7)
364*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8__aarch32_neon_mlal_lane_ld64)
365*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8__aarch32_neon_mlal_lane_prfm_ld64)
366*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x8__aarch32_neon_mlal_lane_cortex_a7)
367*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x8__aarch32_neon_mlal_lane_prfm_cortex_a7)
368*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
369*4bdc9457SAndroid Build Coastguard Worker
370*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
371*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16c4__aarch64_neondot_cortex_a55(benchmark::State& state, const char* net) {
372*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
373*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55,
374*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
375*4bdc9457SAndroid Build Coastguard Worker 4, 16, 4, 1, benchmark::utils::CheckNEONDOT);
376*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16c4__aarch64_neondot_ld128(benchmark::State & state,const char * net)377*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16c4__aarch64_neondot_ld128(benchmark::State& state, const char* net) {
378*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
379*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128,
380*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
381*4bdc9457SAndroid Build Coastguard Worker 4, 16, 4, 1, benchmark::utils::CheckNEONDOT);
382*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8c4__aarch64_neondot_ld128(benchmark::State & state,const char * net)383*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8c4__aarch64_neondot_ld128(benchmark::State& state, const char* net) {
384*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
385*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x8c4__aarch64_neondot_ld128,
386*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
387*4bdc9457SAndroid Build Coastguard Worker 4, 8, 4, 1,
388*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONDOT);
389*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8c4__aarch64_neondot_cortex_a55(benchmark::State & state,const char * net)390*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8c4__aarch64_neondot_cortex_a55(benchmark::State& state, const char* net) {
391*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
392*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x8c4__aarch64_neondot_cortex_a55,
393*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
394*4bdc9457SAndroid Build Coastguard Worker 4, 8, 4, 1, benchmark::utils::CheckNEONDOT);
395*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16__aarch64_neon_mlal_lane_cortex_a53(benchmark::State & state,const char * net)396*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16__aarch64_neon_mlal_lane_cortex_a53(benchmark::State& state, const char* net) {
397*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
398*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53,
399*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
400*4bdc9457SAndroid Build Coastguard Worker 4, 16, 1, 1,
401*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON);
402*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_cortex_a53(benchmark::State & state,const char * net)403*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_cortex_a53(benchmark::State& state, const char* net) {
404*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
405*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a53,
406*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
407*4bdc9457SAndroid Build Coastguard Worker 4, 16, 1, 1,
408*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON);
409*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16__aarch64_neon_mlal_lane_ld64(benchmark::State & state,const char * net)410*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16__aarch64_neon_mlal_lane_ld64(benchmark::State& state, const char* net) {
411*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
412*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_ld64,
413*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
414*4bdc9457SAndroid Build Coastguard Worker 4, 16, 1, 1,
415*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON);
416*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_ld64(benchmark::State & state,const char * net)417*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_ld64(benchmark::State& state, const char* net) {
418*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
419*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_ld64,
420*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
421*4bdc9457SAndroid Build Coastguard Worker 4, 16, 1, 1,
422*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON);
423*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16__aarch64_neon_mlal_lane_cortex_a75(benchmark::State & state,const char * net)424*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16__aarch64_neon_mlal_lane_cortex_a75(benchmark::State& state, const char* net) {
425*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
426*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a75,
427*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
428*4bdc9457SAndroid Build Coastguard Worker 4, 16, 1, 1,
429*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON);
430*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75(benchmark::State & state,const char * net)431*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75(benchmark::State& state, const char* net) {
432*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
433*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75,
434*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
435*4bdc9457SAndroid Build Coastguard Worker 4, 16, 1, 1,
436*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON);
437*4bdc9457SAndroid Build Coastguard Worker }
438*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8c4__aarch64_neondot_cortex_a55)
BENCHMARK_GEMM(qu8_gemm_4x16c4__aarch64_neondot_cortex_a55)439*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16c4__aarch64_neondot_cortex_a55)
440*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8c4__aarch64_neondot_ld128)
441*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16c4__aarch64_neondot_ld128)
442*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16__aarch64_neon_mlal_lane_cortex_a53)
443*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_cortex_a53)
444*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16__aarch64_neon_mlal_lane_ld64)
445*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_ld64)
446*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16__aarch64_neon_mlal_lane_cortex_a75)
447*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75)
448*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
449*4bdc9457SAndroid Build Coastguard Worker
450*4bdc9457SAndroid Build Coastguard Worker
451*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
452*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x8c4__neondot(benchmark::State& state, const char* net) {
453*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
454*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_1x8c4__neondot,
455*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
456*4bdc9457SAndroid Build Coastguard Worker 1, 8, 4, 1, benchmark::utils::CheckNEONDOT);
457*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x8c4__neondot(benchmark::State & state,const char * net)458*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x8c4__neondot(benchmark::State& state, const char* net) {
459*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
460*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_2x8c4__neondot,
461*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
462*4bdc9457SAndroid Build Coastguard Worker 2, 8, 4, 1, benchmark::utils::CheckNEONDOT);
463*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x8c4__neondot(benchmark::State & state,const char * net)464*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x8c4__neondot(benchmark::State& state, const char* net) {
465*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
466*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_3x8c4__neondot,
467*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
468*4bdc9457SAndroid Build Coastguard Worker 3, 8, 4, 1, benchmark::utils::CheckNEONDOT);
469*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8c4__neondot(benchmark::State & state,const char * net)470*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8c4__neondot(benchmark::State& state, const char* net) {
471*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
472*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x8c4__neondot,
473*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
474*4bdc9457SAndroid Build Coastguard Worker 4, 8, 4, 1, benchmark::utils::CheckNEONDOT);
475*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_5x8c4__neondot(benchmark::State & state,const char * net)476*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_5x8c4__neondot(benchmark::State& state, const char* net) {
477*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
478*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_5x8c4__neondot,
479*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
480*4bdc9457SAndroid Build Coastguard Worker 5, 8, 4, 1, benchmark::utils::CheckNEONDOT);
481*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_6x8c4__neondot(benchmark::State & state,const char * net)482*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_6x8c4__neondot(benchmark::State& state, const char* net) {
483*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
484*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_6x8c4__neondot,
485*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
486*4bdc9457SAndroid Build Coastguard Worker 6, 8, 4, 1, benchmark::utils::CheckNEONDOT);
487*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_8x8c4__neondot(benchmark::State & state,const char * net)488*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_8x8c4__neondot(benchmark::State& state, const char* net) {
489*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
490*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_8x8c4__neondot,
491*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
492*4bdc9457SAndroid Build Coastguard Worker 8, 8, 4, 1, benchmark::utils::CheckNEONDOT);
493*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x16c4__neondot(benchmark::State & state,const char * net)494*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x16c4__neondot(benchmark::State& state, const char* net) {
495*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
496*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_1x16c4__neondot,
497*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
498*4bdc9457SAndroid Build Coastguard Worker 1, 16, 4, 1, benchmark::utils::CheckNEONDOT);
499*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x16c4__neondot(benchmark::State & state,const char * net)500*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x16c4__neondot(benchmark::State& state, const char* net) {
501*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
502*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_2x16c4__neondot,
503*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
504*4bdc9457SAndroid Build Coastguard Worker 2, 16, 4, 1, benchmark::utils::CheckNEONDOT);
505*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x16c4__neondot(benchmark::State & state,const char * net)506*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x16c4__neondot(benchmark::State& state, const char* net) {
507*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
508*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_3x16c4__neondot,
509*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
510*4bdc9457SAndroid Build Coastguard Worker 3, 16, 4, 1, benchmark::utils::CheckNEONDOT);
511*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16c4__neondot(benchmark::State & state,const char * net)512*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16c4__neondot(benchmark::State& state, const char* net) {
513*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
514*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16c4__neondot,
515*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
516*4bdc9457SAndroid Build Coastguard Worker 4, 16, 4, 1, benchmark::utils::CheckNEONDOT);
517*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_5x16c4__neondot(benchmark::State & state,const char * net)518*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_5x16c4__neondot(benchmark::State& state, const char* net) {
519*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
520*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_5x16c4__neondot,
521*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
522*4bdc9457SAndroid Build Coastguard Worker 5, 16, 4, 1, benchmark::utils::CheckNEONDOT);
523*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_6x16c4__neondot(benchmark::State & state,const char * net)524*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_6x16c4__neondot(benchmark::State& state, const char* net) {
525*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
526*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_6x16c4__neondot,
527*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
528*4bdc9457SAndroid Build Coastguard Worker 6, 16, 4, 1, benchmark::utils::CheckNEONDOT);
529*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_8x16c4__neondot(benchmark::State & state,const char * net)530*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_8x16c4__neondot(benchmark::State& state, const char* net) {
531*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
532*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_8x16c4__neondot,
533*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
534*4bdc9457SAndroid Build Coastguard Worker 8, 16, 4, 1, benchmark::utils::CheckNEONDOT);
535*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x32c4__neondot(benchmark::State & state,const char * net)536*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x32c4__neondot(benchmark::State& state, const char* net) {
537*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
538*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_1x32c4__neondot,
539*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
540*4bdc9457SAndroid Build Coastguard Worker 1, 32, 4, 1, benchmark::utils::CheckNEONDOT);
541*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x32c4__neondot(benchmark::State & state,const char * net)542*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x32c4__neondot(benchmark::State& state, const char* net) {
543*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
544*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_2x32c4__neondot,
545*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
546*4bdc9457SAndroid Build Coastguard Worker 2, 32, 4, 1, benchmark::utils::CheckNEONDOT);
547*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x32c4__neondot(benchmark::State & state,const char * net)548*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x32c4__neondot(benchmark::State& state, const char* net) {
549*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
550*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_3x32c4__neondot,
551*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
552*4bdc9457SAndroid Build Coastguard Worker 3, 32, 4, 1, benchmark::utils::CheckNEONDOT);
553*4bdc9457SAndroid Build Coastguard Worker }
554*4bdc9457SAndroid Build Coastguard Worker
555*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x8c4__neondot)
BENCHMARK_GEMM(qu8_gemm_2x8c4__neondot)556*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x8c4__neondot)
557*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x8c4__neondot)
558*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8c4__neondot)
559*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_5x8c4__neondot)
560*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_6x8c4__neondot)
561*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_8x8c4__neondot)
562*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x16c4__neondot)
563*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x16c4__neondot)
564*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x16c4__neondot)
565*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16c4__neondot)
566*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_5x16c4__neondot)
567*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_6x16c4__neondot)
568*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_8x16c4__neondot)
569*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x32c4__neondot)
570*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x32c4__neondot)
571*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x32c4__neondot)
572*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
573*4bdc9457SAndroid Build Coastguard Worker
574*4bdc9457SAndroid Build Coastguard Worker
575*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
576*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x8__neon_mlal_lane(benchmark::State& state, const char* net) {
577*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
578*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane,
579*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
580*4bdc9457SAndroid Build Coastguard Worker 1, 8, 1, 1, benchmark::utils::CheckNEON);
581*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x8__neon_mlal_lane(benchmark::State & state,const char * net)582*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x8__neon_mlal_lane(benchmark::State& state, const char* net) {
583*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
584*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_2x8__neon_mlal_lane,
585*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
586*4bdc9457SAndroid Build Coastguard Worker 2, 8, 1, 1, benchmark::utils::CheckNEON);
587*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x8__neon_mlal_lane(benchmark::State & state,const char * net)588*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x8__neon_mlal_lane(benchmark::State& state, const char* net) {
589*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
590*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_3x8__neon_mlal_lane,
591*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
592*4bdc9457SAndroid Build Coastguard Worker 3, 8, 1, 1, benchmark::utils::CheckNEON);
593*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x8__neon_mlal_lane(benchmark::State & state,const char * net)594*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x8__neon_mlal_lane(benchmark::State& state, const char* net) {
595*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
596*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane,
597*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
598*4bdc9457SAndroid Build Coastguard Worker 4, 8, 1, 1, benchmark::utils::CheckNEON);
599*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_6x8__neon_mlal_lane(benchmark::State & state,const char * net)600*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_6x8__neon_mlal_lane(benchmark::State& state, const char* net) {
601*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
602*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_6x8__neon_mlal_lane,
603*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
604*4bdc9457SAndroid Build Coastguard Worker 6, 8, 1, 1, benchmark::utils::CheckNEON);
605*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x16__neon_mlal_lane(benchmark::State & state,const char * net)606*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x16__neon_mlal_lane(benchmark::State& state, const char* net) {
607*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
608*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane,
609*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
610*4bdc9457SAndroid Build Coastguard Worker 1, 16, 1, 1, benchmark::utils::CheckNEON);
611*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x16__neon_mlal_lane(benchmark::State & state,const char * net)612*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x16__neon_mlal_lane(benchmark::State& state, const char* net) {
613*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
614*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane,
615*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
616*4bdc9457SAndroid Build Coastguard Worker 2, 16, 1, 1, benchmark::utils::CheckNEON);
617*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x16__neon_mlal_lane(benchmark::State & state,const char * net)618*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x16__neon_mlal_lane(benchmark::State& state, const char* net) {
619*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
620*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane,
621*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
622*4bdc9457SAndroid Build Coastguard Worker 3, 16, 1, 1, benchmark::utils::CheckNEON);
623*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16__neon_mlal_lane(benchmark::State & state,const char * net)624*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16__neon_mlal_lane(benchmark::State& state, const char* net) {
625*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
626*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_4x16__neon_mlal_lane,
627*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
628*4bdc9457SAndroid Build Coastguard Worker 4, 16, 1, 1, benchmark::utils::CheckNEON);
629*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_6x16__neon_mlal_lane(benchmark::State & state,const char * net)630*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_6x16__neon_mlal_lane(benchmark::State& state, const char* net) {
631*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
632*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_rndnu_ukernel_6x16__neon_mlal_lane,
633*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_rndnu_neon_params,
634*4bdc9457SAndroid Build Coastguard Worker 6, 16, 1, 1, benchmark::utils::CheckNEON);
635*4bdc9457SAndroid Build Coastguard Worker }
636*4bdc9457SAndroid Build Coastguard Worker
637*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x8__neon_mlal_lane)
BENCHMARK_GEMM(qu8_gemm_2x8__neon_mlal_lane)638*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x8__neon_mlal_lane)
639*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x8__neon_mlal_lane)
640*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x8__neon_mlal_lane)
641*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_6x8__neon_mlal_lane)
642*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x16__neon_mlal_lane)
643*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x16__neon_mlal_lane)
644*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x16__neon_mlal_lane)
645*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16__neon_mlal_lane)
646*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_6x16__neon_mlal_lane)
647*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
648*4bdc9457SAndroid Build Coastguard Worker
649*4bdc9457SAndroid Build Coastguard Worker
650*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM
651*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x1c4__armsimd32(benchmark::State& state, const char* net) {
652*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
653*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x1c4__armsimd32,
654*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_armsimd32_params,
655*4bdc9457SAndroid Build Coastguard Worker 1, 1, 4, 1, benchmark::utils::CheckARMV6);
656*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x1c4__armsimd32(benchmark::State & state,const char * net)657*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x1c4__armsimd32(benchmark::State& state, const char* net) {
658*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
659*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x1c4__armsimd32,
660*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_armsimd32_params,
661*4bdc9457SAndroid Build Coastguard Worker 2, 1, 4, 1, benchmark::utils::CheckARMV6);
662*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x2c4__armsimd32(benchmark::State & state,const char * net)663*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x2c4__armsimd32(benchmark::State& state, const char* net) {
664*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
665*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x2c4__armsimd32,
666*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_armsimd32_params,
667*4bdc9457SAndroid Build Coastguard Worker 1, 2, 4, 1, benchmark::utils::CheckARMV6);
668*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x2c4__armsimd32(benchmark::State & state,const char * net)669*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x2c4__armsimd32(benchmark::State& state, const char* net) {
670*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
671*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x2c4__armsimd32,
672*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_armsimd32_params,
673*4bdc9457SAndroid Build Coastguard Worker 2, 2, 4, 1, benchmark::utils::CheckARMV6);
674*4bdc9457SAndroid Build Coastguard Worker }
675*4bdc9457SAndroid Build Coastguard Worker
676*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x1c4__armsimd32)
BENCHMARK_GEMM(qu8_gemm_2x1c4__armsimd32)677*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x1c4__armsimd32)
678*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x2c4__armsimd32)
679*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x2c4__armsimd32)
680*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM
681*4bdc9457SAndroid Build Coastguard Worker
682*4bdc9457SAndroid Build Coastguard Worker
683*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
684*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x16c8__avx512skx(benchmark::State& state, const char* net) {
685*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
686*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x16c8__avx512skx,
687*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_avx512_params,
688*4bdc9457SAndroid Build Coastguard Worker 1, 16, 8, 1,
689*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512SKX);
690*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x16c8__avx512skx(benchmark::State & state,const char * net)691*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x16c8__avx512skx(benchmark::State& state, const char* net) {
692*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
693*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x16c8__avx512skx,
694*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_avx512_params,
695*4bdc9457SAndroid Build Coastguard Worker 2, 16, 8, 1,
696*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512SKX);
697*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x16c8__avx512skx(benchmark::State & state,const char * net)698*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x16c8__avx512skx(benchmark::State& state, const char* net) {
699*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
700*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x16c8__avx512skx,
701*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_avx512_params,
702*4bdc9457SAndroid Build Coastguard Worker 3, 16, 8, 1,
703*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512SKX);
704*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x16c8__avx512skx(benchmark::State & state,const char * net)705*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x16c8__avx512skx(benchmark::State& state, const char* net) {
706*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
707*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x16c8__avx512skx,
708*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_avx512_params,
709*4bdc9457SAndroid Build Coastguard Worker 4, 16, 8, 1,
710*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512SKX);
711*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x8c8__avx2(benchmark::State & state,const char * net)712*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x8c8__avx2(benchmark::State& state, const char* net) {
713*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
714*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x8c8__avx2,
715*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_avx2_params,
716*4bdc9457SAndroid Build Coastguard Worker 1, 8, 8, 1,
717*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2);
718*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x8c8__avx2(benchmark::State & state,const char * net)719*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x8c8__avx2(benchmark::State& state, const char* net) {
720*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
721*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x8c8__avx2,
722*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_avx2_params,
723*4bdc9457SAndroid Build Coastguard Worker 2, 8, 8, 1,
724*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2);
725*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x8c8__avx2(benchmark::State & state,const char * net)726*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x8c8__avx2(benchmark::State& state, const char* net) {
727*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
728*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x8c8__avx2,
729*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_avx2_params,
730*4bdc9457SAndroid Build Coastguard Worker 3, 8, 8, 1,
731*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2);
732*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__xop_ld64(benchmark::State & state,const char * net)733*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__xop_ld64(benchmark::State& state, const char* net) {
734*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
735*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__xop_ld64,
736*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
737*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1,
738*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
739*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__xop_ld64(benchmark::State & state,const char * net)740*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__xop_ld64(benchmark::State& state, const char* net) {
741*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
742*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__xop_ld64,
743*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
744*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1,
745*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
746*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__xop_ld64(benchmark::State & state,const char * net)747*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__xop_ld64(benchmark::State& state, const char* net) {
748*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
749*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld64,
750*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
751*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1,
752*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
753*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__xop_ld64(benchmark::State & state,const char * net)754*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__xop_ld64(benchmark::State& state, const char* net) {
755*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
756*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld64,
757*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
758*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1,
759*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
760*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__xop_ld128(benchmark::State & state,const char * net)761*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__xop_ld128(benchmark::State& state, const char* net) {
762*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
763*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__xop_ld128,
764*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
765*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1,
766*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
767*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__xop_ld128(benchmark::State & state,const char * net)768*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__xop_ld128(benchmark::State& state, const char* net) {
769*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
770*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__xop_ld128,
771*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
772*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1,
773*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
774*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__xop_ld128(benchmark::State & state,const char * net)775*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__xop_ld128(benchmark::State& state, const char* net) {
776*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
777*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld128,
778*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
779*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1,
780*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
781*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__xop_ld128(benchmark::State & state,const char * net)782*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__xop_ld128(benchmark::State& state, const char* net) {
783*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
784*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld128,
785*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
786*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1,
787*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
788*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__xop_ld64(benchmark::State & state,const char * net)789*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__xop_ld64(benchmark::State& state, const char* net) {
790*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
791*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__xop_ld64,
792*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
793*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1,
794*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
795*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__xop_ld64(benchmark::State & state,const char * net)796*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__xop_ld64(benchmark::State& state, const char* net) {
797*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
798*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__xop_ld64,
799*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
800*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1,
801*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
802*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__xop_ld64(benchmark::State & state,const char * net)803*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__xop_ld64(benchmark::State& state, const char* net) {
804*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
805*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld64,
806*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
807*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1,
808*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
809*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__xop_ld128(benchmark::State & state,const char * net)810*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__xop_ld128(benchmark::State& state, const char* net) {
811*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
812*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__xop_ld128,
813*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
814*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1,
815*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
816*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__xop_ld128(benchmark::State & state,const char * net)817*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__xop_ld128(benchmark::State& state, const char* net) {
818*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
819*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__xop_ld128,
820*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
821*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1,
822*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
823*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__xop_ld128(benchmark::State & state,const char * net)824*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__xop_ld128(benchmark::State& state, const char* net) {
825*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
826*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld128,
827*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
828*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1,
829*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckXOP);
830*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__avx_ld64(benchmark::State & state,const char * net)831*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__avx_ld64(benchmark::State& state, const char* net) {
832*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
833*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__avx_ld64,
834*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
835*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1,
836*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
837*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__avx_ld64(benchmark::State & state,const char * net)838*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__avx_ld64(benchmark::State& state, const char* net) {
839*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
840*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__avx_ld64,
841*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
842*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1,
843*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
844*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__avx_ld64(benchmark::State & state,const char * net)845*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__avx_ld64(benchmark::State& state, const char* net) {
846*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
847*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld64,
848*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
849*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1,
850*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
851*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__avx_ld64(benchmark::State & state,const char * net)852*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__avx_ld64(benchmark::State& state, const char* net) {
853*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
854*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld64,
855*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
856*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1,
857*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
858*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__avx_ld128(benchmark::State & state,const char * net)859*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__avx_ld128(benchmark::State& state, const char* net) {
860*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
861*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__avx_ld128,
862*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
863*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1,
864*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
865*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__avx_ld128(benchmark::State & state,const char * net)866*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__avx_ld128(benchmark::State& state, const char* net) {
867*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
868*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__avx_ld128,
869*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
870*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1,
871*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
872*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__avx_ld128(benchmark::State & state,const char * net)873*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__avx_ld128(benchmark::State& state, const char* net) {
874*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
875*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld128,
876*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
877*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1,
878*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
879*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__avx_ld128(benchmark::State & state,const char * net)880*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__avx_ld128(benchmark::State& state, const char* net) {
881*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
882*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld128,
883*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
884*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1,
885*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
886*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__avx_ld64(benchmark::State & state,const char * net)887*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__avx_ld64(benchmark::State& state, const char* net) {
888*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
889*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__avx_ld64,
890*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
891*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1,
892*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
893*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__avx_ld64(benchmark::State & state,const char * net)894*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__avx_ld64(benchmark::State& state, const char* net) {
895*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
896*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__avx_ld64,
897*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
898*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1,
899*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
900*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__avx_ld64(benchmark::State & state,const char * net)901*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__avx_ld64(benchmark::State& state, const char* net) {
902*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
903*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld64,
904*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
905*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1,
906*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
907*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__avx_ld128(benchmark::State & state,const char * net)908*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__avx_ld128(benchmark::State& state, const char* net) {
909*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
910*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__avx_ld128,
911*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
912*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1,
913*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
914*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__avx_ld128(benchmark::State & state,const char * net)915*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__avx_ld128(benchmark::State& state, const char* net) {
916*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
917*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__avx_ld128,
918*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
919*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1,
920*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
921*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__avx_ld128(benchmark::State & state,const char * net)922*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__avx_ld128(benchmark::State& state, const char* net) {
923*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
924*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld128,
925*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
926*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1,
927*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX);
928*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__sse41_ld64(benchmark::State & state,const char * net)929*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__sse41_ld64(benchmark::State& state, const char* net) {
930*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
931*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse41_ld64,
932*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
933*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1,
934*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
935*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__sse41_ld64(benchmark::State & state,const char * net)936*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__sse41_ld64(benchmark::State& state, const char* net) {
937*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
938*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse41_ld64,
939*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
940*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1,
941*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
942*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__sse41_ld64(benchmark::State & state,const char * net)943*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__sse41_ld64(benchmark::State& state, const char* net) {
944*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
945*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld64,
946*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
947*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1,
948*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
949*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__sse41_ld64(benchmark::State & state,const char * net)950*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__sse41_ld64(benchmark::State& state, const char* net) {
951*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
952*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld64,
953*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
954*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1,
955*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
956*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__sse41_ld128(benchmark::State & state,const char * net)957*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__sse41_ld128(benchmark::State& state, const char* net) {
958*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
959*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse41_ld128,
960*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
961*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1,
962*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
963*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__sse41_ld128(benchmark::State & state,const char * net)964*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__sse41_ld128(benchmark::State& state, const char* net) {
965*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
966*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse41_ld128,
967*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
968*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1,
969*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
970*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__sse41_ld128(benchmark::State & state,const char * net)971*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__sse41_ld128(benchmark::State& state, const char* net) {
972*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
973*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld128,
974*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
975*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1,
976*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
977*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__sse41_ld128(benchmark::State & state,const char * net)978*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__sse41_ld128(benchmark::State& state, const char* net) {
979*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
980*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld128,
981*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
982*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1,
983*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
984*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__sse41_ld64(benchmark::State & state,const char * net)985*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__sse41_ld64(benchmark::State& state, const char* net) {
986*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
987*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse41_ld64,
988*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
989*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1,
990*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
991*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__sse41_ld64(benchmark::State & state,const char * net)992*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__sse41_ld64(benchmark::State& state, const char* net) {
993*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
994*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse41_ld64,
995*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
996*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1,
997*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
998*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__sse41_ld64(benchmark::State & state,const char * net)999*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__sse41_ld64(benchmark::State& state, const char* net) {
1000*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1001*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld64,
1002*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1003*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1,
1004*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
1005*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__sse41_ld128(benchmark::State & state,const char * net)1006*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__sse41_ld128(benchmark::State& state, const char* net) {
1007*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1008*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse41_ld128,
1009*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1010*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1,
1011*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
1012*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__sse41_ld128(benchmark::State & state,const char * net)1013*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__sse41_ld128(benchmark::State& state, const char* net) {
1014*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1015*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse41_ld128,
1016*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1017*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1,
1018*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
1019*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__sse41_ld128(benchmark::State & state,const char * net)1020*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__sse41_ld128(benchmark::State& state, const char* net) {
1021*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1022*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld128,
1023*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1024*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1,
1025*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckSSE41);
1026*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__sse2_ld64(benchmark::State & state,const char * net)1027*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__sse2_ld64(benchmark::State& state, const char* net) {
1028*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1029*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse2_ld64,
1030*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1031*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1);
1032*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__sse2_ld64(benchmark::State & state,const char * net)1033*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__sse2_ld64(benchmark::State& state, const char* net) {
1034*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1035*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse2_ld64,
1036*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1037*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1);
1038*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__sse2_ld64(benchmark::State & state,const char * net)1039*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__sse2_ld64(benchmark::State& state, const char* net) {
1040*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1041*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld64,
1042*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1043*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1);
1044*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__sse2_ld64(benchmark::State & state,const char * net)1045*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__sse2_ld64(benchmark::State& state, const char* net) {
1046*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1047*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld64,
1048*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1049*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1);
1050*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c2__sse2_ld128(benchmark::State & state,const char * net)1051*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__sse2_ld128(benchmark::State& state, const char* net) {
1052*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1053*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse2_ld128,
1054*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1055*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1);
1056*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__sse2_ld128(benchmark::State & state,const char * net)1057*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__sse2_ld128(benchmark::State& state, const char* net) {
1058*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1059*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse2_ld128,
1060*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1061*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1);
1062*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__sse2_ld128(benchmark::State & state,const char * net)1063*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__sse2_ld128(benchmark::State& state, const char* net) {
1064*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1065*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld128,
1066*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1067*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1);
1068*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__sse2_ld128(benchmark::State & state,const char * net)1069*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__sse2_ld128(benchmark::State& state, const char* net) {
1070*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1071*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld128,
1072*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1073*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1);
1074*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__sse2_ld64(benchmark::State & state,const char * net)1075*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__sse2_ld64(benchmark::State& state, const char* net) {
1076*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1077*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse2_ld64,
1078*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1079*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1);
1080*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__sse2_ld64(benchmark::State & state,const char * net)1081*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__sse2_ld64(benchmark::State& state, const char* net) {
1082*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1083*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse2_ld64,
1084*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1085*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1);
1086*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__sse2_ld64(benchmark::State & state,const char * net)1087*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__sse2_ld64(benchmark::State& state, const char* net) {
1088*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1089*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld64,
1090*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1091*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1);
1092*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4c8__sse2_ld128(benchmark::State & state,const char * net)1093*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__sse2_ld128(benchmark::State& state, const char* net) {
1094*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1095*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__sse2_ld128,
1096*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1097*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1);
1098*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__sse2_ld128(benchmark::State & state,const char * net)1099*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__sse2_ld128(benchmark::State& state, const char* net) {
1100*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1101*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__sse2_ld128,
1102*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1103*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1);
1104*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__sse2_ld128(benchmark::State & state,const char * net)1105*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__sse2_ld128(benchmark::State& state, const char* net) {
1106*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1107*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld128,
1108*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_sse2_params,
1109*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1);
1110*4bdc9457SAndroid Build Coastguard Worker }
1111*4bdc9457SAndroid Build Coastguard Worker
1112*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x16c8__avx512skx)
BENCHMARK_GEMM(qu8_gemm_2x16c8__avx512skx)1113*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x16c8__avx512skx)
1114*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x16c8__avx512skx)
1115*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x16c8__avx512skx)
1116*4bdc9457SAndroid Build Coastguard Worker
1117*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x8c8__avx2)
1118*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x8c8__avx2)
1119*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x8c8__avx2)
1120*4bdc9457SAndroid Build Coastguard Worker
1121*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__xop_ld64)
1122*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__xop_ld64)
1123*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__xop_ld64)
1124*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__xop_ld64)
1125*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__xop_ld128)
1126*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__xop_ld128)
1127*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__xop_ld128)
1128*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__xop_ld128)
1129*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__xop_ld64)
1130*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__xop_ld64)
1131*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__xop_ld64)
1132*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__xop_ld128)
1133*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__xop_ld128)
1134*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__xop_ld128)
1135*4bdc9457SAndroid Build Coastguard Worker
1136*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__avx_ld64)
1137*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__avx_ld64)
1138*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__avx_ld64)
1139*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__avx_ld64)
1140*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__avx_ld128)
1141*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__avx_ld128)
1142*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__avx_ld128)
1143*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__avx_ld128)
1144*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__avx_ld64)
1145*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__avx_ld64)
1146*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__avx_ld64)
1147*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__avx_ld128)
1148*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__avx_ld128)
1149*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__avx_ld128)
1150*4bdc9457SAndroid Build Coastguard Worker
1151*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__sse41_ld64)
1152*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__sse41_ld64)
1153*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__sse41_ld64)
1154*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__sse41_ld64)
1155*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__sse41_ld128)
1156*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__sse41_ld128)
1157*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__sse41_ld128)
1158*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__sse41_ld128)
1159*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__sse41_ld64)
1160*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__sse41_ld64)
1161*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__sse41_ld64)
1162*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__sse41_ld128)
1163*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__sse41_ld128)
1164*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__sse41_ld128)
1165*4bdc9457SAndroid Build Coastguard Worker
1166*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__sse2_ld64)
1167*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__sse2_ld64)
1168*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__sse2_ld64)
1169*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__sse2_ld64)
1170*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__sse2_ld128)
1171*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__sse2_ld128)
1172*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__sse2_ld128)
1173*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__sse2_ld128)
1174*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__sse2_ld64)
1175*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__sse2_ld64)
1176*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__sse2_ld64)
1177*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__sse2_ld128)
1178*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__sse2_ld128)
1179*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__sse2_ld128)
1180*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1181*4bdc9457SAndroid Build Coastguard Worker
1182*4bdc9457SAndroid Build Coastguard Worker
1183*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1184*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1185*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1186*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c2__wasmsimd_dot16x2_ld64,
1187*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1188*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1);
1189*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1190*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1191*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1192*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c2__wasmsimd_dot16x2_ld64,
1193*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1194*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1);
1195*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1196*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1197*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1198*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c2__wasmsimd_dot16x2_ld64,
1199*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1200*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1);
1201*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1202*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1203*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1204*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4c2__wasmsimd_dot16x2_ld64,
1205*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1206*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1);
1207*4bdc9457SAndroid Build Coastguard Worker }
1208*4bdc9457SAndroid Build Coastguard Worker
qu8_gemm_1x4c2__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1209*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1210*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1211*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c2__wasmsimd_dot16x2_ld128,
1212*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1213*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 1);
1214*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1215*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1216*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1217*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c2__wasmsimd_dot16x2_ld128,
1218*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1219*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 1);
1220*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1221*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1222*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1223*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c2__wasmsimd_dot16x2_ld128,
1224*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1225*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 1);
1226*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1227*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1228*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1229*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4c2__wasmsimd_dot16x2_ld128,
1230*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1231*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 1);
1232*4bdc9457SAndroid Build Coastguard Worker }
1233*4bdc9457SAndroid Build Coastguard Worker
qu8_gemm_1x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1234*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1235*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1236*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c2s4__wasmsimd_dot16x2_ld64,
1237*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1238*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 4);
1239*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1240*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1241*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1242*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c2s4__wasmsimd_dot16x2_ld64,
1243*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1244*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 4);
1245*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1246*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1247*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1248*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c2s4__wasmsimd_dot16x2_ld64,
1249*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1250*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 4);
1251*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1252*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2s4__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1253*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1254*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4c2s4__wasmsimd_dot16x2_ld64,
1255*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1256*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 4);
1257*4bdc9457SAndroid Build Coastguard Worker }
1258*4bdc9457SAndroid Build Coastguard Worker
qu8_gemm_1x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1259*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1260*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1261*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c2s4__wasmsimd_dot16x2_ld128,
1262*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1263*4bdc9457SAndroid Build Coastguard Worker 1, 4, 2, 4);
1264*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1265*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1266*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1267*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c2s4__wasmsimd_dot16x2_ld128,
1268*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1269*4bdc9457SAndroid Build Coastguard Worker 2, 4, 2, 4);
1270*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1271*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1272*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1273*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c2s4__wasmsimd_dot16x2_ld128,
1274*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1275*4bdc9457SAndroid Build Coastguard Worker 3, 4, 2, 4);
1276*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1277*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c2s4__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1278*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1279*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4c2s4__wasmsimd_dot16x2_ld128,
1280*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1281*4bdc9457SAndroid Build Coastguard Worker 4, 4, 2, 4);
1282*4bdc9457SAndroid Build Coastguard Worker }
1283*4bdc9457SAndroid Build Coastguard Worker
qu8_gemm_1x4c8__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1284*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1285*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1286*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__wasmsimd_dot16x2_ld64,
1287*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1288*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1);
1289*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1290*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1291*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1292*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__wasmsimd_dot16x2_ld64,
1293*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1294*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1);
1295*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1296*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1297*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1298*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__wasmsimd_dot16x2_ld64,
1299*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1300*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1);
1301*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c8__wasmsimd_dot16x2_ld64(benchmark::State & state,const char * net)1302*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c8__wasmsimd_dot16x2_ld64(benchmark::State& state, const char* net) {
1303*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1304*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4c8__wasmsimd_dot16x2_ld64,
1305*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1306*4bdc9457SAndroid Build Coastguard Worker 4, 4, 8, 1);
1307*4bdc9457SAndroid Build Coastguard Worker }
1308*4bdc9457SAndroid Build Coastguard Worker
qu8_gemm_1x4c8__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1309*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4c8__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1310*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1311*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4c8__wasmsimd_dot16x2_ld128,
1312*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1313*4bdc9457SAndroid Build Coastguard Worker 1, 4, 8, 1);
1314*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4c8__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1315*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4c8__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1316*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1317*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4c8__wasmsimd_dot16x2_ld128,
1318*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1319*4bdc9457SAndroid Build Coastguard Worker 2, 4, 8, 1);
1320*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4c8__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1321*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4c8__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1322*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1323*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4c8__wasmsimd_dot16x2_ld128,
1324*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1325*4bdc9457SAndroid Build Coastguard Worker 3, 4, 8, 1);
1326*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4c8__wasmsimd_dot16x2_ld128(benchmark::State & state,const char * net)1327*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4c8__wasmsimd_dot16x2_ld128(benchmark::State& state, const char* net) {
1328*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1329*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4c8__wasmsimd_dot16x2_ld128,
1330*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_wasmsimd_params,
1331*4bdc9457SAndroid Build Coastguard Worker 4, 4, 8, 1);
1332*4bdc9457SAndroid Build Coastguard Worker }
1333*4bdc9457SAndroid Build Coastguard Worker
1334*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__wasmsimd_dot16x2_ld64)
BENCHMARK_GEMM(qu8_gemm_2x4c2__wasmsimd_dot16x2_ld64)1335*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__wasmsimd_dot16x2_ld64)
1336*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__wasmsimd_dot16x2_ld64)
1337*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__wasmsimd_dot16x2_ld64)
1338*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2__wasmsimd_dot16x2_ld128)
1339*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2__wasmsimd_dot16x2_ld128)
1340*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2__wasmsimd_dot16x2_ld128)
1341*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2__wasmsimd_dot16x2_ld128)
1342*4bdc9457SAndroid Build Coastguard Worker
1343*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2s4__wasmsimd_dot16x2_ld64)
1344*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2s4__wasmsimd_dot16x2_ld64)
1345*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2s4__wasmsimd_dot16x2_ld64)
1346*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2s4__wasmsimd_dot16x2_ld64)
1347*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c2s4__wasmsimd_dot16x2_ld128)
1348*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c2s4__wasmsimd_dot16x2_ld128)
1349*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c2s4__wasmsimd_dot16x2_ld128)
1350*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c2s4__wasmsimd_dot16x2_ld128)
1351*4bdc9457SAndroid Build Coastguard Worker
1352*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__wasmsimd_dot16x2_ld64)
1353*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__wasmsimd_dot16x2_ld64)
1354*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__wasmsimd_dot16x2_ld64)
1355*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c8__wasmsimd_dot16x2_ld64)
1356*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4c8__wasmsimd_dot16x2_ld128)
1357*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4c8__wasmsimd_dot16x2_ld128)
1358*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4c8__wasmsimd_dot16x2_ld128)
1359*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4c8__wasmsimd_dot16x2_ld128)
1360*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1361*4bdc9457SAndroid Build Coastguard Worker
1362*4bdc9457SAndroid Build Coastguard Worker
1363*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1364*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x2__wasm_fmagic(benchmark::State& state, const char* net) {
1365*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1366*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x2__wasm_fmagic,
1367*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1368*4bdc9457SAndroid Build Coastguard Worker 1, 2, 1, 1);
1369*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x2__wasm_fmagic(benchmark::State & state,const char * net)1370*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x2__wasm_fmagic(benchmark::State& state, const char* net) {
1371*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1372*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x2__wasm_fmagic,
1373*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1374*4bdc9457SAndroid Build Coastguard Worker 2, 2, 1, 1);
1375*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x2__wasm_fmagic(benchmark::State & state,const char * net)1376*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x2__wasm_fmagic(benchmark::State& state, const char* net) {
1377*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1378*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x2__wasm_fmagic,
1379*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1380*4bdc9457SAndroid Build Coastguard Worker 3, 2, 1, 1);
1381*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x2__wasm_fmagic(benchmark::State & state,const char * net)1382*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x2__wasm_fmagic(benchmark::State& state, const char* net) {
1383*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1384*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x2__wasm_fmagic,
1385*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1386*4bdc9457SAndroid Build Coastguard Worker 4, 2, 1, 1);
1387*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4__wasm_fmagic(benchmark::State & state,const char * net)1388*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4__wasm_fmagic(benchmark::State& state, const char* net) {
1389*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1390*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4__wasm_fmagic,
1391*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1392*4bdc9457SAndroid Build Coastguard Worker 1, 4, 1, 1);
1393*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4__wasm_fmagic(benchmark::State & state,const char * net)1394*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4__wasm_fmagic(benchmark::State& state, const char* net) {
1395*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1396*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4__wasm_fmagic,
1397*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1398*4bdc9457SAndroid Build Coastguard Worker 2, 4, 1, 1);
1399*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4__wasm_fmagic(benchmark::State & state,const char * net)1400*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4__wasm_fmagic(benchmark::State& state, const char* net) {
1401*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1402*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4__wasm_fmagic,
1403*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1404*4bdc9457SAndroid Build Coastguard Worker 3, 4, 1, 1);
1405*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4__wasm_fmagic(benchmark::State & state,const char * net)1406*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4__wasm_fmagic(benchmark::State& state, const char* net) {
1407*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1408*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4__wasm_fmagic,
1409*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1410*4bdc9457SAndroid Build Coastguard Worker 4, 4, 1, 1);
1411*4bdc9457SAndroid Build Coastguard Worker }
1412*4bdc9457SAndroid Build Coastguard Worker
1413*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x2__wasm_fmagic)
BENCHMARK_GEMM(qu8_gemm_2x2__wasm_fmagic)1414*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x2__wasm_fmagic)
1415*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x2__wasm_fmagic)
1416*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x2__wasm_fmagic)
1417*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4__wasm_fmagic)
1418*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4__wasm_fmagic)
1419*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4__wasm_fmagic)
1420*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4__wasm_fmagic)
1421*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1422*4bdc9457SAndroid Build Coastguard Worker
1423*4bdc9457SAndroid Build Coastguard Worker
1424*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x2__scalar_fmagic(benchmark::State& state, const char* net) {
1425*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1426*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x2__scalar_fmagic,
1427*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1428*4bdc9457SAndroid Build Coastguard Worker 1, 2, 1, 1);
1429*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x2__scalar_fmagic(benchmark::State & state,const char * net)1430*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x2__scalar_fmagic(benchmark::State& state, const char* net) {
1431*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1432*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x2__scalar_fmagic,
1433*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1434*4bdc9457SAndroid Build Coastguard Worker 2, 2, 1, 1);
1435*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x2__scalar_fmagic(benchmark::State & state,const char * net)1436*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x2__scalar_fmagic(benchmark::State& state, const char* net) {
1437*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1438*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x2__scalar_fmagic,
1439*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1440*4bdc9457SAndroid Build Coastguard Worker 3, 2, 1, 1);
1441*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x2__scalar_fmagic(benchmark::State & state,const char * net)1442*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x2__scalar_fmagic(benchmark::State& state, const char* net) {
1443*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1444*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x2__scalar_fmagic,
1445*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1446*4bdc9457SAndroid Build Coastguard Worker 4, 2, 1, 1);
1447*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4__scalar_fmagic(benchmark::State & state,const char * net)1448*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4__scalar_fmagic(benchmark::State& state, const char* net) {
1449*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1450*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4__scalar_fmagic,
1451*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1452*4bdc9457SAndroid Build Coastguard Worker 1, 4, 1, 1);
1453*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4__scalar_fmagic(benchmark::State & state,const char * net)1454*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4__scalar_fmagic(benchmark::State& state, const char* net) {
1455*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1456*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4__scalar_fmagic,
1457*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1458*4bdc9457SAndroid Build Coastguard Worker 2, 4, 1, 1);
1459*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4__scalar_fmagic(benchmark::State & state,const char * net)1460*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4__scalar_fmagic(benchmark::State& state, const char* net) {
1461*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1462*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4__scalar_fmagic,
1463*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1464*4bdc9457SAndroid Build Coastguard Worker 3, 4, 1, 1);
1465*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4__scalar_fmagic(benchmark::State & state,const char * net)1466*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4__scalar_fmagic(benchmark::State& state, const char* net) {
1467*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1468*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4__scalar_fmagic,
1469*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params,
1470*4bdc9457SAndroid Build Coastguard Worker 4, 4, 1, 1);
1471*4bdc9457SAndroid Build Coastguard Worker }
1472*4bdc9457SAndroid Build Coastguard Worker
qu8_gemm_1x2__scalar_imagic(benchmark::State & state,const char * net)1473*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x2__scalar_imagic(benchmark::State& state, const char* net) {
1474*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1475*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x2__scalar_imagic,
1476*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1477*4bdc9457SAndroid Build Coastguard Worker 1, 2, 1, 1);
1478*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x2__scalar_imagic(benchmark::State & state,const char * net)1479*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x2__scalar_imagic(benchmark::State& state, const char* net) {
1480*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1481*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x2__scalar_imagic,
1482*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1483*4bdc9457SAndroid Build Coastguard Worker 2, 2, 1, 1);
1484*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x2__scalar_imagic(benchmark::State & state,const char * net)1485*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x2__scalar_imagic(benchmark::State& state, const char* net) {
1486*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1487*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x2__scalar_imagic,
1488*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1489*4bdc9457SAndroid Build Coastguard Worker 3, 2, 1, 1);
1490*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x2__scalar_imagic(benchmark::State & state,const char * net)1491*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x2__scalar_imagic(benchmark::State& state, const char* net) {
1492*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1493*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x2__scalar_imagic,
1494*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1495*4bdc9457SAndroid Build Coastguard Worker 4, 2, 1, 1);
1496*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4__scalar_imagic(benchmark::State & state,const char * net)1497*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4__scalar_imagic(benchmark::State& state, const char* net) {
1498*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1499*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4__scalar_imagic,
1500*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1501*4bdc9457SAndroid Build Coastguard Worker 1, 4, 1, 1);
1502*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4__scalar_imagic(benchmark::State & state,const char * net)1503*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4__scalar_imagic(benchmark::State& state, const char* net) {
1504*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1505*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4__scalar_imagic,
1506*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1507*4bdc9457SAndroid Build Coastguard Worker 2, 4, 1, 1);
1508*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4__scalar_imagic(benchmark::State & state,const char * net)1509*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4__scalar_imagic(benchmark::State& state, const char* net) {
1510*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1511*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4__scalar_imagic,
1512*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1513*4bdc9457SAndroid Build Coastguard Worker 3, 4, 1, 1);
1514*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4__scalar_imagic(benchmark::State & state,const char * net)1515*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4__scalar_imagic(benchmark::State& state, const char* net) {
1516*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1517*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4__scalar_imagic,
1518*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params,
1519*4bdc9457SAndroid Build Coastguard Worker 4, 4, 1, 1);
1520*4bdc9457SAndroid Build Coastguard Worker }
1521*4bdc9457SAndroid Build Coastguard Worker
qu8_gemm_1x2__scalar_lrintf(benchmark::State & state,const char * net)1522*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x2__scalar_lrintf(benchmark::State& state, const char* net) {
1523*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1524*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x2__scalar_lrintf,
1525*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1526*4bdc9457SAndroid Build Coastguard Worker 1, 2, 1, 1);
1527*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x2__scalar_lrintf(benchmark::State & state,const char * net)1528*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x2__scalar_lrintf(benchmark::State& state, const char* net) {
1529*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1530*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x2__scalar_lrintf,
1531*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1532*4bdc9457SAndroid Build Coastguard Worker 2, 2, 1, 1);
1533*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x2__scalar_lrintf(benchmark::State & state,const char * net)1534*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x2__scalar_lrintf(benchmark::State& state, const char* net) {
1535*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1536*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x2__scalar_lrintf,
1537*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1538*4bdc9457SAndroid Build Coastguard Worker 3, 2, 1, 1);
1539*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x2__scalar_lrintf(benchmark::State & state,const char * net)1540*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x2__scalar_lrintf(benchmark::State& state, const char* net) {
1541*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1542*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x2__scalar_lrintf,
1543*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1544*4bdc9457SAndroid Build Coastguard Worker 4, 2, 1, 1);
1545*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_1x4__scalar_lrintf(benchmark::State & state,const char * net)1546*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_1x4__scalar_lrintf(benchmark::State& state, const char* net) {
1547*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1548*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_1x4__scalar_lrintf,
1549*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1550*4bdc9457SAndroid Build Coastguard Worker 1, 4, 1, 1);
1551*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_2x4__scalar_lrintf(benchmark::State & state,const char * net)1552*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_2x4__scalar_lrintf(benchmark::State& state, const char* net) {
1553*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1554*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_2x4__scalar_lrintf,
1555*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1556*4bdc9457SAndroid Build Coastguard Worker 2, 4, 1, 1);
1557*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_3x4__scalar_lrintf(benchmark::State & state,const char * net)1558*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_3x4__scalar_lrintf(benchmark::State& state, const char* net) {
1559*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1560*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_3x4__scalar_lrintf,
1561*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1562*4bdc9457SAndroid Build Coastguard Worker 3, 4, 1, 1);
1563*4bdc9457SAndroid Build Coastguard Worker }
qu8_gemm_4x4__scalar_lrintf(benchmark::State & state,const char * net)1564*4bdc9457SAndroid Build Coastguard Worker static void qu8_gemm_4x4__scalar_lrintf(benchmark::State& state, const char* net) {
1565*4bdc9457SAndroid Build Coastguard Worker GEMMBenchmark(state,
1566*4bdc9457SAndroid Build Coastguard Worker xnn_qu8_gemm_minmax_fp32_ukernel_4x4__scalar_lrintf,
1567*4bdc9457SAndroid Build Coastguard Worker xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params,
1568*4bdc9457SAndroid Build Coastguard Worker 4, 4, 1, 1);
1569*4bdc9457SAndroid Build Coastguard Worker }
1570*4bdc9457SAndroid Build Coastguard Worker
1571*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x2__scalar_fmagic)
1572*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x2__scalar_fmagic)
1573*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x2__scalar_fmagic)
1574*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x2__scalar_fmagic)
1575*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4__scalar_fmagic)
1576*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4__scalar_fmagic)
1577*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4__scalar_fmagic)
1578*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4__scalar_fmagic)
1579*4bdc9457SAndroid Build Coastguard Worker
1580*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x2__scalar_imagic)
1581*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x2__scalar_imagic)
1582*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x2__scalar_imagic)
1583*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x2__scalar_imagic)
1584*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4__scalar_imagic)
1585*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4__scalar_imagic)
1586*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4__scalar_imagic)
1587*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4__scalar_imagic)
1588*4bdc9457SAndroid Build Coastguard Worker
1589*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x2__scalar_lrintf)
1590*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x2__scalar_lrintf)
1591*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x2__scalar_lrintf)
1592*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x2__scalar_lrintf)
1593*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_1x4__scalar_lrintf)
1594*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_2x4__scalar_lrintf)
1595*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_3x4__scalar_lrintf)
1596*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(qu8_gemm_4x4__scalar_lrintf)
1597*4bdc9457SAndroid Build Coastguard Worker
1598*4bdc9457SAndroid Build Coastguard Worker
1599*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_RUY
1600*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(ruy_st)
1601*4bdc9457SAndroid Build Coastguard Worker #endif // BENCHMARK_RUY
1602*4bdc9457SAndroid Build Coastguard Worker #ifdef BENCHMARK_GEMMLOWP
1603*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_GEMM(gemmlowp_st)
1604*4bdc9457SAndroid Build Coastguard Worker #endif // BENCHMARK_GEMMLOWP
1605*4bdc9457SAndroid Build Coastguard Worker
1606*4bdc9457SAndroid Build Coastguard Worker #ifndef XNNPACK_BENCHMARK_NO_MAIN
1607*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_MAIN();
1608*4bdc9457SAndroid Build Coastguard Worker #endif
1609