PURIFY
Next-generation radio interferometric imaging
fft.cc
Go to the documentation of this file.
1 
2 #include <chrono>
3 #include <benchmark/benchmark.h>
4 #include "benchmarks/utilities.h"
5 #include "purify/operators.h"
6 
7 using namespace purify;
8 
9 // ----------------- Application benchmarks -----------------------//
10 
11 class FFTOperatorFixture : public ::benchmark::Fixture {
12  public:
13  void SetUp(const ::benchmark::State& state) {}
14 
15  void TearDown(const ::benchmark::State& state) {}
16 
17  // A bunch of useful variables
18  t_uint m_counter;
19 };
20 
21 BENCHMARK_DEFINE_F(FFTOperatorFixture, Apply)(benchmark::State& state) {
22  const t_uint m_imsizex = state.range(0);
23  const t_uint m_imsizey = state.range(0);
24  const t_uint N = m_imsizex * m_imsizey;
25  const auto fftop = purify::operators::init_FFT_2d<Vector<t_complex>>(m_imsizey, m_imsizex, 1.);
26  const auto& forward = std::get<0>(fftop);
27 
28  const Vector<t_complex> input = Vector<t_complex>::Random(N);
29  Vector<t_complex> output = Vector<t_complex>::Zero(N);
30  forward(output, input);
31  while (state.KeepRunning()) {
32  auto start = std::chrono::high_resolution_clock::now();
33  forward(output, input);
34  auto end = std::chrono::high_resolution_clock::now();
35  state.SetIterationTime(b_utilities::duration(start, end));
36  }
37 }
38 
39 BENCHMARK_REGISTER_F(FFTOperatorFixture, Apply)
40  //->Apply(b_utilities::Arguments)
41  ->RangeMultiplier(2)
42  ->Range(128, 128 << 6)
43  ->UseManualTime()
44  ->Repetitions(10)
45  ->ReportAggregatesOnly(true)
46  ->Unit(benchmark::kMillisecond);
47 
void SetUp(const ::benchmark::State &state)
Definition: fft.cc:13
t_uint m_counter
Definition: fft.cc:18
void TearDown(const ::benchmark::State &state)
Definition: fft.cc:15
BENCHMARK_MAIN()
BENCHMARK_DEFINE_F(FFTOperatorFixture, Apply)(benchmark
Definition: fft.cc:21
double duration(std::chrono::high_resolution_clock::time_point start, std::chrono::high_resolution_clock::time_point end)
Definition: utilities.cc:26