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 
26  public:
27  std::string name;
28  double time;
29  std::string units;
30  bool pass;
31 };
32 
34  public:
35  std::string name;
36  std::string config_name;
37  unsigned int vlen;
38  unsigned int iter;
39  std::map<std::string, volk_test_time_t> results;
40  std::string best_arch_a;
41  std::string best_arch_u;
42 };
43 
45  private:
46  float _tol;
47  lv_32fc_t _scalar;
48  unsigned int _vlen;
49  unsigned int _iter;
50  bool _benchmark_mode;
51  bool _absolute_mode;
52  std::string _kernel_regex;
53  public:
54  // ctor
55  volk_test_params_t(float tol, lv_32fc_t scalar, unsigned int vlen, unsigned int iter,
56  bool benchmark_mode, std::string kernel_regex) :
57  _tol(tol), _scalar(scalar), _vlen(vlen), _iter(iter),
58  _benchmark_mode(benchmark_mode), _absolute_mode(false), _kernel_regex(kernel_regex) {};
59  // setters
60  void set_tol(float tol) {_tol=tol;};
61  void set_scalar(lv_32fc_t scalar) {_scalar=scalar;};
62  void set_vlen(unsigned int vlen) {_vlen=vlen;};
63  void set_iter(unsigned int iter) {_iter=iter;};
64  void set_benchmark(bool benchmark) {_benchmark_mode=benchmark;};
65  void set_regex(std::string regex) {_kernel_regex=regex;};
66  // getters
67  float tol() {return _tol;};
68  lv_32fc_t scalar() {return _scalar;};
69  unsigned int vlen() {return _vlen;};
70  unsigned int iter() {return _iter;};
71  bool benchmark_mode() {return _benchmark_mode;};
72  bool absolute_mode() {return _absolute_mode;};
73  std::string kernel_regex() {return _kernel_regex;};
75  volk_test_params_t t(*this);
76  t._tol = tol;
77  t._absolute_mode = true;
78  return t;
79  }
81  volk_test_params_t t(*this);
82  t._tol = tol;
83  return t;
84  }
85 };
86 
88  private:
89  volk_func_desc_t _desc;
90  void(*_kernel_ptr)();
91  std::string _name;
92  volk_test_params_t _test_parameters;
93  std::string _puppet_master_name;
94  public:
95  volk_func_desc_t desc() {return _desc;};
96  void (*kernel_ptr()) () {return _kernel_ptr;};
97  std::string name() {return _name;};
98  std::string puppet_master_name() {return _puppet_master_name;};
99  volk_test_params_t test_parameters() {return _test_parameters;};
100  // normal ctor
103  _desc(desc), _kernel_ptr(kernel_ptr), _name(name), _test_parameters(test_parameters),
104  _puppet_master_name("NULL")
105  {};
106  // ctor for puppets
109  _desc(desc), _kernel_ptr(kernel_ptr), _name(name), _test_parameters(test_parameters),
110  _puppet_master_name(puppet_master_name)
111  {};
112 };
113 
114 /************************************************
115  * VOLK QA functions *
116  ************************************************/
118 
119 float uniform(void);
120 void random_floats(float *buf, unsigned n);
121 
122 bool run_volk_tests(
124  void(*)(),
125  std::string,
127  std::vector<volk_test_results_t> *results = NULL,
128  std::string puppet_master_name = "NULL"
129  );
130 
131 bool run_volk_tests(
133  void(*)(),
134  std::string,
135  float,
136  lv_32fc_t,
137  unsigned int,
138  unsigned int,
139  std::vector<volk_test_results_t> *results = NULL,
140  std::string puppet_master_name = "NULL",
141  bool absolute_mode = false,
142  bool benchmark_mode = false
143 );
144 
145 #define VOLK_PROFILE(func, test_params, results) run_volk_tests(func##_get_func_desc(), (void (*)())func##_manual, std::string(#func), test_params, results, "NULL")
146 #define VOLK_PUPPET_PROFILE(func, puppet_master_func, test_params, results) run_volk_tests(func##_get_func_desc(), (void (*)())func##_manual, std::string(#func), test_params, results, std::string(#puppet_master_func))
147 typedef void (*volk_fn_1arg)(void *, unsigned int, const char*); //one input, operate in place
148 typedef void (*volk_fn_2arg)(void *, void *, unsigned int, const char*);
149 typedef void (*volk_fn_3arg)(void *, void *, void *, unsigned int, const char*);
150 typedef void (*volk_fn_4arg)(void *, void *, void *, void *, unsigned int, const char*);
151 typedef void (*volk_fn_1arg_s32f)(void *, float, unsigned int, const char*); //one input vector, one scalar float input
152 typedef void (*volk_fn_2arg_s32f)(void *, void *, float, unsigned int, const char*);
153 typedef void (*volk_fn_3arg_s32f)(void *, void *, void *, float, unsigned int, const char*);
154 typedef void (*volk_fn_1arg_s32fc)(void *, lv_32fc_t, unsigned int, const char*); //one input vector, one scalar float input
155 typedef void (*volk_fn_2arg_s32fc)(void *, void *, lv_32fc_t, unsigned int, const char*);
156 typedef void (*volk_fn_3arg_s32fc)(void *, void *, void *, lv_32fc_t, unsigned int, const char*);
157 
158 #endif //VOLK_QA_UTILS_H
volk_test_params_t::set_regex
void set_regex(std::string regex)
Definition: qa_utils.h:65
volk_test_time_t
Definition: qa_utils.h:25
volk_fn_2arg
void(* volk_fn_2arg)(void *, void *, unsigned int, const char *)
Definition: qa_utils.h:148
volk_test_results_t::results
std::map< std::string, volk_test_time_t > results
Definition: qa_utils.h:39
volk_test_results_t
Definition: qa_utils.h:33
volk_test_case_t::desc
volk_func_desc_t desc()
Definition: qa_utils.h:95
volk_test_params_t::vlen
unsigned int vlen()
Definition: qa_utils.h:69
volk_test_params_t
Definition: qa_utils.h:44
volk_test_time_t::pass
bool pass
Definition: qa_utils.h:30
volk_type_t::str
std::string str
Definition: qa_utils.h:24
volk_type_t::size
int size
Definition: qa_utils.h:23
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:80
volk_type_t::is_scalar
bool is_scalar
Definition: qa_utils.h:20
volk_test_results_t::config_name
std::string config_name
Definition: qa_utils.h:36
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:74
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:380
volk_test_case_t
Definition: qa_utils.h:87
volk_test_params_t::set_scalar
void set_scalar(lv_32fc_t scalar)
Definition: qa_utils.h:61
volk_fn_2arg_s32fc
void(* volk_fn_2arg_s32fc)(void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:155
volk_test_case_t::kernel_ptr
void(*)() kernel_ptr()
Definition: qa_utils.h:96
volk_test_case_t::puppet_master_name
std::string puppet_master_name()
Definition: qa_utils.h:98
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:150
volk_test_case_t::volk_test_case_t
volk_test_case_t(volk_func_desc_t desc, void(*kernel_ptr)(), std::string name, std::string puppet_master_name, volk_test_params_t test_parameters)
Definition: qa_utils.h:107
volk_test_params_t::set_tol
void set_tol(float tol)
Definition: qa_utils.h:60
volk_test_results_t::vlen
unsigned int vlen
Definition: qa_utils.h:37
volk_test_results_t::best_arch_u
std::string best_arch_u
Definition: qa_utils.h:41
volk_type_t::is_complex
bool is_complex
Definition: qa_utils.h:22
uniform
float uniform(void)
volk_test_params_t::absolute_mode
bool absolute_mode()
Definition: qa_utils.h:72
volk_fn_3arg_s32f
void(* volk_fn_3arg_s32f)(void *, void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:153
volk_test_results_t::name
std::string name
Definition: qa_utils.h:35
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:101
random_floats
void random_floats(float *buf, unsigned n)
volk_test_params_t::iter
unsigned int iter()
Definition: qa_utils.h:70
volk_type_t
Definition: qa_utils.h:16
volk_type_from_string
volk_type_t volk_type_from_string(std::string)
Definition: qa_utils.cc:99
volk_test_params_t::tol
float tol()
Definition: qa_utils.h:67
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:55
volk_test_params_t::benchmark_mode
bool benchmark_mode()
Definition: qa_utils.h:71
volk_fn_3arg
void(* volk_fn_3arg)(void *, void *, void *, unsigned int, const char *)
Definition: qa_utils.h:149
volk_fn_2arg_s32f
void(* volk_fn_2arg_s32f)(void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:152
volk_type_t::is_signed
bool is_signed
Definition: qa_utils.h:21
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:99
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:61
volk_complex.h
volk_test_params_t::kernel_regex
std::string kernel_regex()
Definition: qa_utils.h:73
volk_test_params_t::set_benchmark
void set_benchmark(bool benchmark)
Definition: qa_utils.h:64
volk_test_case_t::name
std::string name()
Definition: qa_utils.h:97
volk_fn_1arg
void(* volk_fn_1arg)(void *, unsigned int, const char *)
Definition: qa_utils.h:147
volk_test_params_t::set_iter
void set_iter(unsigned int iter)
Definition: qa_utils.h:63
volk_fn_1arg_s32fc
void(* volk_fn_1arg_s32fc)(void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:154
volk_test_results_t::iter
unsigned int iter
Definition: qa_utils.h:38
volk_type_t::is_float
bool is_float
Definition: qa_utils.h:19
volk_test_params_t::set_vlen
void set_vlen(unsigned int vlen)
Definition: qa_utils.h:62
volk_fn_3arg_s32fc
void(* volk_fn_3arg_s32fc)(void *, void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:156
volk_fn_1arg_s32f
void(* volk_fn_1arg_s32f)(void *, float, unsigned int, const char *)
Definition: qa_utils.h:151
volk_test_params_t::scalar
lv_32fc_t scalar()
Definition: qa_utils.h:68
volk_test_results_t::best_arch_a
std::string best_arch_a
Definition: qa_utils.h:40