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 <cfloat>
8*4bdc9457SAndroid Build Coastguard Worker #include <cmath>
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 <cpuinfo.h>
14*4bdc9457SAndroid Build Coastguard Worker
15*4bdc9457SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
16*4bdc9457SAndroid Build Coastguard Worker #include "bench/utils.h"
17*4bdc9457SAndroid Build Coastguard Worker
18*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/aligned-allocator.h>
19*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
20*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/math-stubs.h>
21*4bdc9457SAndroid Build Coastguard Worker
22*4bdc9457SAndroid Build Coastguard Worker
23*4bdc9457SAndroid Build Coastguard Worker class Rounding : public benchmark::Fixture {
24*4bdc9457SAndroid Build Coastguard Worker public:
Rounding()25*4bdc9457SAndroid Build Coastguard Worker inline Rounding()
26*4bdc9457SAndroid Build Coastguard Worker {
27*4bdc9457SAndroid Build Coastguard Worker cpuinfo_initialize();
28*4bdc9457SAndroid Build Coastguard Worker const size_t l1d_size = cpuinfo_get_l1d_cache(0)->size;
29*4bdc9457SAndroid Build Coastguard Worker const size_t l1d_reserve = 1024;
30*4bdc9457SAndroid Build Coastguard Worker n_ = (l1d_size - l1d_reserve) / (2 * sizeof(float));
31*4bdc9457SAndroid Build Coastguard Worker n_ = n_ / 16 * 16;
32*4bdc9457SAndroid Build Coastguard Worker }
33*4bdc9457SAndroid Build Coastguard Worker
SetUp(const benchmark::State &)34*4bdc9457SAndroid Build Coastguard Worker virtual void SetUp(const benchmark::State&) override
35*4bdc9457SAndroid Build Coastguard Worker {
36*4bdc9457SAndroid Build Coastguard Worker std::random_device random_device;
37*4bdc9457SAndroid Build Coastguard Worker auto rng = std::mt19937(random_device());
38*4bdc9457SAndroid Build Coastguard Worker auto f32rng = std::bind(std::uniform_real_distribution<float>(-10.0f, 10.0f), std::ref(rng));
39*4bdc9457SAndroid Build Coastguard Worker
40*4bdc9457SAndroid Build Coastguard Worker input_.resize(n());
41*4bdc9457SAndroid Build Coastguard Worker std::generate(input_.begin(), input_.end(), std::ref(f32rng));
42*4bdc9457SAndroid Build Coastguard Worker output_.resize(n());
43*4bdc9457SAndroid Build Coastguard Worker std::fill(output_.begin(), output_.end(), 0xA5);
44*4bdc9457SAndroid Build Coastguard Worker }
45*4bdc9457SAndroid Build Coastguard Worker
TearDown(benchmark::State & state)46*4bdc9457SAndroid Build Coastguard Worker virtual void TearDown(benchmark::State& state) override
47*4bdc9457SAndroid Build Coastguard Worker {
48*4bdc9457SAndroid Build Coastguard Worker state.SetItemsProcessed(uint64_t(state.iterations()) * n());
49*4bdc9457SAndroid Build Coastguard Worker state.SetBytesProcessed(uint64_t(state.iterations()) * n() * 2 * sizeof(float));
50*4bdc9457SAndroid Build Coastguard Worker input_.clear();
51*4bdc9457SAndroid Build Coastguard Worker output_.clear();
52*4bdc9457SAndroid Build Coastguard Worker }
53*4bdc9457SAndroid Build Coastguard Worker
input() const54*4bdc9457SAndroid Build Coastguard Worker inline const float* input() const
55*4bdc9457SAndroid Build Coastguard Worker {
56*4bdc9457SAndroid Build Coastguard Worker return input_.data();
57*4bdc9457SAndroid Build Coastguard Worker }
58*4bdc9457SAndroid Build Coastguard Worker
output()59*4bdc9457SAndroid Build Coastguard Worker inline float* output()
60*4bdc9457SAndroid Build Coastguard Worker {
61*4bdc9457SAndroid Build Coastguard Worker return output_.data();
62*4bdc9457SAndroid Build Coastguard Worker }
63*4bdc9457SAndroid Build Coastguard Worker
n() const64*4bdc9457SAndroid Build Coastguard Worker inline size_t n() const
65*4bdc9457SAndroid Build Coastguard Worker {
66*4bdc9457SAndroid Build Coastguard Worker return n_;
67*4bdc9457SAndroid Build Coastguard Worker }
68*4bdc9457SAndroid Build Coastguard Worker
69*4bdc9457SAndroid Build Coastguard Worker protected:
70*4bdc9457SAndroid Build Coastguard Worker std::vector<float, AlignedAllocator<float, 64>> input_;
71*4bdc9457SAndroid Build Coastguard Worker std::vector<float, AlignedAllocator<float, 64>> output_;
72*4bdc9457SAndroid Build Coastguard Worker size_t n_;
73*4bdc9457SAndroid Build Coastguard Worker };
74*4bdc9457SAndroid Build Coastguard Worker
75*4bdc9457SAndroid Build Coastguard Worker class RoundingToNearestEven : public Rounding { };
76*4bdc9457SAndroid Build Coastguard Worker class RoundingDown : public Rounding { };
77*4bdc9457SAndroid Build Coastguard Worker class RoundingUp : public Rounding { };
78*4bdc9457SAndroid Build Coastguard Worker class RoundingTowardsZero : public Rounding { };
79*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingToNearestEven,scalar_addsub)80*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, scalar_addsub)(benchmark::State& state) {
81*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
82*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__scalar_addsub(
83*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
84*4bdc9457SAndroid Build Coastguard Worker }
85*4bdc9457SAndroid Build Coastguard Worker }
86*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingToNearestEven,scalar_nearbyint)87*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, scalar_nearbyint)(benchmark::State& state) {
88*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
89*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__scalar_nearbyint(
90*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
91*4bdc9457SAndroid Build Coastguard Worker }
92*4bdc9457SAndroid Build Coastguard Worker }
93*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingToNearestEven,scalar_rint)94*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, scalar_rint)(benchmark::State& state) {
95*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
96*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__scalar_rint(
97*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
98*4bdc9457SAndroid Build Coastguard Worker }
99*4bdc9457SAndroid Build Coastguard Worker }
100*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,scalar_addsub)101*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, scalar_addsub)(benchmark::State& state) {
102*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
103*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__scalar_addsub(
104*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
105*4bdc9457SAndroid Build Coastguard Worker }
106*4bdc9457SAndroid Build Coastguard Worker }
107*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,scalar_cvt)108*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, scalar_cvt)(benchmark::State& state) {
109*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
110*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__scalar_cvt(
111*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
112*4bdc9457SAndroid Build Coastguard Worker }
113*4bdc9457SAndroid Build Coastguard Worker }
114*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,scalar_floor)115*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, scalar_floor)(benchmark::State& state) {
116*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
117*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__scalar_floor(
118*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
119*4bdc9457SAndroid Build Coastguard Worker }
120*4bdc9457SAndroid Build Coastguard Worker }
121*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,scalar_addsub)122*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, scalar_addsub)(benchmark::State& state) {
123*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
124*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__scalar_addsub(
125*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
126*4bdc9457SAndroid Build Coastguard Worker }
127*4bdc9457SAndroid Build Coastguard Worker }
128*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,scalar_cvt)129*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, scalar_cvt)(benchmark::State& state) {
130*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
131*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__scalar_cvt(
132*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
133*4bdc9457SAndroid Build Coastguard Worker }
134*4bdc9457SAndroid Build Coastguard Worker }
135*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,scalar_ceil)136*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, scalar_ceil)(benchmark::State& state) {
137*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
138*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__scalar_ceil(
139*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
140*4bdc9457SAndroid Build Coastguard Worker }
141*4bdc9457SAndroid Build Coastguard Worker }
142*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,scalar_addsub)143*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, scalar_addsub)(benchmark::State& state) {
144*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
145*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__scalar_addsub(
146*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
147*4bdc9457SAndroid Build Coastguard Worker }
148*4bdc9457SAndroid Build Coastguard Worker }
149*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,scalar_cvt)150*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, scalar_cvt)(benchmark::State& state) {
151*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
152*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__scalar_cvt(
153*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
154*4bdc9457SAndroid Build Coastguard Worker }
155*4bdc9457SAndroid Build Coastguard Worker }
156*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,scalar_trunc)157*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, scalar_trunc)(benchmark::State& state) {
158*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
159*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__scalar_trunc(
160*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
161*4bdc9457SAndroid Build Coastguard Worker }
162*4bdc9457SAndroid Build Coastguard Worker }
163*4bdc9457SAndroid Build Coastguard Worker
164*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
BENCHMARK_F(RoundingToNearestEven,wasmsimd_addsub)165*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, wasmsimd_addsub)(benchmark::State& state) {
166*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
167*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__wasmsimd_addsub(
168*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
169*4bdc9457SAndroid Build Coastguard Worker }
170*4bdc9457SAndroid Build Coastguard Worker }
171*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingToNearestEven,wasmsimd_native)172*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, wasmsimd_native)(benchmark::State& state) {
173*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
174*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__wasmsimd_native(
175*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
176*4bdc9457SAndroid Build Coastguard Worker }
177*4bdc9457SAndroid Build Coastguard Worker }
178*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,wasmsimd_addsub)179*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, wasmsimd_addsub)(benchmark::State& state) {
180*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
181*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__wasmsimd_addsub(
182*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
183*4bdc9457SAndroid Build Coastguard Worker }
184*4bdc9457SAndroid Build Coastguard Worker }
185*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,wasmsimd_cvt)186*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, wasmsimd_cvt)(benchmark::State& state) {
187*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
188*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__wasmsimd_cvt(
189*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
190*4bdc9457SAndroid Build Coastguard Worker }
191*4bdc9457SAndroid Build Coastguard Worker }
192*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,wasmsimd_native)193*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, wasmsimd_native)(benchmark::State& state) {
194*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
195*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__wasmsimd_native(
196*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
197*4bdc9457SAndroid Build Coastguard Worker }
198*4bdc9457SAndroid Build Coastguard Worker }
199*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,wasmsimd_addsub)200*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, wasmsimd_addsub)(benchmark::State& state) {
201*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
202*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__wasmsimd_addsub(
203*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
204*4bdc9457SAndroid Build Coastguard Worker }
205*4bdc9457SAndroid Build Coastguard Worker }
206*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,wasmsimd_cvt)207*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, wasmsimd_cvt)(benchmark::State& state) {
208*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
209*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__wasmsimd_cvt(
210*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
211*4bdc9457SAndroid Build Coastguard Worker }
212*4bdc9457SAndroid Build Coastguard Worker }
213*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,wasmsimd_native)214*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, wasmsimd_native)(benchmark::State& state) {
215*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
216*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__wasmsimd_native(
217*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
218*4bdc9457SAndroid Build Coastguard Worker }
219*4bdc9457SAndroid Build Coastguard Worker }
220*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,wasmsimd_addsub)221*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, wasmsimd_addsub)(benchmark::State& state) {
222*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
223*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__wasmsimd_addsub(
224*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
225*4bdc9457SAndroid Build Coastguard Worker }
226*4bdc9457SAndroid Build Coastguard Worker }
227*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,wasmsimd_cvt)228*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, wasmsimd_cvt)(benchmark::State& state) {
229*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
230*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__wasmsimd_cvt(
231*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
232*4bdc9457SAndroid Build Coastguard Worker }
233*4bdc9457SAndroid Build Coastguard Worker }
234*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,wasmsimd_native)235*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, wasmsimd_native)(benchmark::State& state) {
236*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
237*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__wasmsimd_native(
238*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
239*4bdc9457SAndroid Build Coastguard Worker }
240*4bdc9457SAndroid Build Coastguard Worker }
241*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
242*4bdc9457SAndroid Build Coastguard Worker
243*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
BENCHMARK_F(RoundingToNearestEven,neon_addsub)244*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, neon_addsub)(benchmark::State& state) {
245*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
246*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__neon_addsub(
247*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
248*4bdc9457SAndroid Build Coastguard Worker }
249*4bdc9457SAndroid Build Coastguard Worker }
250*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingToNearestEven,neonv8)251*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, neonv8)(benchmark::State& state) {
252*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
253*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__neonv8(
254*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
255*4bdc9457SAndroid Build Coastguard Worker }
256*4bdc9457SAndroid Build Coastguard Worker }
257*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,neon_addsub)258*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, neon_addsub)(benchmark::State& state) {
259*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
260*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__neon_addsub(
261*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
262*4bdc9457SAndroid Build Coastguard Worker }
263*4bdc9457SAndroid Build Coastguard Worker }
264*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,neon_cvt)265*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, neon_cvt)(benchmark::State& state) {
266*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
267*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__neon_cvt(
268*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
269*4bdc9457SAndroid Build Coastguard Worker }
270*4bdc9457SAndroid Build Coastguard Worker }
271*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,neonv8)272*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, neonv8)(benchmark::State& state) {
273*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
274*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__neonv8(
275*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
276*4bdc9457SAndroid Build Coastguard Worker }
277*4bdc9457SAndroid Build Coastguard Worker }
278*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,neon_addsub)279*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, neon_addsub)(benchmark::State& state) {
280*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
281*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__neon_addsub(
282*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
283*4bdc9457SAndroid Build Coastguard Worker }
284*4bdc9457SAndroid Build Coastguard Worker }
285*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,neon_cvt)286*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, neon_cvt)(benchmark::State& state) {
287*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
288*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__neon_cvt(
289*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
290*4bdc9457SAndroid Build Coastguard Worker }
291*4bdc9457SAndroid Build Coastguard Worker }
292*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,neonv8)293*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, neonv8)(benchmark::State& state) {
294*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
295*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__neonv8(
296*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
297*4bdc9457SAndroid Build Coastguard Worker }
298*4bdc9457SAndroid Build Coastguard Worker }
299*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,neon_addsub)300*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, neon_addsub)(benchmark::State& state) {
301*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
302*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__neon_addsub(
303*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
304*4bdc9457SAndroid Build Coastguard Worker }
305*4bdc9457SAndroid Build Coastguard Worker }
306*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,neon_cvt)307*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, neon_cvt)(benchmark::State& state) {
308*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
309*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__neon_cvt(
310*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
311*4bdc9457SAndroid Build Coastguard Worker }
312*4bdc9457SAndroid Build Coastguard Worker }
313*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,neonv8)314*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, neonv8)(benchmark::State& state) {
315*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
316*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__neonv8(
317*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
318*4bdc9457SAndroid Build Coastguard Worker }
319*4bdc9457SAndroid Build Coastguard Worker }
320*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
321*4bdc9457SAndroid Build Coastguard Worker
322*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
BENCHMARK_F(RoundingToNearestEven,sse_addsub)323*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, sse_addsub)(benchmark::State& state) {
324*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
325*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__sse_addsub(
326*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
327*4bdc9457SAndroid Build Coastguard Worker }
328*4bdc9457SAndroid Build Coastguard Worker }
329*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingToNearestEven,sse2_cvt)330*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, sse2_cvt)(benchmark::State& state) {
331*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
332*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__sse2_cvt(
333*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
334*4bdc9457SAndroid Build Coastguard Worker }
335*4bdc9457SAndroid Build Coastguard Worker }
336*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingToNearestEven,sse4)337*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingToNearestEven, sse4)(benchmark::State& state) {
338*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
339*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundne__sse41(
340*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
341*4bdc9457SAndroid Build Coastguard Worker }
342*4bdc9457SAndroid Build Coastguard Worker }
343*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,sse_addsub)344*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, sse_addsub)(benchmark::State& state) {
345*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
346*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__sse_addsub(
347*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
348*4bdc9457SAndroid Build Coastguard Worker }
349*4bdc9457SAndroid Build Coastguard Worker }
350*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,sse2_cvt)351*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, sse2_cvt)(benchmark::State& state) {
352*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
353*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__sse2_cvt(
354*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
355*4bdc9457SAndroid Build Coastguard Worker }
356*4bdc9457SAndroid Build Coastguard Worker }
357*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingDown,sse4)358*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingDown, sse4)(benchmark::State& state) {
359*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
360*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundd__sse41(
361*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
362*4bdc9457SAndroid Build Coastguard Worker }
363*4bdc9457SAndroid Build Coastguard Worker }
364*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,sse_addsub)365*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, sse_addsub)(benchmark::State& state) {
366*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
367*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__sse_addsub(
368*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
369*4bdc9457SAndroid Build Coastguard Worker }
370*4bdc9457SAndroid Build Coastguard Worker }
371*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,sse2_cvt)372*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, sse2_cvt)(benchmark::State& state) {
373*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
374*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__sse2_cvt(
375*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
376*4bdc9457SAndroid Build Coastguard Worker }
377*4bdc9457SAndroid Build Coastguard Worker }
378*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingUp,sse4)379*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingUp, sse4)(benchmark::State& state) {
380*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
381*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundu__sse41(
382*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
383*4bdc9457SAndroid Build Coastguard Worker }
384*4bdc9457SAndroid Build Coastguard Worker }
385*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,sse_addsub)386*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, sse_addsub)(benchmark::State& state) {
387*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
388*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__sse_addsub(
389*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
390*4bdc9457SAndroid Build Coastguard Worker }
391*4bdc9457SAndroid Build Coastguard Worker }
392*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,sse2_cvt)393*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, sse2_cvt)(benchmark::State& state) {
394*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
395*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__sse2_cvt(
396*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
397*4bdc9457SAndroid Build Coastguard Worker }
398*4bdc9457SAndroid Build Coastguard Worker }
399*4bdc9457SAndroid Build Coastguard Worker
BENCHMARK_F(RoundingTowardsZero,sse4)400*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_F(RoundingTowardsZero, sse4)(benchmark::State& state) {
401*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
402*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_roundz__sse41(
403*4bdc9457SAndroid Build Coastguard Worker n() * sizeof(float), input(), output());
404*4bdc9457SAndroid Build Coastguard Worker }
405*4bdc9457SAndroid Build Coastguard Worker }
406*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
407*4bdc9457SAndroid Build Coastguard Worker
408*4bdc9457SAndroid Build Coastguard Worker
409*4bdc9457SAndroid Build Coastguard Worker #ifndef XNNPACK_BENCHMARK_NO_MAIN
410*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_MAIN();
411*4bdc9457SAndroid Build Coastguard Worker #endif
412