/* * Copyright 2019 Michael Tesch. All rights reserved. * * author(s): michael tesch (tesch1@gmail.com) * */ /*! \file bench_fmt.cpp * \brief benchmarking for formatting * * To disable freq scaling: * cpupower frequency-set --governor performance * to re-enable freq scaling: * cpupower frequency-set --governor ondemand */ #include #include #define CPPDUALS_LIBFMT #define CPPDUALS_LIBFMT_COMPLEX #include "duals/dual" template void B_fmt_1(benchmark::State& state) { T c(3.4); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{}", c)); } } template void B_ios_1(benchmark::State& state) { T c(3.4); for (auto _ : state) { std::string s; std::stringstream ss; ss << c; s = ss.str(); } } template void B_fmt(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{}", c)); } } template void B_fmt_g(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{:g}", c)); } } template void B_fmt_star_g(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{:*g}", c)); } } template void B_fmt_comma_g(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{:,g}", c)); } } template void B_ios(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; std::stringstream ss; ss << c; s = ss.str(); } } BENCHMARK_TEMPLATE(B_fmt_1, float); BENCHMARK_TEMPLATE(B_fmt_1, double); BENCHMARK_TEMPLATE(B_ios_1, float); BENCHMARK_TEMPLATE(B_ios_1, double); BENCHMARK_TEMPLATE(B_fmt_g, std::complex); BENCHMARK_TEMPLATE(B_fmt_star_g, std::complex); BENCHMARK_TEMPLATE(B_fmt_comma_g, std::complex); BENCHMARK_TEMPLATE(B_fmt, std::complex); BENCHMARK_TEMPLATE(B_fmt, std::complex); BENCHMARK_TEMPLATE(B_fmt, duals::dual); BENCHMARK_TEMPLATE(B_fmt, duals::dual); BENCHMARK_TEMPLATE(B_ios, std::complex); BENCHMARK_TEMPLATE(B_ios, std::complex); BENCHMARK_TEMPLATE(B_ios, duals::dual); BENCHMARK_TEMPLATE(B_ios, duals::dual); #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char** argv) { std::ios::sync_with_stdio(false); std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; ::benchmark::Initialize(&argc, argv); ::benchmark::RunSpecifiedBenchmarks(); }