xref: /aosp_15_r20/external/XNNPACK/bench/f32-dwconv-e2e.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker 
6*4bdc9457SAndroid Build Coastguard Worker #include <algorithm>
7*4bdc9457SAndroid Build Coastguard Worker #include <cmath>
8*4bdc9457SAndroid Build Coastguard Worker #include <cstring>
9*4bdc9457SAndroid Build Coastguard Worker #include <functional>
10*4bdc9457SAndroid Build Coastguard Worker #include <random>
11*4bdc9457SAndroid Build Coastguard Worker #include <vector>
12*4bdc9457SAndroid Build Coastguard Worker 
13*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack.h>
14*4bdc9457SAndroid Build Coastguard Worker 
15*4bdc9457SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
16*4bdc9457SAndroid Build Coastguard Worker #include "bench/end2end.h"
17*4bdc9457SAndroid Build Coastguard Worker #include "bench/utils.h"
18*4bdc9457SAndroid Build Coastguard Worker #include "models/models.h"
19*4bdc9457SAndroid Build Coastguard Worker 
20*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack.h>
21*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/dwconv.h>
22*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/microfnptr.h>
23*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/microparams-init.h>
24*4bdc9457SAndroid Build Coastguard Worker 
25*4bdc9457SAndroid Build Coastguard Worker 
DWConvEnd2EndBenchmark(benchmark::State & state,models::ExecutionPlanFactory model_factory,xnn_f32_dwconv_minmax_unipass_ukernel_function dwconv_minmax,xnn_f32_dwconv_unipass_ukernel_function dwconv,xnn_init_f32_minmax_params_fn init_params,uint8_t channel_tile,uint8_t primary_tile,benchmark::utils::IsaCheckFunction isa_check=nullptr)26*4bdc9457SAndroid Build Coastguard Worker static void DWConvEnd2EndBenchmark(
27*4bdc9457SAndroid Build Coastguard Worker   benchmark::State& state,
28*4bdc9457SAndroid Build Coastguard Worker   models::ExecutionPlanFactory model_factory,
29*4bdc9457SAndroid Build Coastguard Worker   xnn_f32_dwconv_minmax_unipass_ukernel_function dwconv_minmax,
30*4bdc9457SAndroid Build Coastguard Worker   xnn_f32_dwconv_unipass_ukernel_function dwconv,
31*4bdc9457SAndroid Build Coastguard Worker   xnn_init_f32_minmax_params_fn init_params,
32*4bdc9457SAndroid Build Coastguard Worker   uint8_t channel_tile, uint8_t primary_tile,
33*4bdc9457SAndroid Build Coastguard Worker   benchmark::utils::IsaCheckFunction isa_check = nullptr)
34*4bdc9457SAndroid Build Coastguard Worker {
35*4bdc9457SAndroid Build Coastguard Worker   if (isa_check && !isa_check(state)) {
36*4bdc9457SAndroid Build Coastguard Worker     return;
37*4bdc9457SAndroid Build Coastguard Worker   }
38*4bdc9457SAndroid Build Coastguard Worker   if (xnn_initialize(nullptr /* allocator */) != xnn_status_success) {
39*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to initialize XNNPACK");
40*4bdc9457SAndroid Build Coastguard Worker     return;
41*4bdc9457SAndroid Build Coastguard Worker   }
42*4bdc9457SAndroid Build Coastguard Worker 
43*4bdc9457SAndroid Build Coastguard Worker   // Override microkernels chosen in xnn_initialize
44*4bdc9457SAndroid Build Coastguard Worker   for (size_t i = 0; i < XNN_MAX_F32_DWCONV_UKERNELS; i++) {
45*4bdc9457SAndroid Build Coastguard Worker     // Replace only the microkernel with the matching kernel size.
46*4bdc9457SAndroid Build Coastguard Worker     if (xnn_params.f32.dwconv[i].primary_tile == primary_tile) {
47*4bdc9457SAndroid Build Coastguard Worker       std::memset(&xnn_params.f32.dwconv[i], 0, sizeof(xnn_params.f32.dwconv[i]));
48*4bdc9457SAndroid Build Coastguard Worker 
49*4bdc9457SAndroid Build Coastguard Worker       // Note: do not directly assign to xnn_params.f32.dwconv[i] because it breaks older gcc.
50*4bdc9457SAndroid Build Coastguard Worker       xnn_params.f32.dwconv[i].minmax.unipass = xnn_dwconv_unipass_ukernel_function(dwconv_minmax);
51*4bdc9457SAndroid Build Coastguard Worker       xnn_params.f32.dwconv[i].linear.unipass = xnn_dwconv_unipass_ukernel_function(dwconv);
52*4bdc9457SAndroid Build Coastguard Worker       xnn_params.f32.dwconv[i].channel_tile = channel_tile;
53*4bdc9457SAndroid Build Coastguard Worker       xnn_params.f32.dwconv[i].primary_tile = primary_tile;
54*4bdc9457SAndroid Build Coastguard Worker       xnn_params.f32.dwconv[i].incremental_tile = 0;
55*4bdc9457SAndroid Build Coastguard Worker       xnn_params.f32.dwconv[i].init.f32 = init_params;
56*4bdc9457SAndroid Build Coastguard Worker       break;
57*4bdc9457SAndroid Build Coastguard Worker     }
58*4bdc9457SAndroid Build Coastguard Worker   }
59*4bdc9457SAndroid Build Coastguard Worker 
60*4bdc9457SAndroid Build Coastguard Worker   auto execution_plan = model_factory(nullptr);
61*4bdc9457SAndroid Build Coastguard Worker   if (execution_plan.empty()) {
62*4bdc9457SAndroid Build Coastguard Worker     state.SkipWithError("failed to create a model");
63*4bdc9457SAndroid Build Coastguard Worker     return;
64*4bdc9457SAndroid Build Coastguard Worker   }
65*4bdc9457SAndroid Build Coastguard Worker 
66*4bdc9457SAndroid Build Coastguard Worker   for (auto _ : state) {
67*4bdc9457SAndroid Build Coastguard Worker     for (const std::unique_ptr<xnn_operator, decltype(&xnn_delete_operator)>& op : execution_plan) {
68*4bdc9457SAndroid Build Coastguard Worker       xnn_status status = xnn_run_operator(op.get(), nullptr);
69*4bdc9457SAndroid Build Coastguard Worker       if (status != xnn_status_success) {
70*4bdc9457SAndroid Build Coastguard Worker         state.SkipWithError("failed to run a model");
71*4bdc9457SAndroid Build Coastguard Worker         return;
72*4bdc9457SAndroid Build Coastguard Worker       }
73*4bdc9457SAndroid Build Coastguard Worker     }
74*4bdc9457SAndroid Build Coastguard Worker   }
75*4bdc9457SAndroid Build Coastguard Worker 
76*4bdc9457SAndroid Build Coastguard Worker   const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
77*4bdc9457SAndroid Build Coastguard Worker   if (cpu_frequency != 0) {
78*4bdc9457SAndroid Build Coastguard Worker     state.counters["cpufreq"] = cpu_frequency;
79*4bdc9457SAndroid Build Coastguard Worker   }
80*4bdc9457SAndroid Build Coastguard Worker }
81*4bdc9457SAndroid Build Coastguard Worker 
82*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
f32_dwconv_up4x9__aarch64_neonfma(benchmark::State & state,models::ExecutionPlanFactory model)83*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__aarch64_neonfma(benchmark::State& state, models::ExecutionPlanFactory model) {
84*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
85*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma,
86*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
87*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
88*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
89*4bdc9457SAndroid Build Coastguard Worker   }
90*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up4x9__aarch64_neonfma_cortex_a55(benchmark::State & state,models::ExecutionPlanFactory model)91*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__aarch64_neonfma_cortex_a55(benchmark::State& state, models::ExecutionPlanFactory model) {
92*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
93*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55,
94*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
95*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
96*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
97*4bdc9457SAndroid Build Coastguard Worker   }
98*4bdc9457SAndroid Build Coastguard Worker 
99*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__aarch64_neonfma);
100*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__aarch64_neonfma_cortex_a55);
101*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
102*4bdc9457SAndroid Build Coastguard Worker 
103*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
f32_dwconv_up4x9__neon(benchmark::State & state,models::ExecutionPlanFactory model)104*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__neon(benchmark::State& state, models::ExecutionPlanFactory model) {
105*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
106*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__neon,
107*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
108*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
109*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEON);
110*4bdc9457SAndroid Build Coastguard Worker   }
111*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up4x9__neon_acc2(benchmark::State & state,models::ExecutionPlanFactory model)112*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__neon_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
113*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
114*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2,
115*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
116*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
117*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEON);
118*4bdc9457SAndroid Build Coastguard Worker   }
119*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__neon(benchmark::State & state,models::ExecutionPlanFactory model)120*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__neon(benchmark::State& state, models::ExecutionPlanFactory model) {
121*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
122*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__neon,
123*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
124*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
125*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEON);
126*4bdc9457SAndroid Build Coastguard Worker   }
127*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__neon_acc2(benchmark::State & state,models::ExecutionPlanFactory model)128*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__neon_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
129*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
130*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2,
131*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
132*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
133*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEON);
134*4bdc9457SAndroid Build Coastguard Worker   }
135*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up16x9__neon(benchmark::State & state,models::ExecutionPlanFactory model)136*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__neon(benchmark::State& state, models::ExecutionPlanFactory model) {
137*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
138*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__neon,
139*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
140*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
141*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEON);
142*4bdc9457SAndroid Build Coastguard Worker   }
143*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up16x9__neon_acc2(benchmark::State & state,models::ExecutionPlanFactory model)144*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__neon_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
145*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
146*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2,
147*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
148*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
149*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEON);
150*4bdc9457SAndroid Build Coastguard Worker   }
151*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up4x9__neonfma(benchmark::State & state,models::ExecutionPlanFactory model)152*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__neonfma(benchmark::State& state, models::ExecutionPlanFactory model) {
153*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
154*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma,
155*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
156*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
157*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEONFMA);
158*4bdc9457SAndroid Build Coastguard Worker   }
159*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up4x9__neonfma_acc2(benchmark::State & state,models::ExecutionPlanFactory model)160*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__neonfma_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
161*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
162*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2,
163*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
164*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
165*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEONFMA);
166*4bdc9457SAndroid Build Coastguard Worker   }
167*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__neonfma(benchmark::State & state,models::ExecutionPlanFactory model)168*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__neonfma(benchmark::State& state, models::ExecutionPlanFactory model) {
169*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
170*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma,
171*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
172*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
173*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEONFMA);
174*4bdc9457SAndroid Build Coastguard Worker   }
175*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__neonfma_acc2(benchmark::State & state,models::ExecutionPlanFactory model)176*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__neonfma_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
177*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
178*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2,
179*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
180*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
181*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEONFMA);
182*4bdc9457SAndroid Build Coastguard Worker   }
183*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up16x9__neonfma(benchmark::State & state,models::ExecutionPlanFactory model)184*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__neonfma(benchmark::State& state, models::ExecutionPlanFactory model) {
185*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
186*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma,
187*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
188*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
189*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEONFMA);
190*4bdc9457SAndroid Build Coastguard Worker   }
191*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up16x9__neonfma_acc2(benchmark::State & state,models::ExecutionPlanFactory model)192*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__neonfma_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
193*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
194*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2,
195*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
196*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
197*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckNEONFMA);
198*4bdc9457SAndroid Build Coastguard Worker   }
199*4bdc9457SAndroid Build Coastguard Worker 
200*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neonfma);
201*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neonfma_acc2);
202*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neonfma);
203*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neonfma_acc2);
204*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__neonfma);
205*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__neonfma_acc2);
206*4bdc9457SAndroid Build Coastguard Worker 
207*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neon);
208*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neon_acc2);
209*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neon);
210*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neon_acc2);
211*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__neon);
212*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__neon_acc2);
213*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
214*4bdc9457SAndroid Build Coastguard Worker 
215*4bdc9457SAndroid Build Coastguard Worker 
216*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
f32_dwconv_up4x9__sse(benchmark::State & state,models::ExecutionPlanFactory model)217*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__sse(benchmark::State& state, models::ExecutionPlanFactory model) {
218*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
219*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__sse,
220*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
221*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_sse_params,
222*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
223*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up4x9__sse_acc2(benchmark::State & state,models::ExecutionPlanFactory model)224*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__sse_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
225*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
226*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2,
227*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
228*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_sse_params,
229*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
230*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up8x9__sse(benchmark::State & state,models::ExecutionPlanFactory model)231*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__sse(benchmark::State& state, models::ExecutionPlanFactory model) {
232*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
233*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__sse,
234*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
235*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_sse_params,
236*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */);
237*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up8x9__sse_acc2(benchmark::State & state,models::ExecutionPlanFactory model)238*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__sse_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
239*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
240*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2,
241*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
242*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_sse_params,
243*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */);
244*4bdc9457SAndroid Build Coastguard Worker   }
245*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__avx(benchmark::State & state,models::ExecutionPlanFactory model)246*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__avx(benchmark::State& state, models::ExecutionPlanFactory model) {
247*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
248*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__avx,
249*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
250*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
251*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX);
252*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up8x9__avx_acc2(benchmark::State & state,models::ExecutionPlanFactory model)253*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__avx_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
254*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
255*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2,
256*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
257*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
258*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX);
259*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up16x9__avx(benchmark::State & state,models::ExecutionPlanFactory model)260*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__avx(benchmark::State& state, models::ExecutionPlanFactory model) {
261*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
262*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__avx,
263*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
264*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
265*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX);
266*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up16x9__avx_acc2(benchmark::State & state,models::ExecutionPlanFactory model)267*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__avx_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
268*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
269*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2,
270*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
271*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
272*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX);
273*4bdc9457SAndroid Build Coastguard Worker   }
274*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__fma3(benchmark::State & state,models::ExecutionPlanFactory model)275*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__fma3(benchmark::State& state, models::ExecutionPlanFactory model) {
276*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
277*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__fma3,
278*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
279*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
280*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckFMA3);
281*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up8x9__fma3_acc2(benchmark::State & state,models::ExecutionPlanFactory model)282*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__fma3_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
283*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
284*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2,
285*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
286*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
287*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckFMA3);
288*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up16x9__fma3(benchmark::State & state,models::ExecutionPlanFactory model)289*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__fma3(benchmark::State& state, models::ExecutionPlanFactory model) {
290*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
291*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__fma3,
292*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
293*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
294*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckFMA3);
295*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up16x9__fma3_acc2(benchmark::State & state,models::ExecutionPlanFactory model)296*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__fma3_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
297*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
298*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2,
299*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
300*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_avx_params,
301*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckFMA3);
302*4bdc9457SAndroid Build Coastguard Worker   }
303*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up16x9__avx512f(benchmark::State & state,models::ExecutionPlanFactory model)304*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__avx512f(benchmark::State& state, models::ExecutionPlanFactory model) {
305*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
306*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f,
307*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
308*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
309*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX512F);
310*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up16x9__avx512f_acc2(benchmark::State & state,models::ExecutionPlanFactory model)311*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up16x9__avx512f_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
312*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
313*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2,
314*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
315*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
316*4bdc9457SAndroid Build Coastguard Worker       16 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX512F);
317*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up32x9__avx512f(benchmark::State & state,models::ExecutionPlanFactory model)318*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up32x9__avx512f(benchmark::State& state, models::ExecutionPlanFactory model) {
319*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
320*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f,
321*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
322*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
323*4bdc9457SAndroid Build Coastguard Worker       32 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX512F);
324*4bdc9457SAndroid Build Coastguard Worker   }
f32_dwconv_up32x9__avx512f_acc2(benchmark::State & state,models::ExecutionPlanFactory model)325*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up32x9__avx512f_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
326*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
327*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2,
328*4bdc9457SAndroid Build Coastguard Worker       nullptr /* dwconv */,
329*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
330*4bdc9457SAndroid Build Coastguard Worker       32 /* channel tile */, 9 /* primary tile */, benchmark::utils::CheckAVX512F);
331*4bdc9457SAndroid Build Coastguard Worker   }
332*4bdc9457SAndroid Build Coastguard Worker 
333*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx512f);
334*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx512f_acc2);
335*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up32x9__avx512f);
336*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up32x9__avx512f_acc2);
337*4bdc9457SAndroid Build Coastguard Worker 
338*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__fma3);
339*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__fma3_acc2);
340*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__fma3);
341*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__fma3_acc2);
342*4bdc9457SAndroid Build Coastguard Worker 
343*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__avx);
344*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__avx_acc2);
345*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx);
346*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx_acc2);
347*4bdc9457SAndroid Build Coastguard Worker 
348*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__sse);
349*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__sse_acc2);
350*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__sse);
351*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__sse_acc2);
352*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
353*4bdc9457SAndroid Build Coastguard Worker 
354*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
f32_dwconv_up4x9__wasmsimd_arm(benchmark::State & state,models::ExecutionPlanFactory model)355*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__wasmsimd_arm(benchmark::State& state, models::ExecutionPlanFactory model) {
356*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
357*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm,
358*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up4x9__wasmsimd,
359*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
360*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
361*4bdc9457SAndroid Build Coastguard Worker   }
362*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up4x9__wasmsimd_arm_acc2(benchmark::State & state,models::ExecutionPlanFactory model)363*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__wasmsimd_arm_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
364*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
365*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2,
366*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up4x9__wasmsimd_acc2,
367*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
368*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
369*4bdc9457SAndroid Build Coastguard Worker   }
370*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__wasmsimd_arm(benchmark::State & state,models::ExecutionPlanFactory model)371*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__wasmsimd_arm(benchmark::State& state, models::ExecutionPlanFactory model) {
372*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
373*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm,
374*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up8x9__wasmsimd,
375*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
376*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */);
377*4bdc9457SAndroid Build Coastguard Worker   }
378*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__wasmsimd_arm_acc2(benchmark::State & state,models::ExecutionPlanFactory model)379*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__wasmsimd_arm_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
380*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
381*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2,
382*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up8x9__wasmsimd_acc2,
383*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
384*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */);
385*4bdc9457SAndroid Build Coastguard Worker   }
386*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up4x9__wasmsimd_x86(benchmark::State & state,models::ExecutionPlanFactory model)387*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__wasmsimd_x86(benchmark::State& state, models::ExecutionPlanFactory model) {
388*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
389*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86,
390*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up4x9__wasmsimd,
391*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
392*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
393*4bdc9457SAndroid Build Coastguard Worker   }
394*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up4x9__wasmsimd_x86_acc2(benchmark::State & state,models::ExecutionPlanFactory model)395*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up4x9__wasmsimd_x86_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
396*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
397*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2,
398*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up4x9__wasmsimd_acc2,
399*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
400*4bdc9457SAndroid Build Coastguard Worker       4 /* channel tile */, 9 /* primary tile */);
401*4bdc9457SAndroid Build Coastguard Worker   }
402*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__wasmsimd_x86(benchmark::State & state,models::ExecutionPlanFactory model)403*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__wasmsimd_x86(benchmark::State& state, models::ExecutionPlanFactory model) {
404*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
405*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86,
406*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up8x9__wasmsimd,
407*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
408*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */);
409*4bdc9457SAndroid Build Coastguard Worker   }
410*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up8x9__wasmsimd_x86_acc2(benchmark::State & state,models::ExecutionPlanFactory model)411*4bdc9457SAndroid Build Coastguard Worker   static void f32_dwconv_up8x9__wasmsimd_x86_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
412*4bdc9457SAndroid Build Coastguard Worker     DWConvEnd2EndBenchmark(state, model,
413*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2,
414*4bdc9457SAndroid Build Coastguard Worker       xnn_f32_dwconv_ukernel_up8x9__wasmsimd_acc2,
415*4bdc9457SAndroid Build Coastguard Worker       xnn_init_f32_minmax_scalar_params,
416*4bdc9457SAndroid Build Coastguard Worker       8 /* channel tile */, 9 /* primary tile */);
417*4bdc9457SAndroid Build Coastguard Worker   }
418*4bdc9457SAndroid Build Coastguard Worker 
419*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_arm);
420*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_arm_acc2);
421*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_arm);
422*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_arm_acc2);
423*4bdc9457SAndroid Build Coastguard Worker 
424*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_x86);
425*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_x86_acc2);
426*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_x86);
427*4bdc9457SAndroid Build Coastguard Worker   BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_x86_acc2);
428*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
429*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up1x9__scalar(benchmark::State & state,models::ExecutionPlanFactory model)430*4bdc9457SAndroid Build Coastguard Worker static void f32_dwconv_up1x9__scalar(benchmark::State& state, models::ExecutionPlanFactory model) {
431*4bdc9457SAndroid Build Coastguard Worker   DWConvEnd2EndBenchmark(state, model,
432*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_minmax_ukernel_up1x9__scalar,
433*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_ukernel_up1x9__scalar,
434*4bdc9457SAndroid Build Coastguard Worker     xnn_init_f32_minmax_scalar_params,
435*4bdc9457SAndroid Build Coastguard Worker     1 /* channel tile */, 9 /* primary tile */);
436*4bdc9457SAndroid Build Coastguard Worker }
437*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up1x9__scalar_acc2(benchmark::State & state,models::ExecutionPlanFactory model)438*4bdc9457SAndroid Build Coastguard Worker static void f32_dwconv_up1x9__scalar_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
439*4bdc9457SAndroid Build Coastguard Worker   DWConvEnd2EndBenchmark(state, model,
440*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2,
441*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_ukernel_up1x9__scalar_acc2,
442*4bdc9457SAndroid Build Coastguard Worker     xnn_init_f32_minmax_scalar_params,
443*4bdc9457SAndroid Build Coastguard Worker     1 /* channel tile */, 9 /* primary tile */);
444*4bdc9457SAndroid Build Coastguard Worker }
445*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up2x9__scalar(benchmark::State & state,models::ExecutionPlanFactory model)446*4bdc9457SAndroid Build Coastguard Worker static void f32_dwconv_up2x9__scalar(benchmark::State& state, models::ExecutionPlanFactory model) {
447*4bdc9457SAndroid Build Coastguard Worker   DWConvEnd2EndBenchmark(state, model,
448*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_minmax_ukernel_up2x9__scalar,
449*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_ukernel_up2x9__scalar,
450*4bdc9457SAndroid Build Coastguard Worker     xnn_init_f32_minmax_scalar_params,
451*4bdc9457SAndroid Build Coastguard Worker     2 /* channel tile */, 9 /* primary tile */);
452*4bdc9457SAndroid Build Coastguard Worker }
453*4bdc9457SAndroid Build Coastguard Worker 
f32_dwconv_up2x9__scalar_acc2(benchmark::State & state,models::ExecutionPlanFactory model)454*4bdc9457SAndroid Build Coastguard Worker static void f32_dwconv_up2x9__scalar_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
455*4bdc9457SAndroid Build Coastguard Worker   DWConvEnd2EndBenchmark(state, model,
456*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2,
457*4bdc9457SAndroid Build Coastguard Worker     xnn_f32_dwconv_ukernel_up2x9__scalar_acc2,
458*4bdc9457SAndroid Build Coastguard Worker     xnn_init_f32_minmax_scalar_params,
459*4bdc9457SAndroid Build Coastguard Worker     2 /* channel tile */, 9 /* primary tile */);
460*4bdc9457SAndroid Build Coastguard Worker }
461*4bdc9457SAndroid Build Coastguard Worker 
462*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_FP32_END2END(f32_dwconv_up1x9__scalar);
463*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_FP32_END2END(f32_dwconv_up1x9__scalar_acc2);
464*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_FP32_END2END(f32_dwconv_up2x9__scalar);
465*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_FP32_END2END(f32_dwconv_up2x9__scalar_acc2);
466*4bdc9457SAndroid Build Coastguard Worker 
467*4bdc9457SAndroid Build Coastguard Worker #ifndef XNNPACK_BENCHMARK_NO_MAIN
468*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_MAIN();
469*4bdc9457SAndroid Build Coastguard Worker #endif
470