#include #include #include #include #include #include namespace { template struct TExamplesHolder { TExamplesHolder() : Examples(N) { TFastRng prng{42u * sizeof(T) * N}; for (auto& x : Examples) { x = prng(); } } TVector Examples; }; } #define DEFINE_BENCHMARK(type, count) \ Y_CPU_BENCHMARK(FastClp2_##type##_##count, iface) { \ const auto& examples = Default>().Examples; \ for (const auto i : xrange(iface.Iterations())) { \ Y_UNUSED(i); \ for (const auto e : examples) { \ Y_DO_NOT_OPTIMIZE_AWAY(FastClp2(e)); \ } \ } \ } DEFINE_BENCHMARK(ui8, 1) DEFINE_BENCHMARK(ui8, 10) DEFINE_BENCHMARK(ui8, 100) DEFINE_BENCHMARK(ui16, 1) DEFINE_BENCHMARK(ui16, 10) DEFINE_BENCHMARK(ui16, 100) DEFINE_BENCHMARK(ui32, 1) DEFINE_BENCHMARK(ui32, 10) DEFINE_BENCHMARK(ui32, 100) DEFINE_BENCHMARK(ui64, 1) DEFINE_BENCHMARK(ui64, 10) DEFINE_BENCHMARK(ui64, 100) #undef DEFINE_BENCHMARKS