]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/math/reporting/performance/constants_performance.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / math / reporting / performance / constants_performance.cpp
CommitLineData
20effc67
TL
1// (C) Copyright Nick Thompson 2020.
2// Use, modification and distribution are subject to the
3// Boost Software License, Version 1.0. (See accompanying file
4// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#include <benchmark/benchmark.h>
7#include <boost/math/constants/constants.hpp>
8#include <boost/multiprecision/mpfr.hpp>
9
10using namespace boost::math::constants;
11using boost::multiprecision::mpfr_float;
12
13void LaplaceLimit(benchmark::State& state)
14{
15 mpfr_float::default_precision(state.range(0));
16 for (auto _ : state)
17 {
18 benchmark::DoNotOptimize(laplace_limit<mpfr_float>());
19 }
20 state.SetComplexityN(state.range(0));
21}
22
23BENCHMARK(LaplaceLimit)->RangeMultiplier(2)->Range(128, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
24
25void Dottie(benchmark::State& state)
26{
27 mpfr_float::default_precision(state.range(0));
28 for (auto _ : state)
29 {
30 benchmark::DoNotOptimize(dottie<mpfr_float>());
31 }
32 state.SetComplexityN(state.range(0));
33}
34
35BENCHMARK(Dottie)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
36
37void ReciprocalFibonacci(benchmark::State& state)
38{
39 mpfr_float::default_precision(state.range(0));
40 for (auto _ : state)
41 {
42 benchmark::DoNotOptimize(reciprocal_fibonacci<mpfr_float>());
43 }
44 state.SetComplexityN(state.range(0));
45}
46
47BENCHMARK(ReciprocalFibonacci)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
48
49
50void Pi(benchmark::State& state)
51{
52 mpfr_float::default_precision(state.range(0));
53 for (auto _ : state)
54 {
55 benchmark::DoNotOptimize(pi<mpfr_float>());
56 }
57 state.SetComplexityN(state.range(0));
58}
59
60BENCHMARK(Pi)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
61
62void Gauss(benchmark::State& state)
63{
64 mpfr_float::default_precision(state.range(0));
65 for (auto _ : state)
66 {
67 benchmark::DoNotOptimize(gauss<mpfr_float>());
68 }
69 state.SetComplexityN(state.range(0));
70}
71
72BENCHMARK(Gauss)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
73
74void Exp1(benchmark::State& state)
75{
76 mpfr_float::default_precision(state.range(0));
77 for (auto _ : state)
78 {
79 benchmark::DoNotOptimize(e<mpfr_float>());
80 }
81 state.SetComplexityN(state.range(0));
82}
83
84BENCHMARK(Exp1)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
85
86void Catalan(benchmark::State& state)
87{
88 mpfr_float::default_precision(state.range(0));
89 for (auto _ : state)
90 {
91 benchmark::DoNotOptimize(catalan<mpfr_float>());
92 }
93 state.SetComplexityN(state.range(0));
94}
95
96BENCHMARK(Catalan)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
97
98void Plastic(benchmark::State& state)
99{
100 mpfr_float::default_precision(state.range(0));
101 for (auto _ : state)
102 {
103 benchmark::DoNotOptimize(plastic<mpfr_float>());
104 }
105 state.SetComplexityN(state.range(0));
106}
107
108BENCHMARK(Plastic)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
109
110void RootTwo(benchmark::State& state)
111{
112 mpfr_float::default_precision(state.range(0));
113 for (auto _ : state)
114 {
115 benchmark::DoNotOptimize(root_two<mpfr_float>());
116 }
117 state.SetComplexityN(state.range(0));
118}
119
120BENCHMARK(RootTwo)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
121
122void ZetaThree(benchmark::State& state)
123{
124 mpfr_float::default_precision(state.range(0));
125 for (auto _ : state)
126 {
127 benchmark::DoNotOptimize(zeta_three<mpfr_float>());
128 }
129 state.SetComplexityN(state.range(0));
130}
131
132BENCHMARK(ZetaThree)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
133
134
135void Euler(benchmark::State& state)
136{
137 mpfr_float::default_precision(state.range(0));
138 for (auto _ : state)
139 {
140 benchmark::DoNotOptimize(euler<mpfr_float>());
141 }
142 state.SetComplexityN(state.range(0));
143}
144
145BENCHMARK(Euler)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
146
147
148void LnTwo(benchmark::State& state)
149{
150 mpfr_float::default_precision(state.range(0));
151 for (auto _ : state)
152 {
153 benchmark::DoNotOptimize(ln_two<mpfr_float>());
154 }
155 state.SetComplexityN(state.range(0));
156}
157
158BENCHMARK(LnTwo)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond);
159
160void Glaisher(benchmark::State& state)
161{
162 mpfr_float::default_precision(state.range(0));
163 for (auto _ : state)
164 {
165 benchmark::DoNotOptimize(glaisher<mpfr_float>());
166 }
167 state.SetComplexityN(state.range(0));
168}
169
170BENCHMARK(Glaisher)->RangeMultiplier(2)->Range(512, 4096)->Complexity()->Unit(benchmark::kMicrosecond);
171
172
173void Khinchin(benchmark::State& state)
174{
175 mpfr_float::default_precision(state.range(0));
176 for (auto _ : state)
177 {
178 benchmark::DoNotOptimize(khinchin<mpfr_float>());
179 }
180 state.SetComplexityN(state.range(0));
181}
182
183// There is a performance bug in the Khinchin constant:
184BENCHMARK(Khinchin)->RangeMultiplier(2)->Range(512, 512)->Complexity()->Unit(benchmark::kMicrosecond);
185
186BENCHMARK_MAIN();