#include #include #include #include #include #define FFT ::yycc::carton::fft namespace yyccbench::carton::fft { using TIndex = size_t; using TFloat = float; using TComplex = std::complex; template using TFft = FFT::Fft; constexpr TIndex FFT_POINTS = 1024u; static void BM_FftCompute(benchmark::State& state) { // prepare random buffer constexpr TIndex RND_BUF_CNT = 8u; std::random_device rnd_device; std::default_random_engine rnd_engine(rnd_device()); std::uniform_real_distribution rnd_dist(0.0f, 1.0f); std::vector> buffer_collection(RND_BUF_CNT); for (auto& buf : buffer_collection) { buf.resize(FFT_POINTS); std::generate(buf.begin(), buf.end(), [&rnd_engine, &rnd_dist]() mutable -> TComplex { return TComplex(rnd_dist(rnd_engine)); }); } // prepare FFT engine TFft fft; // do benchmark for (auto _ : state) { fft.compute(buffer_collection[state.iterations() % RND_BUF_CNT].data()); } } BENCHMARK(BM_FftCompute)->Name("FftCompute"); }