Vector Optimized Library of Kernels  2.0
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
101  volk_test_case_t(volk_func_desc_t desc, void(*kernel_ptr)(), std::string name,
102  volk_test_params_t test_parameters) :
103  _desc(desc), _kernel_ptr(kernel_ptr), _name(name), _test_parameters(test_parameters),
104  _puppet_master_name("NULL")
105  {};
106  // ctor for puppets
107  volk_test_case_t(volk_func_desc_t desc, void(*kernel_ptr)(), std::string name,
108  std::string puppet_master_name, volk_test_params_t test_parameters) :
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 
146 #define VOLK_RUN_TESTS(func, tol, scalar, len, iter) \
147  BOOST_AUTO_TEST_CASE(func##_test) { \
148  BOOST_CHECK_EQUAL(run_volk_tests( \
149  func##_get_func_desc(), (void (*)())func##_manual, \
150  std::string(#func), tol, scalar, len, iter, 0, "NULL"), \
151  0); \
152  }
153 #define VOLK_PROFILE(func, test_params, results) run_volk_tests(func##_get_func_desc(), (void (*)())func##_manual, std::string(#func), test_params, results, "NULL")
154 #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))
155 typedef void (*volk_fn_1arg)(void *, unsigned int, const char*); //one input, operate in place
156 typedef void (*volk_fn_2arg)(void *, void *, unsigned int, const char*);
157 typedef void (*volk_fn_3arg)(void *, void *, void *, unsigned int, const char*);
158 typedef void (*volk_fn_4arg)(void *, void *, void *, void *, unsigned int, const char*);
159 typedef void (*volk_fn_1arg_s32f)(void *, float, unsigned int, const char*); //one input vector, one scalar float input
160 typedef void (*volk_fn_2arg_s32f)(void *, void *, float, unsigned int, const char*);
161 typedef void (*volk_fn_3arg_s32f)(void *, void *, void *, float, unsigned int, const char*);
162 typedef void (*volk_fn_1arg_s32fc)(void *, lv_32fc_t, unsigned int, const char*); //one input vector, one scalar float input
163 typedef void (*volk_fn_2arg_s32fc)(void *, void *, lv_32fc_t, unsigned int, const char*);
164 typedef void (*volk_fn_3arg_s32fc)(void *, void *, void *, lv_32fc_t, unsigned int, const char*);
165 
166 #endif //VOLK_QA_UTILS_H
bool pass
Definition: qa_utils.h:30
void set_iter(unsigned int iter)
Definition: qa_utils.h:63
bool is_scalar
Definition: qa_utils.h:18
bool is_complex
Definition: qa_utils.h:20
void set_tol(float tol)
Definition: qa_utils.h:60
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
std::string str
Definition: qa_utils.h:22
void(* volk_fn_4arg)(void *, void *, void *, void *, unsigned int, const char *)
Definition: qa_utils.h:158
VOLK_API void
Call into a specific implementation given by name.
unsigned int iter()
Definition: qa_utils.h:70
std::string name()
Definition: qa_utils.h:97
void(* volk_fn_2arg_s32fc)(void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:163
lv_32fc_t scalar()
Definition: qa_utils.h:68
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_func_desc_t desc()
Definition: qa_utils.h:95
void(* volk_fn_3arg_s32f)(void *, void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:161
std::string name
Definition: qa_utils.h:35
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
void set_regex(std::string regex)
Definition: qa_utils.h:65
bool absolute_mode()
Definition: qa_utils.h:72
float uniform(void)
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
void set_vlen(unsigned int vlen)
Definition: qa_utils.h:62
void set_benchmark(bool benchmark)
Definition: qa_utils.h:64
Definition: qa_utils.h:16
void(* volk_fn_2arg_s32f)(void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:160
void(* volk_fn_3arg)(void *, void *, void *, unsigned int, const char *)
Definition: qa_utils.h:157
name
Definition: volk_arch_defs.py:68
void random_floats(float *buf, unsigned n)
unsigned int vlen
Definition: qa_utils.h:37
std::string units
Definition: qa_utils.h:29
void(*)() kernel_ptr()
Definition: qa_utils.h:96
__VOLK_DECL_BEGIN struct volk_func_desc volk_func_desc_t
Get description parameters for this kernel.
Definition: volk.tmpl.h:90
unsigned int iter
Definition: qa_utils.h:38
volk_test_params_t make_absolute(float tol)
Definition: qa_utils.h:74
float tol()
Definition: qa_utils.h:67
volk_test_params_t test_parameters()
Definition: qa_utils.h:99
std::string config_name
Definition: qa_utils.h:36
bool is_float
Definition: qa_utils.h:17
void(* volk_fn_1arg_s32fc)(void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:162
std::string best_arch_u
Definition: qa_utils.h:41
std::string best_arch_a
Definition: qa_utils.h:40
volk_type_t volk_type_from_string(std::string)
Definition: qa_utils.cc:99
volk_test_params_t make_tol(float tol)
Definition: qa_utils.h:80
float complex lv_32fc_t
Definition: volk_complex.h:61
void(* volk_fn_1arg)(void *, unsigned int, const char *)
Definition: qa_utils.h:155
void set_scalar(lv_32fc_t scalar)
Definition: qa_utils.h:61
std::string kernel_regex()
Definition: qa_utils.h:73
void(* volk_fn_3arg_s32fc)(void *, void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:164
unsigned int vlen()
Definition: qa_utils.h:69
Definition: qa_utils.h:87
Definition: qa_utils.h:33
double time
Definition: qa_utils.h:28
bool benchmark_mode()
Definition: qa_utils.h:71
int size
Definition: qa_utils.h:21
std::string name
Definition: qa_utils.h:27
void(* volk_fn_2arg)(void *, void *, unsigned int, const char *)
Definition: qa_utils.h:156
std::string puppet_master_name()
Definition: qa_utils.h:98
Definition: qa_utils.h:25
Definition: qa_utils.h:44
void(* volk_fn_1arg_s32f)(void *, float, unsigned int, const char *)
Definition: qa_utils.h:159
std::map< std::string, volk_test_time_t > results
Definition: qa_utils.h:39
bool is_signed
Definition: qa_utils.h:19