// (C) Copyright Nick Thompson 2020. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include #include using namespace boost::math::constants; using boost::multiprecision::mpfr_float; void LaplaceLimit(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(laplace_limit()); } state.SetComplexityN(state.range(0)); } BENCHMARK(LaplaceLimit)->RangeMultiplier(2)->Range(128, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Dottie(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(dottie()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Dottie)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void ReciprocalFibonacci(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(reciprocal_fibonacci()); } state.SetComplexityN(state.range(0)); } BENCHMARK(ReciprocalFibonacci)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Pi(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(pi()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Pi)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Gauss(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(gauss()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Gauss)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Exp1(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(e()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Exp1)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Catalan(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(catalan()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Catalan)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Plastic(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(plastic()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Plastic)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void RootTwo(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(root_two()); } state.SetComplexityN(state.range(0)); } BENCHMARK(RootTwo)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void ZetaThree(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(zeta_three()); } state.SetComplexityN(state.range(0)); } BENCHMARK(ZetaThree)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Euler(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(euler()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Euler)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void LnTwo(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(ln_two()); } state.SetComplexityN(state.range(0)); } BENCHMARK(LnTwo)->RangeMultiplier(2)->Range(512, 1<<20)->Complexity()->Unit(benchmark::kMicrosecond); void Glaisher(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(glaisher()); } state.SetComplexityN(state.range(0)); } BENCHMARK(Glaisher)->RangeMultiplier(2)->Range(512, 4096)->Complexity()->Unit(benchmark::kMicrosecond); void Khinchin(benchmark::State& state) { mpfr_float::default_precision(state.range(0)); for (auto _ : state) { benchmark::DoNotOptimize(khinchin()); } state.SetComplexityN(state.range(0)); } // There is a performance bug in the Khinchin constant: BENCHMARK(Khinchin)->RangeMultiplier(2)->Range(512, 512)->Complexity()->Unit(benchmark::kMicrosecond); BENCHMARK_MAIN();