5
5
// (See accompanying file LICENSE_1_0.txt
6
6
// or copy at http://www.boost.org/LICENSE_1_0.txt)
7
7
8
- #include " ../../include/boost/math/special_functions/prime_functions.hpp"
9
-
8
+ #include < boost/math/special_functions/prime_sieve.hpp>
10
9
#include < benchmark/benchmark.h>
11
10
12
11
template <class Z >
@@ -18,6 +17,19 @@ void prime_sieve(benchmark::State& state)
18
17
std::vector<Z> primes;
19
18
benchmark::DoNotOptimize (boost::math::prime_sieve (static_cast <Z>(2 ), upper, std::back_inserter (primes)));
20
19
}
20
+ state.SetComplexityN (state.range (0 ));
21
+ }
22
+
23
+ template <typename Z>
24
+ void prime_range (benchmark::State& state)
25
+ {
26
+ Z upper = static_cast <Z>(state.range (0 ));
27
+ for (auto _ : state)
28
+ {
29
+ std::vector<Z> primes;
30
+ benchmark::DoNotOptimize (boost::math::prime_range (static_cast <Z>(2 ), upper, std::back_inserter (primes)));
31
+ }
32
+ state.SetComplexityN (state.range (0 ));
21
33
}
22
34
23
35
template <class Z >
@@ -30,6 +42,7 @@ void prime_sieve_partial_range(benchmark::State& state)
30
42
std::vector<Z> primes;
31
43
benchmark::DoNotOptimize (boost::math::prime_sieve (lower, upper, std::back_inserter (primes)));
32
44
}
45
+ state.SetComplexityN (state.range (0 ));
33
46
}
34
47
35
48
BENCHMARK_TEMPLATE (prime_sieve, int32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 22 )->Complexity();
@@ -38,5 +51,16 @@ BENCHMARK_TEMPLATE(prime_sieve, uint32_t)->RangeMultiplier(2)->Range(1 << 1, 1 <
38
51
BENCHMARK_TEMPLATE (prime_sieve_partial_range, int32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 22 )->Complexity();
39
52
BENCHMARK_TEMPLATE (prime_sieve_partial_range, int64_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 22 )->Complexity();
40
53
BENCHMARK_TEMPLATE (prime_sieve_partial_range, uint32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 22 )->Complexity();
54
+ BENCHMARK_TEMPLATE (prime_range, int32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 22 )->Complexity();
55
+ BENCHMARK_TEMPLATE (prime_range, int64_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 22 )->Complexity();
56
+ BENCHMARK_TEMPLATE (prime_range, uint32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 22 )->Complexity();
57
+
58
+ // Direct comparison of lookup vs sieve using only range of lookup
59
+ BENCHMARK_TEMPLATE (prime_sieve, int32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 16 )->Complexity();
60
+ BENCHMARK_TEMPLATE (prime_range, int32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 16 )->Complexity();
61
+ BENCHMARK_TEMPLATE (prime_sieve, int64_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 16 )->Complexity();
62
+ BENCHMARK_TEMPLATE (prime_range, int64_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 16 )->Complexity();
63
+ BENCHMARK_TEMPLATE (prime_sieve, uint32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 16 )->Complexity();
64
+ BENCHMARK_TEMPLATE (prime_range, uint32_t )->RangeMultiplier(2 )->Range(1 << 1 , 1 << 16 )->Complexity();
41
65
42
66
BENCHMARK_MAIN ();
0 commit comments