blob: 2eee504339b1ddca6c44e574773064cff32f56df [file] [log] [blame]
Marat Dukhan434352f2021-10-16 18:28:55 -07001// Copyright 2021 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 <benchmark/benchmark.h>
13#include "bench/utils.h"
14
15#include <fp16/fp16.h>
16#include <xnnpack/AlignedAllocator.h>
17#include <xnnpack/common.h>
18#include <xnnpack/params.h>
Marat Dukhan134f9842021-12-29 19:57:31 -080019#include <xnnpack/params-init.h>
Marat Dukhan434352f2021-10-16 18:28:55 -070020#include <xnnpack/vcvt.h>
21
22
23static void f16_f32_vcvt(
24 benchmark::State& state,
25 xnn_f16_f32_vcvt_ukernel_function cvt,
Marat Dukhan134f9842021-12-29 19:57:31 -080026 xnn_init_f16_f32_cvt_params_fn init_params = nullptr,
Marat Dukhan434352f2021-10-16 18:28:55 -070027 benchmark::utils::IsaCheckFunction isa_check = nullptr)
28{
29 if (isa_check && !isa_check(state)) {
30 return;
31 }
32
33 const size_t num_elements = state.range(0);
34
35 std::random_device random_device;
36 auto rng = std::mt19937(random_device());
37 auto f32rng = std::bind(std::uniform_real_distribution<float>(-10.0f, 10.0f), std::ref(rng));
38 auto f16rng = std::bind(fp16_ieee_from_fp32_value, f32rng);
39
Marat Dukhand77f77d2021-10-24 15:39:59 -070040 std::vector<uint16_t, AlignedAllocator<uint16_t, 64>> x(num_elements + XNN_EXTRA_BYTES / sizeof(uint16_t));
Marat Dukhan434352f2021-10-16 18:28:55 -070041 std::vector<float, AlignedAllocator<float, 64>> y(num_elements);
42 std::generate(x.begin(), x.end(), std::ref(f16rng));
43 std::fill(y.begin(), y.end(), std::nanf(""));
44
Marat Dukhan134f9842021-12-29 19:57:31 -080045 xnn_f16_f32_cvt_params params;
46 if (init_params != nullptr) {
47 init_params(&params);
48 }
Marat Dukhan434352f2021-10-16 18:28:55 -070049 for (auto _ : state) {
Marat Dukhan134f9842021-12-29 19:57:31 -080050 cvt(num_elements * sizeof(uint16_t), x.data(), y.data(), &params);
Marat Dukhan434352f2021-10-16 18:28:55 -070051 }
52
53 const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
54 if (cpu_frequency != 0) {
55 state.counters["cpufreq"] = cpu_frequency;
56 }
57
58 const size_t elements_per_iteration = num_elements;
59 state.counters["elements"] =
60 benchmark::Counter(uint64_t(state.iterations()) * elements_per_iteration, benchmark::Counter::kIsRate);
61
62 const size_t bytes_per_iteration = num_elements * (sizeof(uint16_t) + sizeof(float));
63 state.counters["bytes"] =
64 benchmark::Counter(uint64_t(state.iterations()) * bytes_per_iteration, benchmark::Counter::kIsRate);
65}
66
67#if XNN_ARCH_ARM || XNN_ARCH_ARM64
68 BENCHMARK_CAPTURE(f16_f32_vcvt, neonfp16_x8,
69 xnn_f16_f32_vcvt_ukernel__neonfp16_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -080070 nullptr /* init params */,
Marat Dukhan434352f2021-10-16 18:28:55 -070071 benchmark::utils::CheckNEONFP16)
72 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
73 ->UseRealTime();
74 BENCHMARK_CAPTURE(f16_f32_vcvt, neonfp16_x16,
75 xnn_f16_f32_vcvt_ukernel__neonfp16_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -080076 nullptr /* init params */,
Marat Dukhan434352f2021-10-16 18:28:55 -070077 benchmark::utils::CheckNEONFP16)
78 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
79 ->UseRealTime();
80
81 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int16_x8,
82 xnn_f16_f32_vcvt_ukernel__neon_int16_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -080083 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -070084 benchmark::utils::CheckNEON)
85 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
86 ->UseRealTime();
87 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int16_x16,
88 xnn_f16_f32_vcvt_ukernel__neon_int16_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -080089 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -070090 benchmark::utils::CheckNEON)
91 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
92 ->UseRealTime();
93 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int16_x24,
94 xnn_f16_f32_vcvt_ukernel__neon_int16_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -080095 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -070096 benchmark::utils::CheckNEON)
97 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
98 ->UseRealTime();
99 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int16_x32,
100 xnn_f16_f32_vcvt_ukernel__neon_int16_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800101 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700102 benchmark::utils::CheckNEON)
103 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
104 ->UseRealTime();
105
106 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int32_x8,
107 xnn_f16_f32_vcvt_ukernel__neon_int32_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800108 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700109 benchmark::utils::CheckNEON)
110 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
111 ->UseRealTime();
112 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int32_x16,
113 xnn_f16_f32_vcvt_ukernel__neon_int32_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800114 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700115 benchmark::utils::CheckNEON)
116 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
117 ->UseRealTime();
118 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int32_x24,
119 xnn_f16_f32_vcvt_ukernel__neon_int32_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800120 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700121 benchmark::utils::CheckNEON)
122 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
123 ->UseRealTime();
124 BENCHMARK_CAPTURE(f16_f32_vcvt, neon_int32_x32,
125 xnn_f16_f32_vcvt_ukernel__neon_int32_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800126 xnn_init_f16_f32_cvt_neon_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700127 benchmark::utils::CheckNEON)
128 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
129 ->UseRealTime();
130#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
131
132#if XNN_ARCH_X86 || XNN_ARCH_X86_64
133 BENCHMARK_CAPTURE(f16_f32_vcvt, avx512skx_x16,
134 xnn_f16_f32_vcvt_ukernel__avx512skx_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800135 nullptr /* init params */,
Marat Dukhan434352f2021-10-16 18:28:55 -0700136 benchmark::utils::CheckAVX512SKX)
137 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
138 ->UseRealTime();
139 BENCHMARK_CAPTURE(f16_f32_vcvt, avx512skx_x32,
140 xnn_f16_f32_vcvt_ukernel__avx512skx_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800141 nullptr /* init params */,
Marat Dukhan434352f2021-10-16 18:28:55 -0700142 benchmark::utils::CheckAVX512SKX)
143 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
144 ->UseRealTime();
145
146 BENCHMARK_CAPTURE(f16_f32_vcvt, f16c_x8,
147 xnn_f16_f32_vcvt_ukernel__f16c_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800148 nullptr /* init params */,
Marat Dukhan434352f2021-10-16 18:28:55 -0700149 benchmark::utils::CheckF16C)
150 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
151 ->UseRealTime();
152 BENCHMARK_CAPTURE(f16_f32_vcvt, f16c_x16,
153 xnn_f16_f32_vcvt_ukernel__f16c_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800154 nullptr /* init params */,
Marat Dukhan434352f2021-10-16 18:28:55 -0700155 benchmark::utils::CheckF16C)
156 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
157 ->UseRealTime();
158
159 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int16_x8,
160 xnn_f16_f32_vcvt_ukernel__avx_int16_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800161 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700162 benchmark::utils::CheckAVX)
163 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
164 ->UseRealTime();
165 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int16_x16,
166 xnn_f16_f32_vcvt_ukernel__avx_int16_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800167 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700168 benchmark::utils::CheckAVX)
169 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
170 ->UseRealTime();
171 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int16_x24,
172 xnn_f16_f32_vcvt_ukernel__avx_int16_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800173 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700174 benchmark::utils::CheckAVX)
175 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
176 ->UseRealTime();
177 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int16_x32,
178 xnn_f16_f32_vcvt_ukernel__avx_int16_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800179 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700180 benchmark::utils::CheckAVX)
181 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
182 ->UseRealTime();
183
184 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int32_x8,
185 xnn_f16_f32_vcvt_ukernel__avx_int32_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800186 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700187 benchmark::utils::CheckAVX)
188 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
189 ->UseRealTime();
190 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int32_x16,
191 xnn_f16_f32_vcvt_ukernel__avx_int32_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800192 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700193 benchmark::utils::CheckAVX)
194 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
195 ->UseRealTime();
196 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int32_x24,
197 xnn_f16_f32_vcvt_ukernel__avx_int32_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800198 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700199 benchmark::utils::CheckAVX)
200 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
201 ->UseRealTime();
202 BENCHMARK_CAPTURE(f16_f32_vcvt, avx_int32_x32,
203 xnn_f16_f32_vcvt_ukernel__avx_int32_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800204 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700205 benchmark::utils::CheckAVX)
206 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
207 ->UseRealTime();
208
209 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int16_x8,
210 xnn_f16_f32_vcvt_ukernel__sse41_int16_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800211 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700212 benchmark::utils::CheckSSE41)
213 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
214 ->UseRealTime();
215 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int16_x16,
216 xnn_f16_f32_vcvt_ukernel__sse41_int16_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800217 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700218 benchmark::utils::CheckSSE41)
219 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
220 ->UseRealTime();
221 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int16_x24,
222 xnn_f16_f32_vcvt_ukernel__sse41_int16_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800223 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700224 benchmark::utils::CheckSSE41)
225 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
226 ->UseRealTime();
227 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int16_x32,
228 xnn_f16_f32_vcvt_ukernel__sse41_int16_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800229 xnn_init_f16_f32_cvt_sse_int16_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700230 benchmark::utils::CheckSSE41)
231 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
232 ->UseRealTime();
233
234 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int32_x8,
235 xnn_f16_f32_vcvt_ukernel__sse41_int32_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800236 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700237 benchmark::utils::CheckSSE41)
238 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
239 ->UseRealTime();
240 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int32_x16,
241 xnn_f16_f32_vcvt_ukernel__sse41_int32_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800242 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700243 benchmark::utils::CheckSSE41)
244 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
245 ->UseRealTime();
246 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int32_x24,
247 xnn_f16_f32_vcvt_ukernel__sse41_int32_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800248 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700249 benchmark::utils::CheckSSE41)
250 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
251 ->UseRealTime();
252 BENCHMARK_CAPTURE(f16_f32_vcvt, sse41_int32_x32,
253 xnn_f16_f32_vcvt_ukernel__sse41_int32_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800254 xnn_init_f16_f32_cvt_sse_int32_params,
Marat Dukhan434352f2021-10-16 18:28:55 -0700255 benchmark::utils::CheckSSE41)
256 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
257 ->UseRealTime();
258
259 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int16_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800260 xnn_f16_f32_vcvt_ukernel__sse2_int16_x8,
261 xnn_init_f16_f32_cvt_sse_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700262 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
263 ->UseRealTime();
264 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int16_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800265 xnn_f16_f32_vcvt_ukernel__sse2_int16_x16,
266 xnn_init_f16_f32_cvt_sse_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700267 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
268 ->UseRealTime();
269 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int16_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800270 xnn_f16_f32_vcvt_ukernel__sse2_int16_x24,
271 xnn_init_f16_f32_cvt_sse_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700272 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
273 ->UseRealTime();
274 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int16_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800275 xnn_f16_f32_vcvt_ukernel__sse2_int16_x32,
276 xnn_init_f16_f32_cvt_sse_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700277 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
278 ->UseRealTime();
279
280 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int32_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800281 xnn_f16_f32_vcvt_ukernel__sse2_int32_x8,
282 xnn_init_f16_f32_cvt_sse_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700283 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
284 ->UseRealTime();
285 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int32_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800286 xnn_f16_f32_vcvt_ukernel__sse2_int32_x16,
287 xnn_init_f16_f32_cvt_sse_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700288 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
289 ->UseRealTime();
290 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int32_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800291 xnn_f16_f32_vcvt_ukernel__sse2_int32_x24,
292 xnn_init_f16_f32_cvt_sse_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700293 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
294 ->UseRealTime();
295 BENCHMARK_CAPTURE(f16_f32_vcvt, sse2_int32_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800296 xnn_f16_f32_vcvt_ukernel__sse2_int32_x32,
297 xnn_init_f16_f32_cvt_sse_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700298 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
299 ->UseRealTime();
300#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
301
Marat Dukhan4c617792021-12-21 15:47:58 -0800302#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan434352f2021-10-16 18:28:55 -0700303 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int16_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800304 xnn_f16_f32_vcvt_ukernel__wasmsimd_int16_x8,
305 xnn_init_f16_f32_cvt_wasmsimd_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700306 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
307 ->UseRealTime();
308 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int16_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800309 xnn_f16_f32_vcvt_ukernel__wasmsimd_int16_x16,
310 xnn_init_f16_f32_cvt_wasmsimd_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700311 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
312 ->UseRealTime();
313 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int16_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800314 xnn_f16_f32_vcvt_ukernel__wasmsimd_int16_x24,
315 xnn_init_f16_f32_cvt_wasmsimd_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700316 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
317 ->UseRealTime();
318 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int16_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800319 xnn_f16_f32_vcvt_ukernel__wasmsimd_int16_x32,
320 xnn_init_f16_f32_cvt_wasmsimd_int16_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700321 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
322 ->UseRealTime();
323
324 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int32_x8,
Marat Dukhan134f9842021-12-29 19:57:31 -0800325 xnn_f16_f32_vcvt_ukernel__wasmsimd_int32_x8,
326 xnn_init_f16_f32_cvt_wasmsimd_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700327 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
328 ->UseRealTime();
329 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int32_x16,
Marat Dukhan134f9842021-12-29 19:57:31 -0800330 xnn_f16_f32_vcvt_ukernel__wasmsimd_int32_x16,
331 xnn_init_f16_f32_cvt_wasmsimd_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700332 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
333 ->UseRealTime();
334 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int32_x24,
Marat Dukhan134f9842021-12-29 19:57:31 -0800335 xnn_f16_f32_vcvt_ukernel__wasmsimd_int32_x24,
336 xnn_init_f16_f32_cvt_wasmsimd_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700337 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
338 ->UseRealTime();
339 BENCHMARK_CAPTURE(f16_f32_vcvt, wasmsimd_int32_x32,
Marat Dukhan134f9842021-12-29 19:57:31 -0800340 xnn_f16_f32_vcvt_ukernel__wasmsimd_int32_x32,
341 xnn_init_f16_f32_cvt_wasmsimd_int32_params)
Marat Dukhan434352f2021-10-16 18:28:55 -0700342 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
343 ->UseRealTime();
Marat Dukhan4c617792021-12-21 15:47:58 -0800344#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan434352f2021-10-16 18:28:55 -0700345
Marat Dukhan134f9842021-12-29 19:57:31 -0800346BENCHMARK_CAPTURE(f16_f32_vcvt, scalar_x1,
347 xnn_f16_f32_vcvt_ukernel__scalar_x1,
348 xnn_init_f16_f32_cvt_scalar_params)
Marat Dukhane2c00012021-10-17 22:02:35 -0700349 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
350 ->UseRealTime();
Marat Dukhan134f9842021-12-29 19:57:31 -0800351BENCHMARK_CAPTURE(f16_f32_vcvt, scalar_x2,
352 xnn_f16_f32_vcvt_ukernel__scalar_x2,
353 xnn_init_f16_f32_cvt_scalar_params)
Marat Dukhane2c00012021-10-17 22:02:35 -0700354 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
355 ->UseRealTime();
Marat Dukhan134f9842021-12-29 19:57:31 -0800356BENCHMARK_CAPTURE(f16_f32_vcvt, scalar_x3,
357 xnn_f16_f32_vcvt_ukernel__scalar_x3,
358 xnn_init_f16_f32_cvt_scalar_params)
Marat Dukhane2c00012021-10-17 22:02:35 -0700359 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
360 ->UseRealTime();
Marat Dukhan134f9842021-12-29 19:57:31 -0800361BENCHMARK_CAPTURE(f16_f32_vcvt, scalar_x4,
362 xnn_f16_f32_vcvt_ukernel__scalar_x4,
363 xnn_init_f16_f32_cvt_scalar_params)
Marat Dukhane2c00012021-10-17 22:02:35 -0700364 ->Apply(benchmark::utils::UnaryElementwiseParameters<uint16_t, float>)
365 ->UseRealTime();
366
Marat Dukhan434352f2021-10-16 18:28:55 -0700367#ifndef XNNPACK_BENCHMARK_NO_MAIN
368BENCHMARK_MAIN();
369#endif