Vector Optimized Library of Kernels  2.2
Architecture-tuned implementations of math kernels
qa_utils.h
Go to the documentation of this file.
1 #ifndef VOLK_QA_UTILS_H
2 #define VOLK_QA_UTILS_H
3 
4 #include <stdbool.h> // for bool, false
5 #include <volk/volk.h> // for volk_func_desc_t
6 #include <cstdlib> // for NULL
7 #include <map> // for map
8 #include <string> // for string, basic_string
9 #include <vector> // for vector
10 
11 #include "volk/volk_complex.h" // for lv_32fc_t
12 
13 /************************************************
14  * VOLK QA type definitions *
15  ************************************************/
16 struct volk_type_t {
17  bool is_float;
18  bool is_scalar;
19  bool is_signed;
20  bool is_complex;
21  int size;
22  std::string str;
23 };
24 
25 class volk_test_time_t
26 {
27 public:
28  std::string name;
29  double time;
30  std::string units;
31  bool pass;
32 };
33 
35 {
36 public:
37  std::string name;
38  std::string config_name;
39  unsigned int vlen;
40  unsigned int iter;
41  std::map<std::string, volk_test_time_t> results;
42  std::string best_arch_a;
43  std::string best_arch_u;
44 };
45 
47 {
48 private:
49  float _tol;
50  lv_32fc_t _scalar;
51  unsigned int _vlen;
52  unsigned int _iter;
53  bool _benchmark_mode;
54  bool _absolute_mode;
55  std::string _kernel_regex;
56 
57 public:
58  // ctor
59  volk_test_params_t(float tol,
61  unsigned int vlen,
62  unsigned int iter,
63  bool benchmark_mode,
64  std::string kernel_regex)
65  : _tol(tol),
66  _scalar(scalar),
67  _vlen(vlen),
68  _iter(iter),
69  _benchmark_mode(benchmark_mode),
70  _absolute_mode(false),
71  _kernel_regex(kernel_regex){};
72  // setters
73  void set_tol(float tol) { _tol = tol; };
74  void set_scalar(lv_32fc_t scalar) { _scalar = scalar; };
75  void set_vlen(unsigned int vlen) { _vlen = vlen; };
76  void set_iter(unsigned int iter) { _iter = iter; };
77  void set_benchmark(bool benchmark) { _benchmark_mode = benchmark; };
78  void set_regex(std::string regex) { _kernel_regex = regex; };
79  // getters
80  float tol() { return _tol; };
81  lv_32fc_t scalar() { return _scalar; };
82  unsigned int vlen() { return _vlen; };
83  unsigned int iter() { return _iter; };
84  bool benchmark_mode() { return _benchmark_mode; };
85  bool absolute_mode() { return _absolute_mode; };
86  std::string kernel_regex() { return _kernel_regex; };
88  {
89  volk_test_params_t t(*this);
90  t._tol = tol;
91  t._absolute_mode = true;
92  return t;
93  }
95  {
96  volk_test_params_t t(*this);
97  t._tol = tol;
98  return t;
99  }
100 };
101 
102 class volk_test_case_t
103 {
104 private:
105  volk_func_desc_t _desc;
106  void (*_kernel_ptr)();
107  std::string _name;
108  volk_test_params_t _test_parameters;
109  std::string _puppet_master_name;
110 
111 public:
112  volk_func_desc_t desc() { return _desc; };
113  void (*kernel_ptr())() { return _kernel_ptr; };
114  std::string name() { return _name; };
115  std::string puppet_master_name() { return _puppet_master_name; };
116  volk_test_params_t test_parameters() { return _test_parameters; };
117  // normal ctor
119  void (*kernel_ptr)(),
120  std::string name,
122  : _desc(desc),
123  _kernel_ptr(kernel_ptr),
124  _name(name),
125  _test_parameters(test_parameters),
126  _puppet_master_name("NULL"){};
127  // ctor for puppets
129  void (*kernel_ptr)(),
130  std::string name,
131  std::string puppet_master_name,
133  : _desc(desc),
134  _kernel_ptr(kernel_ptr),
135  _name(name),
136  _test_parameters(test_parameters),
137  _puppet_master_name(puppet_master_name){};
138 };
139 
140 /************************************************
141  * VOLK QA functions *
142  ************************************************/
144 
145 float uniform(void);
146 void random_floats(float* buf, unsigned n);
147 
149  void (*)(),
150  std::string,
152  std::vector<volk_test_results_t>* results = NULL,
153  std::string puppet_master_name = "NULL");
154 
156  void (*)(),
157  std::string,
158  float,
159  lv_32fc_t,
160  unsigned int,
161  unsigned int,
162  std::vector<volk_test_results_t>* results = NULL,
163  std::string puppet_master_name = "NULL",
164  bool absolute_mode = false,
165  bool benchmark_mode = false);
166 
167 #define VOLK_PROFILE(func, test_params, results) \
168  run_volk_tests(func##_get_func_desc(), \
169  (void (*)())func##_manual, \
170  std::string(#func), \
171  test_params, \
172  results, \
173  "NULL")
174 #define VOLK_PUPPET_PROFILE(func, puppet_master_func, test_params, results) \
175  run_volk_tests(func##_get_func_desc(), \
176  (void (*)())func##_manual, \
177  std::string(#func), \
178  test_params, \
179  results, \
180  std::string(#puppet_master_func))
181 typedef void (*volk_fn_1arg)(void*,
182  unsigned int,
183  const char*); // one input, operate in place
184 typedef void (*volk_fn_2arg)(void*, void*, unsigned int, const char*);
185 typedef void (*volk_fn_3arg)(void*, void*, void*, unsigned int, const char*);
186 typedef void (*volk_fn_4arg)(void*, void*, void*, void*, unsigned int, const char*);
188  void*, float, unsigned int, const char*); // one input vector, one scalar float input
189 typedef void (*volk_fn_2arg_s32f)(void*, void*, float, unsigned int, const char*);
190 typedef void (*volk_fn_3arg_s32f)(void*, void*, void*, float, unsigned int, const char*);
191 typedef void (*volk_fn_1arg_s32fc)(
192  void*,
193  lv_32fc_t,
194  unsigned int,
195  const char*); // one input vector, one scalar float input
196 typedef void (*volk_fn_2arg_s32fc)(void*, void*, lv_32fc_t, unsigned int, const char*);
197 typedef void (*volk_fn_3arg_s32fc)(
198  void*, void*, void*, lv_32fc_t, unsigned int, const char*);
199 
200 #endif // VOLK_QA_UTILS_H
volk_test_params_t::set_regex
void set_regex(std::string regex)
Definition: qa_utils.h:77
volk_test_time_t
Definition: qa_utils.h:24
volk_fn_2arg
void(* volk_fn_2arg)(void *, void *, unsigned int, const char *)
Definition: qa_utils.h:182
volk_test_results_t::results
std::map< std::string, volk_test_time_t > results
Definition: qa_utils.h:40
volk_test_results_t
Definition: qa_utils.h:33
volk_test_case_t::desc
volk_func_desc_t desc()
Definition: qa_utils.h:111
volk_test_params_t::vlen
unsigned int vlen()
Definition: qa_utils.h:81
volk_test_params_t
Definition: qa_utils.h:45
volk_test_time_t::pass
bool pass
Definition: qa_utils.h:30
volk_type_t::str
std::string str
Definition: qa_utils.h:22
volk_type_t::size
int size
Definition: qa_utils.h:21
volk_test_time_t::name
std::string name
Definition: qa_utils.h:27
volk_test_params_t::make_tol
volk_test_params_t make_tol(float tol)
Definition: qa_utils.h:93
volk_type_t::is_scalar
bool is_scalar
Definition: qa_utils.h:18
volk_test_results_t::config_name
std::string config_name
Definition: qa_utils.h:37
void
VOLK_API void
Call into a specific implementation given by name.
volk_test_params_t::make_absolute
volk_test_params_t make_absolute(float tol)
Definition: qa_utils.h:86
run_volk_tests
bool run_volk_tests(volk_func_desc_t, void(*)(), std::string, volk_test_params_t, std::vector< volk_test_results_t > *results=NULL, std::string puppet_master_name="NULL")
Definition: qa_utils.cc:491
volk_test_case_t
Definition: qa_utils.h:101
volk_test_params_t::set_scalar
void set_scalar(lv_32fc_t scalar)
Definition: qa_utils.h:73
volk_fn_2arg_s32fc
void(* volk_fn_2arg_s32fc)(void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:194
volk_test_case_t::kernel_ptr
void(*)() kernel_ptr()
Definition: qa_utils.h:112
volk_test_case_t::puppet_master_name
std::string puppet_master_name()
Definition: qa_utils.h:114
volk_test_time_t::time
double time
Definition: qa_utils.h:28
volk_fn_4arg
void(* volk_fn_4arg)(void *, void *, void *, void *, unsigned int, const char *)
Definition: qa_utils.h:184
volk_test_params_t::set_tol
void set_tol(float tol)
Definition: qa_utils.h:72
volk_test_results_t::vlen
unsigned int vlen
Definition: qa_utils.h:38
volk_test_results_t::best_arch_u
std::string best_arch_u
Definition: qa_utils.h:42
volk_type_t::is_complex
bool is_complex
Definition: qa_utils.h:20
uniform
float uniform(void)
volk_test_params_t::absolute_mode
bool absolute_mode()
Definition: qa_utils.h:84
volk_fn_3arg_s32f
void(* volk_fn_3arg_s32f)(void *, void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:188
volk_test_results_t::name
std::string name
Definition: qa_utils.h:36
volk_test_case_t::volk_test_case_t
volk_test_case_t(volk_func_desc_t desc, void(*kernel_ptr)(), std::string name, volk_test_params_t test_parameters)
Definition: qa_utils.h:117
random_floats
void random_floats(float *buf, unsigned n)
volk_test_params_t::iter
unsigned int iter()
Definition: qa_utils.h:82
volk_type_t
Definition: qa_utils.h:15
volk_type_from_string
volk_type_t volk_type_from_string(std::string)
Definition: qa_utils.cc:114
volk_test_params_t::tol
float tol()
Definition: qa_utils.h:79
volk_test_params_t::volk_test_params_t
volk_test_params_t(float tol, lv_32fc_t scalar, unsigned int vlen, unsigned int iter, bool benchmark_mode, std::string kernel_regex)
Definition: qa_utils.h:58
volk_test_params_t::benchmark_mode
bool benchmark_mode()
Definition: qa_utils.h:83
volk_fn_3arg
void(* volk_fn_3arg)(void *, void *, void *, unsigned int, const char *)
Definition: qa_utils.h:183
volk_fn_2arg_s32f
void(* volk_fn_2arg_s32f)(void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:187
volk_type_t::is_signed
bool is_signed
Definition: qa_utils.h:19
volk_test_time_t::units
std::string units
Definition: qa_utils.h:29
volk_test_case_t::test_parameters
volk_test_params_t test_parameters()
Definition: qa_utils.h:115
volk_func_desc_t
__VOLK_DECL_BEGIN struct volk_func_desc volk_func_desc_t
Get description parameters for this kernel.
Definition: volk.tmpl.h:91
lv_32fc_t
float complex lv_32fc_t
Definition: volk_complex.h:70
volk_complex.h
volk_test_params_t::kernel_regex
std::string kernel_regex()
Definition: qa_utils.h:85
volk_test_params_t::set_benchmark
void set_benchmark(bool benchmark)
Definition: qa_utils.h:76
volk_test_case_t::name
std::string name()
Definition: qa_utils.h:113
volk_fn_1arg
void(* volk_fn_1arg)(void *, unsigned int, const char *)
Definition: qa_utils.h:179
volk_test_params_t::set_iter
void set_iter(unsigned int iter)
Definition: qa_utils.h:75
volk_fn_1arg_s32fc
void(* volk_fn_1arg_s32fc)(void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:189
volk_test_results_t::iter
unsigned int iter
Definition: qa_utils.h:39
volk_type_t::is_float
bool is_float
Definition: qa_utils.h:17
volk_test_params_t::set_vlen
void set_vlen(unsigned int vlen)
Definition: qa_utils.h:74
volk_fn_3arg_s32fc
void(* volk_fn_3arg_s32fc)(void *, void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:195
volk_fn_1arg_s32f
void(* volk_fn_1arg_s32f)(void *, float, unsigned int, const char *)
Definition: qa_utils.h:185
volk_test_params_t::scalar
lv_32fc_t scalar()
Definition: qa_utils.h:80
volk_test_results_t::best_arch_a
std::string best_arch_a
Definition: qa_utils.h:41