SOPT
Sparse OPTimisation
Functions | Variables
wavelets.cc File Reference
#include <sstream>
#include <benchmark/benchmark.h>
#include "sopt/wavelets/wavelets.h"
+ Include dependency graph for wavelets.cc:

Go to the source code of this file.

Functions

unsigned get_size (unsigned requested, unsigned levels)
 
std::string get_name (unsigned db)
 
template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void direct_matrix (benchmark::State &state)
 
template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void indirect_matrix (benchmark::State &state)
 
template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void direct_vector (benchmark::State &state)
 
template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void indirect_vector (benchmark::State &state)
 
 BENCHMARK_TEMPLATE (direct_matrix, sopt::t_complex, 1, 1) -> RangePair(n, N, n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (direct_matrix, sopt::t_real, 1, 1) -> RangePair(n, N, n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (direct_matrix, sopt::t_complex, 10, 1) -> RangePair(n, N, n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (direct_vector, sopt::t_complex, 1, 1) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (direct_vector, sopt::t_complex, 10, 1) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (direct_vector, sopt::t_complex, 1, 2) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (direct_vector, sopt::t_real, 1, 1) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (indirect_matrix, sopt::t_complex, 1, 1) -> RangePair(n, N, n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (indirect_matrix, sopt::t_real, 1, 1) -> RangePair(n, N, n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (indirect_matrix, sopt::t_complex, 10, 1) -> RangePair(n, N, n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (indirect_vector, sopt::t_complex, 1, 1) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (indirect_vector, sopt::t_complex, 10, 1) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (indirect_vector, sopt::t_complex, 1, 2) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_TEMPLATE (indirect_vector, sopt::t_real, 1, 1) -> Range(n, N) ->UseRealTime()
 
 BENCHMARK_MAIN ()
 

Variables

constexpr auto n = 64
 
constexpr auto N = 256 * 3
 

Function Documentation

◆ BENCHMARK_MAIN()

BENCHMARK_MAIN ( )

◆ BENCHMARK_TEMPLATE() [1/14]

BENCHMARK_TEMPLATE ( direct_matrix  ,
sopt::t_complex  ,
,
 
) -> RangePair(n, N, n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [2/14]

BENCHMARK_TEMPLATE ( direct_matrix  ,
sopt::t_complex  ,
10  ,
 
) -> RangePair(n, N, n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [3/14]

BENCHMARK_TEMPLATE ( direct_matrix  ,
sopt::t_real  ,
,
 
) -> RangePair(n, N, n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [4/14]

BENCHMARK_TEMPLATE ( direct_vector  ,
sopt::t_complex  ,
,
 
) -> Range(n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [5/14]

BENCHMARK_TEMPLATE ( direct_vector  ,
sopt::t_complex  ,
,
 
) -> Range(n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [6/14]

BENCHMARK_TEMPLATE ( direct_vector  ,
sopt::t_complex  ,
10  ,
 
) -> Range(n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [7/14]

BENCHMARK_TEMPLATE ( direct_vector  ,
sopt::t_real  ,
,
 
) -> Range(n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [8/14]

BENCHMARK_TEMPLATE ( indirect_matrix  ,
sopt::t_complex  ,
,
 
) -> RangePair(n, N, n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [9/14]

BENCHMARK_TEMPLATE ( indirect_matrix  ,
sopt::t_complex  ,
10  ,
 
) -> RangePair(n, N, n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [10/14]

BENCHMARK_TEMPLATE ( indirect_matrix  ,
sopt::t_real  ,
,
 
) -> RangePair(n, N, n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [11/14]

BENCHMARK_TEMPLATE ( indirect_vector  ,
sopt::t_complex  ,
,
 
) -> Range(n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [12/14]

BENCHMARK_TEMPLATE ( indirect_vector  ,
sopt::t_complex  ,
,
 
) -> Range(n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [13/14]

BENCHMARK_TEMPLATE ( indirect_vector  ,
sopt::t_complex  ,
10  ,
 
) -> Range(n, N) ->UseRealTime()

◆ BENCHMARK_TEMPLATE() [14/14]

BENCHMARK_TEMPLATE ( indirect_vector  ,
sopt::t_real  ,
,
 
) -> Range(n, N) ->UseRealTime()

◆ direct_matrix()

template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void direct_matrix ( benchmark::State &  state)

Definition at line 16 of file wavelets.cc.

16  {
17  auto const Nx = get_size(state.range_x(), LEVEL);
18  auto const Ny = get_size(state.range_y(), LEVEL);
19  auto const input = sopt::Image<TYPE>::Random(Nx, Ny).eval();
20  auto output = sopt::Image<TYPE>::Zero(Nx, Ny).eval();
21  auto const wavelet = sopt::wavelets::factory(get_name(DB), LEVEL);
22  while (state.KeepRunning()) wavelet.direct(output, input);
23  state.SetBytesProcessed(int64_t(state.iterations()) * int64_t(Nx) * int64_t(Ny) * sizeof(TYPE));
24 }
unsigned get_size(unsigned requested, unsigned levels)
Definition: wavelets.cc:5
std::string get_name(unsigned db)
Definition: wavelets.cc:9
Wavelet factory(const std::string &name, t_uint nlevels)
Creates a wavelet transform object.
Definition: wavelets.cc:8
Eigen::Array< T, Eigen::Dynamic, Eigen::Dynamic > Image
A 2-dimensional list of elements of given type.
Definition: types.h:39

References sopt::wavelets::factory(), get_name(), and get_size().

◆ direct_vector()

template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void direct_vector ( benchmark::State &  state)

Definition at line 38 of file wavelets.cc.

38  {
39  auto const Nx = get_size(state.range_x(), LEVEL);
40  auto const input = sopt::Array<TYPE>::Random(Nx).eval();
41  auto output = sopt::Array<TYPE>::Zero(Nx).eval();
42  auto const wavelet = sopt::wavelets::factory(get_name(DB), LEVEL);
43  while (state.KeepRunning()) wavelet.direct(output, input);
44  state.SetBytesProcessed(int64_t(state.iterations()) * int64_t(Nx) * sizeof(TYPE));
45 }
Eigen::Array< T, Eigen::Dynamic, 1 > Array
A 1-dimensional list of elements of given type.
Definition: types.h:34

References sopt::wavelets::factory(), get_name(), and get_size().

◆ get_name()

std::string get_name ( unsigned  db)

Definition at line 9 of file wavelets.cc.

9  {
10  std::ostringstream sstr;
11  sstr << "DB" << db;
12  return sstr.str();
13 }

Referenced by direct_matrix(), direct_vector(), indirect_matrix(), and indirect_vector().

◆ get_size()

unsigned get_size ( unsigned  requested,
unsigned  levels 
)

Definition at line 5 of file wavelets.cc.

5  {
6  auto const N = (1u << levels);
7  return requested % N == 0 ? requested : requested + N - requested % N;
8 }
constexpr auto N
Definition: wavelets.cc:57

References N.

Referenced by direct_matrix(), direct_vector(), indirect_matrix(), and indirect_vector().

◆ indirect_matrix()

template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void indirect_matrix ( benchmark::State &  state)

Definition at line 27 of file wavelets.cc.

27  {
28  auto const Nx = get_size(state.range_x(), LEVEL);
29  auto const Ny = get_size(state.range_y(), LEVEL);
30  auto const input = sopt::Image<TYPE>::Random(Nx, Ny).eval();
31  auto output = sopt::Image<TYPE>::Zero(Nx, Ny).eval();
32  auto const wavelet = sopt::wavelets::factory(get_name(DB), LEVEL);
33  while (state.KeepRunning()) wavelet.indirect(input, output);
34  state.SetBytesProcessed(int64_t(state.iterations()) * int64_t(Nx) * int64_t(Ny) * sizeof(TYPE));
35 }

References sopt::wavelets::factory(), get_name(), and get_size().

◆ indirect_vector()

template<typename TYPE , unsigned DB = 1, unsigned LEVEL = 1>
void indirect_vector ( benchmark::State &  state)

Definition at line 47 of file wavelets.cc.

47  {
48  auto const Nx = get_size(state.range_x(), LEVEL);
49  auto const input = sopt::Array<TYPE>::Random(Nx).eval();
50  auto output = sopt::Array<TYPE>::Zero(Nx).eval();
51  auto const wavelet = sopt::wavelets::factory(get_name(DB), LEVEL);
52  while (state.KeepRunning()) wavelet.indirect(input, output);
53  state.SetBytesProcessed(int64_t(state.iterations()) * int64_t(Nx) * sizeof(TYPE));
54 }

References sopt::wavelets::factory(), get_name(), and get_size().

Variable Documentation

◆ n

constexpr auto n = 64
constexpr

◆ N

constexpr auto N = 256 * 3
constexpr