blob: 367f908a19f1297c60ea9dc00b0647a1e6d6668e [file] [log] [blame]
Marat Dukhanef4416e2019-10-31 13:44:40 -07001// Copyright 2019 Google LLC
2//
3// This source code is licensed under the BSD-style license found in the
4// LICENSE file in the root directory of this source tree.
5
6#include <algorithm>
7#include <cmath>
8#include <functional>
9#include <random>
10#include <vector>
11
12#include <xnnpack.h>
13
14#include <benchmark/benchmark.h>
15
Marat Dukhan270a2c42020-06-26 16:45:52 -070016#include "bench/end2end.h"
Marat Dukhanef4416e2019-10-31 13:44:40 -070017#include "bench/utils.h"
18#include "models/models.h"
19#include <xnnpack/dwconv.h>
20#include <xnnpack/params.h>
21
22
23static void DWConvEnd2EndBenchmark(
24 benchmark::State& state,
Marat Dukhanaefaef32020-04-09 07:09:34 -070025 models::ExecutionPlanFactory model_factory,
Marat Dukhan163a7e62020-04-09 04:19:26 -070026 xnn_f32_dwconv_minmax_unipass_ukernel_function dwconv,
Marat Dukhanaefaef32020-04-09 07:09:34 -070027 uint8_t channel_tile, uint8_t primary_tile,
Marat Dukhanc8466f52019-11-25 18:01:10 -080028 benchmark::utils::IsaCheckFunction isa_check = nullptr)
Marat Dukhanef4416e2019-10-31 13:44:40 -070029{
Marat Dukhanc8466f52019-11-25 18:01:10 -080030 if (isa_check && !isa_check(state)) {
31 return;
32 }
Marat Dukhan04f03be2019-11-19 12:36:47 -080033 if (xnn_initialize(nullptr /* allocator */) != xnn_status_success) {
Marat Dukhanef4416e2019-10-31 13:44:40 -070034 state.SkipWithError("failed to initialize XNNPACK");
35 return;
36 }
37
38 // Override microkernels chosen in xnn_initialize
39 for (size_t i = 0; i < XNN_MAX_F32_DWCONV_UKERNELS; i++) {
40 // Replace only the microkernel the matching kernel size.
Marat Dukhanaefaef32020-04-09 07:09:34 -070041 if (xnn_params.f32.dwconv[i].primary_tile == primary_tile) {
Marat Dukhan99103dc2020-03-13 00:16:53 -070042 // Note: do not directly assign to xnn_params.f32.dwconv[i] because it breaks older gcc.
Marat Dukhanaefaef32020-04-09 07:09:34 -070043 xnn_params.f32.dwconv[i].minmax.unipass = xnn_dwconv_unipass_ukernel_function(dwconv);
44 xnn_params.f32.dwconv[i].channel_tile = channel_tile;
45 xnn_params.f32.dwconv[i].primary_tile = primary_tile;
46 xnn_params.f32.dwconv[i].incremental_tile = 0;
Marat Dukhanef4416e2019-10-31 13:44:40 -070047 break;
48 }
49 }
50
51 auto execution_plan = model_factory(nullptr);
52 if (execution_plan.empty()) {
53 state.SkipWithError("failed to create a model");
54 return;
55 }
56
57 for (auto _ : state) {
58 for (const std::unique_ptr<xnn_operator, decltype(&xnn_delete_operator)>& op : execution_plan) {
59 xnn_status status = xnn_run_operator(op.get(), nullptr);
60 if (status != xnn_status_success) {
61 state.SkipWithError("failed to run a model");
62 return;
63 }
64 }
65 }
66 state.counters["Freq"] = benchmark::utils::GetCurrentCpuFrequency();
67}
68
Marat Dukhanef4416e2019-10-31 13:44:40 -070069#if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
70 static void f32_dwconv_up4x9__aarch64_neonfma(benchmark::State& state, models::ExecutionPlanFactory model) {
71 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -070072 xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma,
Marat Dukhanef4416e2019-10-31 13:44:40 -070073 4 /* cr */, 9 /* mr */);
74 }
75
76 static void f32_dwconv_up4x9__aarch64_neonfma_cortex_a55(benchmark::State& state, models::ExecutionPlanFactory model) {
77 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -070078 xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55,
Marat Dukhanef4416e2019-10-31 13:44:40 -070079 4 /* cr */, 9 /* mr */);
80 }
81
Marat Dukhan270a2c42020-06-26 16:45:52 -070082 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__aarch64_neonfma);
83 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhanef4416e2019-10-31 13:44:40 -070084#endif // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
85
86#if XNN_ARCH_ARM || XNN_ARCH_ARM64
87 static void f32_dwconv_up4x9__neon(benchmark::State& state, models::ExecutionPlanFactory model) {
88 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -070089 xnn_f32_dwconv_minmax_ukernel_up4x9__neon,
Marat Dukhanc8466f52019-11-25 18:01:10 -080090 4 /* cr */, 9 /* mr */, benchmark::utils::CheckNEON);
Marat Dukhanef4416e2019-10-31 13:44:40 -070091 }
92
Marat Dukhan5098c3e2019-11-07 12:01:19 -080093 static void f32_dwconv_up4x9__neon_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
94 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -070095 xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -080096 4 /* cr */, 9 /* mr */, benchmark::utils::CheckNEON);
Marat Dukhan5098c3e2019-11-07 12:01:19 -080097 }
98
99 static void f32_dwconv_up8x9__neon(benchmark::State& state, models::ExecutionPlanFactory model) {
100 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700101 xnn_f32_dwconv_minmax_ukernel_up8x9__neon,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800102 8 /* cr */, 9 /* mr */, benchmark::utils::CheckNEON);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800103 }
104
105 static void f32_dwconv_up8x9__neon_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
106 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700107 xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800108 8 /* cr */, 9 /* mr */, benchmark::utils::CheckNEON);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800109 }
110
Marat Dukhanef4416e2019-10-31 13:44:40 -0700111 static void f32_dwconv_up4x9__neonfma(benchmark::State& state, models::ExecutionPlanFactory model) {
112 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700113 xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800114 4 /* cr */, 9 /* mr */, benchmark::utils::CheckNEONFMA);
Marat Dukhanef4416e2019-10-31 13:44:40 -0700115 }
116
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800117 static void f32_dwconv_up4x9__neonfma_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
118 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700119 xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800120 4 /* cr */, 9 /* mr */, benchmark::utils::CheckNEONFMA);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800121 }
122
Marat Dukhanef4416e2019-10-31 13:44:40 -0700123 static void f32_dwconv_up8x9__neonfma(benchmark::State& state, models::ExecutionPlanFactory model) {
124 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700125 xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800126 8 /* cr */, 9 /* mr */, benchmark::utils::CheckNEONFMA);
Marat Dukhanef4416e2019-10-31 13:44:40 -0700127 }
128
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800129 static void f32_dwconv_up8x9__neonfma_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
130 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700131 xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800132 8 /* cr */, 9 /* mr */, benchmark::utils::CheckNEONFMA);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800133 }
134
Marat Dukhan270a2c42020-06-26 16:45:52 -0700135 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neon);
136 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neon_acc2);
137 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neon);
138 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neon_acc2);
Marat Dukhanef4416e2019-10-31 13:44:40 -0700139
Marat Dukhan270a2c42020-06-26 16:45:52 -0700140 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neonfma);
141 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__neonfma_acc2);
142 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neonfma);
143 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__neonfma_acc2);
Marat Dukhanef4416e2019-10-31 13:44:40 -0700144#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
145
146
147#if XNN_ARCH_X86 || XNN_ARCH_X86_64
148 static void f32_dwconv_up4x9__sse(benchmark::State& state, models::ExecutionPlanFactory model) {
149 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700150 xnn_f32_dwconv_minmax_ukernel_up4x9__sse,
Marat Dukhanef4416e2019-10-31 13:44:40 -0700151 4 /* cr */, 9 /* mr */);
152 }
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800153 static void f32_dwconv_up4x9__sse_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
154 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700155 xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2,
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800156 4 /* cr */, 9 /* mr */);
157 }
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800158 static void f32_dwconv_up8x9__sse(benchmark::State& state, models::ExecutionPlanFactory model) {
159 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700160 xnn_f32_dwconv_minmax_ukernel_up8x9__sse,
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800161 8 /* cr */, 9 /* mr */);
162 }
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800163 static void f32_dwconv_up8x9__sse_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
164 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700165 xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2,
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800166 8 /* cr */, 9 /* mr */);
167 }
168
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800169 static void f32_dwconv_up8x9__avx(benchmark::State& state, models::ExecutionPlanFactory model) {
170 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700171 xnn_f32_dwconv_minmax_ukernel_up8x9__avx,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800172 8 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800173 }
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800174 static void f32_dwconv_up8x9__avx_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
175 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700176 xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800177 8 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800178 }
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800179 static void f32_dwconv_up16x9__avx(benchmark::State& state, models::ExecutionPlanFactory model) {
180 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700181 xnn_f32_dwconv_minmax_ukernel_up16x9__avx,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800182 16 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800183 }
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800184 static void f32_dwconv_up16x9__avx_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
185 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700186 xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800187 16 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800188 }
189
190 static void f32_dwconv_up8x9__fma3(benchmark::State& state, models::ExecutionPlanFactory model) {
191 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700192 xnn_f32_dwconv_minmax_ukernel_up8x9__fma3,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800193 8 /* cr */, 9 /* mr */, benchmark::utils::CheckFMA3);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800194 }
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800195 static void f32_dwconv_up8x9__fma3_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
196 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700197 xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800198 8 /* cr */, 9 /* mr */, benchmark::utils::CheckFMA3);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800199 }
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800200 static void f32_dwconv_up16x9__fma3(benchmark::State& state, models::ExecutionPlanFactory model) {
201 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700202 xnn_f32_dwconv_minmax_ukernel_up16x9__fma3,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800203 16 /* cr */, 9 /* mr */, benchmark::utils::CheckFMA3);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800204 }
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800205 static void f32_dwconv_up16x9__fma3_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
206 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700207 xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2,
Marat Dukhanc8466f52019-11-25 18:01:10 -0800208 16 /* cr */, 9 /* mr */, benchmark::utils::CheckFMA3);
Marat Dukhan17ec5f32019-11-22 13:34:16 -0800209 }
210
Marat Dukhan479f87e2019-11-27 15:17:06 -0800211 static void f32_dwconv_up16x9__avx512f(benchmark::State& state, models::ExecutionPlanFactory model) {
212 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700213 xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f,
Marat Dukhan479f87e2019-11-27 15:17:06 -0800214 16 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX512F);
215 }
216 static void f32_dwconv_up16x9__avx512f_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
217 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700218 xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2,
Marat Dukhan479f87e2019-11-27 15:17:06 -0800219 16 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX512F);
220 }
221 static void f32_dwconv_up32x9__avx512f(benchmark::State& state, models::ExecutionPlanFactory model) {
222 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700223 xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f,
Marat Dukhan479f87e2019-11-27 15:17:06 -0800224 32 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX512F);
225 }
226 static void f32_dwconv_up32x9__avx512f_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
227 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700228 xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2,
Marat Dukhan479f87e2019-11-27 15:17:06 -0800229 32 /* cr */, 9 /* mr */, benchmark::utils::CheckAVX512F);
230 }
231
Marat Dukhan270a2c42020-06-26 16:45:52 -0700232 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__sse);
233 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__sse_acc2);
234 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__sse);
235 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__sse_acc2);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800236
Marat Dukhan270a2c42020-06-26 16:45:52 -0700237 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__avx);
238 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__avx_acc2);
239 BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx);
240 BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx_acc2);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800241
Marat Dukhan270a2c42020-06-26 16:45:52 -0700242 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__fma3);
243 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__fma3_acc2);
244 BENCHMARK_FP32_END2END(f32_dwconv_up16x9__fma3);
245 BENCHMARK_FP32_END2END(f32_dwconv_up16x9__fma3_acc2);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800246
Marat Dukhan270a2c42020-06-26 16:45:52 -0700247 BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx512f);
248 BENCHMARK_FP32_END2END(f32_dwconv_up16x9__avx512f_acc2);
249 BENCHMARK_FP32_END2END(f32_dwconv_up32x9__avx512f);
250 BENCHMARK_FP32_END2END(f32_dwconv_up32x9__avx512f_acc2);
Marat Dukhanef4416e2019-10-31 13:44:40 -0700251#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
252
Marat Dukhanac014d72020-06-16 08:36:47 -0700253#if XNN_ARCH_WASMSIMD
254 static void f32_dwconv_up4x9__wasmsimd_arm(benchmark::State& state, models::ExecutionPlanFactory model) {
255 DWConvEnd2EndBenchmark(state, model,
256 xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm,
257 4 /* cr */, 9 /* mr */);
258 }
259
260 static void f32_dwconv_up4x9__wasmsimd_acc2_arm(benchmark::State& state, models::ExecutionPlanFactory model) {
261 DWConvEnd2EndBenchmark(state, model,
262 xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm,
263 4 /* cr */, 9 /* mr */);
264 }
265
266 static void f32_dwconv_up8x9__wasmsimd_arm(benchmark::State& state, models::ExecutionPlanFactory model) {
267 DWConvEnd2EndBenchmark(state, model,
268 xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm,
269 8 /* cr */, 9 /* mr */);
270 }
271
272 static void f32_dwconv_up8x9__wasmsimd_acc2_arm(benchmark::State& state, models::ExecutionPlanFactory model) {
273 DWConvEnd2EndBenchmark(state, model,
274 xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm,
275 8 /* cr */, 9 /* mr */);
276 }
277
278 static void f32_dwconv_up4x9__wasmsimd_x86(benchmark::State& state, models::ExecutionPlanFactory model) {
279 DWConvEnd2EndBenchmark(state, model,
280 xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86,
281 4 /* cr */, 9 /* mr */);
282 }
283
284 static void f32_dwconv_up4x9__wasmsimd_acc2_x86(benchmark::State& state, models::ExecutionPlanFactory model) {
285 DWConvEnd2EndBenchmark(state, model,
286 xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86,
287 4 /* cr */, 9 /* mr */);
288 }
289
290 static void f32_dwconv_up8x9__wasmsimd_x86(benchmark::State& state, models::ExecutionPlanFactory model) {
291 DWConvEnd2EndBenchmark(state, model,
292 xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86,
293 8 /* cr */, 9 /* mr */);
294 }
295
296 static void f32_dwconv_up8x9__wasmsimd_acc2_x86(benchmark::State& state, models::ExecutionPlanFactory model) {
297 DWConvEnd2EndBenchmark(state, model,
298 xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86,
299 8 /* cr */, 9 /* mr */);
300 }
301
Marat Dukhan270a2c42020-06-26 16:45:52 -0700302 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_arm);
303 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_acc2_arm);
304 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_arm);
305 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -0700306
Marat Dukhan270a2c42020-06-26 16:45:52 -0700307 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_x86);
308 BENCHMARK_FP32_END2END(f32_dwconv_up4x9__wasmsimd_acc2_x86);
309 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_x86);
310 BENCHMARK_FP32_END2END(f32_dwconv_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -0700311#endif // XNN_ARCH_WASMSIMD
312
Marat Dukhanef4416e2019-10-31 13:44:40 -0700313static void f32_dwconv_up1x9__scalar(benchmark::State& state, models::ExecutionPlanFactory model) {
314 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700315 xnn_f32_dwconv_minmax_ukernel_up1x9__scalar,
Marat Dukhanef4416e2019-10-31 13:44:40 -0700316 1 /* cr */, 9 /* mr */);
317}
318
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800319static void f32_dwconv_up1x9__scalar_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
320 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700321 xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2,
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800322 1 /* cr */, 9 /* mr */);
323}
324
325static void f32_dwconv_up2x9__scalar(benchmark::State& state, models::ExecutionPlanFactory model) {
326 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700327 xnn_f32_dwconv_minmax_ukernel_up2x9__scalar,
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800328 2 /* cr */, 9 /* mr */);
329}
330
331static void f32_dwconv_up2x9__scalar_acc2(benchmark::State& state, models::ExecutionPlanFactory model) {
332 DWConvEnd2EndBenchmark(state, model,
Marat Dukhande06f492020-04-09 00:19:31 -0700333 xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2,
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800334 2 /* cr */, 9 /* mr */);
335}
336
Marat Dukhan270a2c42020-06-26 16:45:52 -0700337BENCHMARK_FP32_END2END(f32_dwconv_up1x9__scalar);
338BENCHMARK_FP32_END2END(f32_dwconv_up1x9__scalar_acc2);
339BENCHMARK_FP32_END2END(f32_dwconv_up2x9__scalar);
340BENCHMARK_FP32_END2END(f32_dwconv_up2x9__scalar_acc2);
Marat Dukhan5098c3e2019-11-07 12:01:19 -0800341
Marat Dukhanef4416e2019-10-31 13:44:40 -0700342#ifndef XNNPACK_BENCHMARK_NO_MAIN
343BENCHMARK_MAIN();
344#endif