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 <memory>
11*4bdc9457SAndroid Build Coastguard Worker #include <numeric>
12*4bdc9457SAndroid Build Coastguard Worker #include <random>
13*4bdc9457SAndroid Build Coastguard Worker #include <vector>
14*4bdc9457SAndroid Build Coastguard Worker
15*4bdc9457SAndroid Build Coastguard Worker #include <cpuinfo.h>
16*4bdc9457SAndroid Build Coastguard Worker #include <pthreadpool.h>
17*4bdc9457SAndroid Build Coastguard Worker
18*4bdc9457SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
19*4bdc9457SAndroid Build Coastguard Worker #include <fp16/fp16.h>
20*4bdc9457SAndroid Build Coastguard Worker
21*4bdc9457SAndroid Build Coastguard Worker #include "bench/utils.h"
22*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/aligned-allocator.h>
23*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
24*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/math.h>
25*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/math-stubs.h>
26*4bdc9457SAndroid Build Coastguard Worker
27*4bdc9457SAndroid Build Coastguard Worker
28*4bdc9457SAndroid Build Coastguard Worker struct ComputeErrorContext {
29*4bdc9457SAndroid Build Coastguard Worker const float* input;
30*4bdc9457SAndroid Build Coastguard Worker const float* output;
31*4bdc9457SAndroid Build Coastguard Worker float* error;
32*4bdc9457SAndroid Build Coastguard Worker };
33*4bdc9457SAndroid Build Coastguard Worker
ComputeError(struct ComputeErrorContext * context,size_t start,size_t range)34*4bdc9457SAndroid Build Coastguard Worker static void ComputeError(
35*4bdc9457SAndroid Build Coastguard Worker struct ComputeErrorContext* context,
36*4bdc9457SAndroid Build Coastguard Worker size_t start,
37*4bdc9457SAndroid Build Coastguard Worker size_t range)
38*4bdc9457SAndroid Build Coastguard Worker {
39*4bdc9457SAndroid Build Coastguard Worker const float* input = context->input;
40*4bdc9457SAndroid Build Coastguard Worker const float* output = context->output;
41*4bdc9457SAndroid Build Coastguard Worker float* error = context->error;
42*4bdc9457SAndroid Build Coastguard Worker for (size_t i = start; i < start + range; i++) {
43*4bdc9457SAndroid Build Coastguard Worker const double input_val = input[i];
44*4bdc9457SAndroid Build Coastguard Worker double output_ref = 0.0;
45*4bdc9457SAndroid Build Coastguard Worker if (input_val < 0.0) {
46*4bdc9457SAndroid Build Coastguard Worker const double exp_val = std::exp(input_val);
47*4bdc9457SAndroid Build Coastguard Worker output_ref = exp_val / (1.0 + exp_val);
48*4bdc9457SAndroid Build Coastguard Worker } else {
49*4bdc9457SAndroid Build Coastguard Worker output_ref = 1.0 / (1.0 + std::exp(-input_val));
50*4bdc9457SAndroid Build Coastguard Worker }
51*4bdc9457SAndroid Build Coastguard Worker const double abs_error = std::abs(output_ref - double(output[i]));
52*4bdc9457SAndroid Build Coastguard Worker const float output_abs = std::abs(output_ref);
53*4bdc9457SAndroid Build Coastguard Worker const float output_ulp = uint32_as_float(float_as_uint32(output_abs) + 1) - output_abs;
54*4bdc9457SAndroid Build Coastguard Worker error[i] = float(abs_error / output_ulp);
55*4bdc9457SAndroid Build Coastguard Worker }
56*4bdc9457SAndroid Build Coastguard Worker }
57*4bdc9457SAndroid Build Coastguard Worker
SigmoidError(benchmark::State & state,xnn_f32_unary_math_function sigmoid,benchmark::utils::IsaCheckFunction isa_check=nullptr)58*4bdc9457SAndroid Build Coastguard Worker static void SigmoidError(benchmark::State& state,
59*4bdc9457SAndroid Build Coastguard Worker xnn_f32_unary_math_function sigmoid,
60*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::IsaCheckFunction isa_check = nullptr)
61*4bdc9457SAndroid Build Coastguard Worker {
62*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize()) {
63*4bdc9457SAndroid Build Coastguard Worker state.SkipWithError("failed cpuinfo init");
64*4bdc9457SAndroid Build Coastguard Worker return;
65*4bdc9457SAndroid Build Coastguard Worker }
66*4bdc9457SAndroid Build Coastguard Worker if (isa_check && !isa_check(state)) {
67*4bdc9457SAndroid Build Coastguard Worker return;
68*4bdc9457SAndroid Build Coastguard Worker }
69*4bdc9457SAndroid Build Coastguard Worker
70*4bdc9457SAndroid Build Coastguard Worker // The smallest x for which sigmoidf(x) is normalized (-0x1.5D589Ep+6f).
71*4bdc9457SAndroid Build Coastguard Worker const uint32_t min_input = 0xC2AEAC4F;
72*4bdc9457SAndroid Build Coastguard Worker // The largest x for which sigmoidf(x) is not 1.0f (0x1.154244p+4f).
73*4bdc9457SAndroid Build Coastguard Worker const uint32_t max_input = 0x418AA122;
74*4bdc9457SAndroid Build Coastguard Worker // Number of elements in one block of inputs/outputs.
75*4bdc9457SAndroid Build Coastguard Worker // Combining multiple elements in a block reduce function call overhead.
76*4bdc9457SAndroid Build Coastguard Worker const size_t block_size = 16384;
77*4bdc9457SAndroid Build Coastguard Worker // Number of elements in one parallelization tile. Worker threads process this many elements in each task.
78*4bdc9457SAndroid Build Coastguard Worker const size_t tile_size = 64;
79*4bdc9457SAndroid Build Coastguard Worker
80*4bdc9457SAndroid Build Coastguard Worker uint32_t num_threads = cpuinfo_get_cores_count();
81*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
82*4bdc9457SAndroid Build Coastguard Worker // Use all cores except for the least performant cluster
83*4bdc9457SAndroid Build Coastguard Worker if (cpuinfo_get_clusters_count() > 1) {
84*4bdc9457SAndroid Build Coastguard Worker num_threads -= cpuinfo_get_cluster(cpuinfo_get_clusters_count() - 1)->core_count;
85*4bdc9457SAndroid Build Coastguard Worker }
86*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
87*4bdc9457SAndroid Build Coastguard Worker
88*4bdc9457SAndroid Build Coastguard Worker std::unique_ptr<pthreadpool, decltype(&pthreadpool_destroy)> threadpool(
89*4bdc9457SAndroid Build Coastguard Worker pthreadpool_create(num_threads), pthreadpool_destroy);
90*4bdc9457SAndroid Build Coastguard Worker
91*4bdc9457SAndroid Build Coastguard Worker std::vector<float, AlignedAllocator<float, 64>> x(block_size);
92*4bdc9457SAndroid Build Coastguard Worker std::vector<float, AlignedAllocator<float, 64>> y(block_size);
93*4bdc9457SAndroid Build Coastguard Worker std::vector<float> ulp_error(block_size);
94*4bdc9457SAndroid Build Coastguard Worker float max_ulp_error = 0.0f;
95*4bdc9457SAndroid Build Coastguard Worker
96*4bdc9457SAndroid Build Coastguard Worker ComputeErrorContext context;
97*4bdc9457SAndroid Build Coastguard Worker context.input = x.data();
98*4bdc9457SAndroid Build Coastguard Worker context.output = y.data();
99*4bdc9457SAndroid Build Coastguard Worker context.error = ulp_error.data();
100*4bdc9457SAndroid Build Coastguard Worker for (auto _ : state) {
101*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = min_input; int32_t(n) < 0; n -= block_size) {
102*4bdc9457SAndroid Build Coastguard Worker for (uint32_t i = 0; i < block_size; i++) {
103*4bdc9457SAndroid Build Coastguard Worker x[i] = uint32_as_float(std::max<uint32_t>(n - i, 0x80000000));
104*4bdc9457SAndroid Build Coastguard Worker }
105*4bdc9457SAndroid Build Coastguard Worker std::fill(y.begin(), y.end(), std::nanf(""));
106*4bdc9457SAndroid Build Coastguard Worker
107*4bdc9457SAndroid Build Coastguard Worker sigmoid(block_size * sizeof(float), x.data(), y.data());
108*4bdc9457SAndroid Build Coastguard Worker
109*4bdc9457SAndroid Build Coastguard Worker pthreadpool_parallelize_1d_tile_1d(
110*4bdc9457SAndroid Build Coastguard Worker threadpool.get(),
111*4bdc9457SAndroid Build Coastguard Worker reinterpret_cast<pthreadpool_task_1d_tile_1d_t>(ComputeError),
112*4bdc9457SAndroid Build Coastguard Worker static_cast<void*>(&context),
113*4bdc9457SAndroid Build Coastguard Worker block_size, tile_size, 0 /* flags */);
114*4bdc9457SAndroid Build Coastguard Worker
115*4bdc9457SAndroid Build Coastguard Worker max_ulp_error = std::accumulate(ulp_error.cbegin(), ulp_error.cend(), max_ulp_error,
116*4bdc9457SAndroid Build Coastguard Worker static_cast<const float& (*)(const float&, const float&)>(std::max<float>));
117*4bdc9457SAndroid Build Coastguard Worker }
118*4bdc9457SAndroid Build Coastguard Worker for (uint32_t n = 0; n < max_input; n += block_size) {
119*4bdc9457SAndroid Build Coastguard Worker for (uint32_t i = 0; i < block_size; i++) {
120*4bdc9457SAndroid Build Coastguard Worker x[i] = uint32_as_float(std::min<uint32_t>(n + i, max_input));
121*4bdc9457SAndroid Build Coastguard Worker }
122*4bdc9457SAndroid Build Coastguard Worker std::fill(y.begin(), y.end(), std::nanf(""));
123*4bdc9457SAndroid Build Coastguard Worker
124*4bdc9457SAndroid Build Coastguard Worker sigmoid(block_size * sizeof(float), x.data(), y.data());
125*4bdc9457SAndroid Build Coastguard Worker
126*4bdc9457SAndroid Build Coastguard Worker pthreadpool_parallelize_1d_tile_1d(
127*4bdc9457SAndroid Build Coastguard Worker threadpool.get(),
128*4bdc9457SAndroid Build Coastguard Worker reinterpret_cast<pthreadpool_task_1d_tile_1d_t>(ComputeError),
129*4bdc9457SAndroid Build Coastguard Worker static_cast<void*>(&context),
130*4bdc9457SAndroid Build Coastguard Worker block_size, tile_size, 0 /* flags */);
131*4bdc9457SAndroid Build Coastguard Worker
132*4bdc9457SAndroid Build Coastguard Worker max_ulp_error = std::accumulate(ulp_error.cbegin(), ulp_error.cend(), max_ulp_error,
133*4bdc9457SAndroid Build Coastguard Worker static_cast<const float& (*)(const float&, const float&)>(std::max<float>));
134*4bdc9457SAndroid Build Coastguard Worker }
135*4bdc9457SAndroid Build Coastguard Worker }
136*4bdc9457SAndroid Build Coastguard Worker
137*4bdc9457SAndroid Build Coastguard Worker state.counters["ULPERROR"] = benchmark::Counter(max_ulp_error);
138*4bdc9457SAndroid Build Coastguard Worker }
139*4bdc9457SAndroid Build Coastguard Worker
140*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
141*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut64_p2_nr2recps,
142*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut64_p2_nr2recps,
143*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
144*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
145*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
146*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut64_p2_nr1recps1fma,
147*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut64_p2_nr1recps1fma,
148*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
149*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
150*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
151*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut64_p2_nr2fma,
152*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut64_p2_nr2fma,
153*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
154*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
155*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
156*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut64_p2_nr2recps,
157*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut64_p2_nr2recps,
158*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
159*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
160*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
161*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut64_p2_nr1recps1fma,
162*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut64_p2_nr1recps1fma,
163*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
164*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
165*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
166*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut64_p2_nr2fma,
167*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut64_p2_nr2fma,
168*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
169*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
170*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
171*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut2048_p1_nr2recps,
172*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut2048_p1_nr2recps,
173*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
174*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
175*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
176*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut2048_p1_nr1recps1fma,
177*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut2048_p1_nr1recps1fma,
178*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
179*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
180*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
181*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut2048_p1_nr2fma,
182*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut2048_p1_nr2fma,
183*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
184*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
185*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
186*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut2048_p1_nr2recps,
187*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut2048_p1_nr2recps,
188*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
189*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
190*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
191*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut2048_p1_nr1recps1fma,
192*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut2048_p1_nr1recps1fma,
193*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
194*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
195*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
196*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut2048_p1_nr2fma,
197*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut2048_p1_nr2fma,
198*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
199*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
200*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
201*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_p5_nr2recps,
202*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_p5_nr2recps,
203*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
204*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
205*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
206*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_p5_nr1recps1fma,
207*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_p5_nr1recps1fma,
208*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
209*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
210*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
211*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_p5_nr2fma,
212*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_p5_nr2fma,
213*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
214*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
215*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
216*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_p5_nr2recps,
217*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_p5_nr2recps,
218*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
219*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
220*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
221*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_p5_nr1recps1fma,
222*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_p5_nr1recps1fma,
223*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
224*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
225*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
226*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_p5_nr2fma,
227*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_p5_nr2fma,
228*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEONFMA)
229*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
230*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
231*4bdc9457SAndroid Build Coastguard Worker
232*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neon_rr2_lut64_p2_nr2recps,
233*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neon_rr2_lut64_p2_nr2recps,
234*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON)
235*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
236*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
237*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neon_rr2_lut2048_p1_nr2recps,
238*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neon_rr2_lut2048_p1_nr2recps,
239*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON)
240*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
241*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
242*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neon_rr2_p5_nr2recps,
243*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neon_rr2_p5_nr2recps,
244*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckNEON)
245*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
246*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
247*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
248*4bdc9457SAndroid Build Coastguard Worker
249*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM64
250*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut2048_p1_div,
251*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut2048_p1_div)
252*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
253*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
254*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut2048_p1_div,
255*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut2048_p1_div)
256*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
257*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
258*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_lut64_p2_div,
259*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_lut64_p2_div)
260*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
261*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
262*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_lut64_p2_div,
263*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_lut64_p2_div)
264*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
265*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
266*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr1_p5_div,
267*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr1_p5_div)
268*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
269*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
270*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, neonfma_rr2_p5_div,
271*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__neonfma_rr2_p5_div)
272*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
273*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
274*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM64
275*4bdc9457SAndroid Build Coastguard Worker
276*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
277*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut16_p3_perm_scalef_nr1fma,
278*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut16_p3_perm_scalef_nr1fma,
279*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
280*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
281*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
282*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut16_p3_perm_scalef_nr1fma1adj,
283*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut16_p3_perm_scalef_nr1fma1adj,
284*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
285*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
286*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
287*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut16_p3_perm_scalef_div,
288*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut16_p3_perm_scalef_div,
289*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
290*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
291*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
292*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut16_p3_perm_scalef_nr1fma,
293*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut16_p3_perm_scalef_nr1fma,
294*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
295*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
296*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
297*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut16_p3_perm_scalef_nr1fma1adj,
298*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut16_p3_perm_scalef_nr1fma1adj,
299*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
300*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
301*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
302*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut16_p3_perm_scalef_div,
303*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut16_p3_perm_scalef_div,
304*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
305*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
306*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
307*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut32_p2_perm2_scalef_nr1fma,
308*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut32_p2_perm2_scalef_nr1fma,
309*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
310*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
311*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
312*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut32_p2_perm2_scalef_nr1fma1adj,
313*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut32_p2_perm2_scalef_nr1fma1adj,
314*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
315*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
316*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
317*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut32_p2_perm2_scalef_div,
318*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut32_p2_perm2_scalef_div,
319*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
320*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
321*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
322*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut32_p2_perm2_scalef_nr1fma,
323*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut32_p2_perm2_scalef_nr1fma,
324*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
325*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
326*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
327*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut32_p2_perm2_scalef_nr1fma1adj,
328*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut32_p2_perm2_scalef_nr1fma1adj,
329*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
330*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
331*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
332*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut32_p2_perm2_scalef_div,
333*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut32_p2_perm2_scalef_div,
334*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
335*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
336*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
337*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut64_p2_gather_scalef_nr1fma,
338*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut64_p2_gather_scalef_nr1fma,
339*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
340*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
341*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
342*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut64_p2_gather_scalef_nr1fma1adj,
343*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut64_p2_gather_scalef_nr1fma1adj,
344*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
345*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
346*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
347*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_lut64_p2_gather_scalef_div,
348*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_lut64_p2_gather_scalef_div,
349*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
350*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
351*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
352*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut64_p2_gather_scalef_nr1fma,
353*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut64_p2_gather_scalef_nr1fma,
354*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
355*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
356*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
357*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut64_p2_gather_scalef_nr1fma1adj,
358*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut64_p2_gather_scalef_nr1fma1adj,
359*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
360*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
361*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
362*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_lut64_p2_gather_scalef_div,
363*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_lut64_p2_gather_scalef_div,
364*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
365*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
366*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
367*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_p5_scalef_nr1fma,
368*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_p5_scalef_nr1fma,
369*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
370*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
371*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
372*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_p5_scalef_nr1fma1adj,
373*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_p5_scalef_nr1fma1adj,
374*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
375*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
376*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
377*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr1_p5_scalef_div,
378*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr1_p5_scalef_div,
379*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
380*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
381*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
382*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_p5_scalef_nr1fma,
383*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_p5_scalef_nr1fma,
384*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
385*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
386*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
387*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_p5_scalef_nr1fma1adj,
388*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_p5_scalef_nr1fma1adj,
389*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
390*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
391*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
392*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx512f_rr2_p5_scalef_div,
393*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx512f_rr2_p5_scalef_div,
394*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX512F)
395*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
396*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
397*4bdc9457SAndroid Build Coastguard Worker
398*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr1_lut64_p2_gather_nr1fma,
399*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr1_lut64_p2_gather_nr1fma,
400*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
401*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
402*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
403*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr1_lut64_p2_gather_nr2fma,
404*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr1_lut64_p2_gather_nr2fma,
405*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
406*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
407*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
408*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr1_lut64_p2_gather_nr2fma1adj,
409*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr1_lut64_p2_gather_nr2fma1adj,
410*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
411*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
412*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
413*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr1_lut64_p2_gather_div,
414*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr1_lut64_p2_gather_div,
415*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
416*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
417*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
418*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr2_lut64_p2_gather_nr1fma,
419*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr2_lut64_p2_gather_nr1fma,
420*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
421*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
422*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
423*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr2_lut64_p2_gather_nr2fma,
424*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr2_lut64_p2_gather_nr2fma,
425*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
426*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
427*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
428*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr2_lut64_p2_gather_nr2fma1adj,
429*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr2_lut64_p2_gather_nr2fma1adj,
430*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
431*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
432*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
433*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr2_lut64_p2_gather_div,
434*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr2_lut64_p2_gather_div,
435*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
436*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
437*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
438*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr1_p5_nr1fma,
439*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr1_p5_nr1fma,
440*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
441*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
442*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
443*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr1_p5_nr2fma,
444*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr1_p5_nr2fma,
445*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
446*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
447*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
448*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr1_p5_div,
449*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr1_p5_div,
450*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
451*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
452*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
453*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr2_p5_nr1fma,
454*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr2_p5_nr1fma,
455*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
456*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
457*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
458*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr2_p5_nr2fma,
459*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr2_p5_nr2fma,
460*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
461*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
462*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
463*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx2_rr2_p5_div,
464*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx2_rr2_p5_div,
465*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX2)
466*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
467*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
468*4bdc9457SAndroid Build Coastguard Worker
469*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx_rr2_lut64_p2_div,
470*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx_rr2_lut64_p2_div,
471*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX)
472*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
473*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
474*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx_rr2_p5_nr1,
475*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx_rr2_p5_nr1,
476*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX)
477*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
478*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
479*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx_rr2_p5_nr2,
480*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx_rr2_p5_nr2,
481*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX)
482*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
483*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
484*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, avx_rr2_p5_div,
485*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__avx_rr2_p5_div,
486*4bdc9457SAndroid Build Coastguard Worker benchmark::utils::CheckAVX)
487*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
488*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
489*4bdc9457SAndroid Build Coastguard Worker
490*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, sse2_rr2_lut64_p2_nr1,
491*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__sse2_rr2_lut64_p2_nr1)
492*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
493*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
494*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, sse2_rr2_lut64_p2_nr2,
495*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__sse2_rr2_lut64_p2_nr2)
496*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
497*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
498*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, sse2_rr2_lut64_p2_div,
499*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__sse2_rr2_lut64_p2_div)
500*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
501*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
502*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, sse2_rr2_p5_nr1,
503*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__sse2_rr2_p5_nr1)
504*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
505*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
506*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, sse2_rr2_p5_nr2,
507*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__sse2_rr2_p5_nr2)
508*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
509*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
510*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, sse2_rr2_p5_div,
511*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__sse2_rr2_p5_div)
512*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
513*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
514*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
515*4bdc9457SAndroid Build Coastguard Worker
516*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
517*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, wasmsimd_rr2_lut64_p2_div,
518*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__wasmsimd_rr2_lut64_p2_div)
519*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
520*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
521*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, wasmsimd_rr2_p5_div,
522*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__wasmsimd_rr2_p5_div)
523*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
524*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
525*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
526*4bdc9457SAndroid Build Coastguard Worker
527*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, scalar_rr2_lut64_p2_div,
528*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__scalar_rr2_lut64_p2_div)
529*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
530*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
531*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, scalar_rr2_lut2048_p1_div,
532*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__scalar_rr2_lut2048_p1_div)
533*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
534*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
535*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(SigmoidError, scalar_rr2_p5_div,
536*4bdc9457SAndroid Build Coastguard Worker xnn_math_f32_sigmoid__scalar_rr2_p5_div)
537*4bdc9457SAndroid Build Coastguard Worker ->Unit(benchmark::kMillisecond)
538*4bdc9457SAndroid Build Coastguard Worker ->Iterations(1);
539*4bdc9457SAndroid Build Coastguard Worker
540*4bdc9457SAndroid Build Coastguard Worker #ifndef XNNPACK_BENCHMARK_NO_MAIN
541*4bdc9457SAndroid Build Coastguard Worker BENCHMARK_MAIN();
542*4bdc9457SAndroid Build Coastguard Worker #endif
543