From 09abf1b529b4226f585ecfbb20866715b901755b Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 1 Dec 2021 13:34:22 +0800 Subject: +fpm --- Client/ThirdParty/fpm/benchmarks/arithmetic.cpp | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Client/ThirdParty/fpm/benchmarks/arithmetic.cpp (limited to 'Client/ThirdParty/fpm/benchmarks/arithmetic.cpp') diff --git a/Client/ThirdParty/fpm/benchmarks/arithmetic.cpp b/Client/ThirdParty/fpm/benchmarks/arithmetic.cpp new file mode 100644 index 0000000..b2053cf --- /dev/null +++ b/Client/ThirdParty/fpm/benchmarks/arithmetic.cpp @@ -0,0 +1,58 @@ +#include +#include +#include + +#include + +#define BENCHMARK_TEMPLATE1_CAPTURE(func, test_case_name, a, ...) \ + BENCHMARK_PRIVATE_DECLARE(func) = \ + (::benchmark::internal::RegisterBenchmarkInternal( \ + new ::benchmark::internal::FunctionBenchmark( \ + #func "<" #a ">/" #test_case_name, \ + [](::benchmark::State& st) { func(st, __VA_ARGS__); }))) + +// Constants for our arithmetic operands. +// Stored as volatile to force the compiler to read them and +// not optimize the entire expression into a constant. +static volatile int16_t s_x = 1543; +static volatile int16_t s_y = 2552; + +template +static void arithmetic(benchmark::State& state, TValue (*func)(TValue, TValue)) +{ + for (auto _ : state) + { + TValue x{ static_cast(static_cast(s_x)) }, y{ static_cast(static_cast(s_y)) }; + benchmark::DoNotOptimize(func(x, y)); + } +} + +#define FUNC(TYPE, OP) \ + [](TYPE x, TYPE y) -> TYPE { return x OP y; } + +using CnlFixed16 = cnl::fixed_point; + +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, add, float, FUNC(float, +)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, sub, float, FUNC(float, -)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, mul, float, FUNC(float, *)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, div, float, FUNC(float, /)); + +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, add, double, FUNC(double, +)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, sub, double, FUNC(double, -)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, mul, double, FUNC(double, *)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, div, double, FUNC(double, /)); + +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, add, fpm::fixed_16_16, FUNC(fpm::fixed_16_16, +)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, sub, fpm::fixed_16_16, FUNC(fpm::fixed_16_16, -)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, mul, fpm::fixed_16_16, FUNC(fpm::fixed_16_16, *)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, div, fpm::fixed_16_16, FUNC(fpm::fixed_16_16, /)); + +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, add, Fix16, FUNC(Fix16, +)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, sub, Fix16, FUNC(Fix16, -)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, mul, Fix16, FUNC(Fix16, *)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, div, Fix16, FUNC(Fix16, /)); + +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, add, CnlFixed16, FUNC(CnlFixed16, +)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, sub, CnlFixed16, FUNC(CnlFixed16, -)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, mul, CnlFixed16, FUNC(CnlFixed16, *)); +BENCHMARK_TEMPLATE1_CAPTURE(arithmetic, div, CnlFixed16, FUNC(CnlFixed16, /)); -- cgit v1.1-26-g67d0