11#ifndef INCLUDED_BENCHMARK_COMMON
12#define INCLUDED_BENCHMARK_COMMON
15#include <spdlog/tweakme.h>
18#include <spdlog/fmt/fmt.h>
27template <
typename functor>
28[[nodiscard]]
auto benchmark(functor test,
size_t block_size)
30 std::vector<float> outp(2 * block_size);
31 float* output = outp.data();
32 float *x = &output[0], *y = &output[block_size];
36 for (
auto& value : outp) {
37 value = rng() /
static_cast<double>(1ULL << 32) - (1ULL << 32);
40 auto before = std::chrono::high_resolution_clock::now();
45 auto after = std::chrono::high_resolution_clock::now();
48 std::chrono::duration_cast<std::chrono::duration<double, std::ratio<1, 1>>>(
52 volatile auto sum = std::accumulate(outp.cbegin(), outp.cend(), 0.0f);
53 if (sum == std::numeric_limits<
decltype(sum)>::min()) {
55 return decltype(dur){};
60template <
typename dur_t>
66 auto dur_s = std::chrono::duration_cast<std::chrono::duration<double>>(dur);
67 return fmt::format(FMT_STRING(
"{:<18} time: {:<8.4e} s throughput: {:>6.3e} it/s"),
70 static_cast<double>(iterations) / dur_s.count());
auto format_duration(std::string_view name, dur_t dur, size_t iterations, size_t block_size)
Definition: benchmark_common.h:61
auto benchmark(functor test, size_t block_size)
Definition: benchmark_common.h:28
wrapper for XOROSHIRO128+ PRNG for use in std::distributions Fulfills C++ named requirements for Unif...
Definition: random.h:29
fmt::format_context::iterator format(const gr::io_signature &iosig, format_context &ctx) const