Vector Optimized Library of Kernels 2.5.1
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 ************************************************/
21 int size;
22 std::string str;
23};
24
26{
27public:
28 std::string name;
29 double time;
30 std::string units;
31 bool pass;
32};
33
35{
36public:
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{
48private:
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
57public:
58 // ctor
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
103{
104private:
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
111public:
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 (*t_kernel_ptr)(),
120 std::string name,
122 : _desc(desc),
123 _kernel_ptr(t_kernel_ptr),
124 _name(name),
125 _test_parameters(test_parameters),
126 _puppet_master_name("NULL"){};
127 // ctor for puppets
129 void (*t_kernel_ptr)(),
130 std::string name,
131 std::string puppet_master_name,
133 : _desc(desc),
134 _kernel_ptr(t_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
145float uniform(void);
146void 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))
181typedef void (*volk_fn_1arg)(void*,
182 unsigned int,
183 const char*); // one input, operate in place
184typedef void (*volk_fn_2arg)(void*, void*, unsigned int, const char*);
185typedef void (*volk_fn_3arg)(void*, void*, void*, unsigned int, const char*);
186typedef void (*volk_fn_4arg)(void*, void*, void*, void*, unsigned int, const char*);
187typedef void (*volk_fn_1arg_s32f)(
188 void*, float, unsigned int, const char*); // one input vector, one scalar float input
189typedef void (*volk_fn_2arg_s32f)(void*, void*, float, unsigned int, const char*);
190typedef void (*volk_fn_3arg_s32f)(void*, void*, void*, float, unsigned int, const char*);
191typedef void (*volk_fn_1arg_s32fc)(
192 void*,
193 lv_32fc_t,
194 unsigned int,
195 const char*); // one input vector, one scalar float input
196typedef void (*volk_fn_2arg_s32fc)(void*, void*, lv_32fc_t, unsigned int, const char*);
197typedef void (*volk_fn_3arg_s32fc)(
198 void*, void*, void*, lv_32fc_t, unsigned int, const char*);
199
200#endif // VOLK_QA_UTILS_H
Definition: qa_utils.h:103
volk_func_desc_t desc()
Definition: qa_utils.h:112
std::string puppet_master_name()
Definition: qa_utils.h:115
void(*)() kernel_ptr()
Definition: qa_utils.h:113
volk_test_params_t test_parameters()
Definition: qa_utils.h:116
volk_test_case_t(volk_func_desc_t desc, void(*t_kernel_ptr)(), std::string name, std::string puppet_master_name, volk_test_params_t test_parameters)
Definition: qa_utils.h:128
std::string name()
Definition: qa_utils.h:114
volk_test_case_t(volk_func_desc_t desc, void(*t_kernel_ptr)(), std::string name, volk_test_params_t test_parameters)
Definition: qa_utils.h:118
Definition: qa_utils.h:47
lv_32fc_t scalar()
Definition: qa_utils.h:81
unsigned int iter()
Definition: qa_utils.h:83
volk_test_params_t make_absolute(float tol)
Definition: qa_utils.h:87
volk_test_params_t make_tol(float tol)
Definition: qa_utils.h:94
unsigned int vlen()
Definition: qa_utils.h:82
void set_tol(float tol)
Definition: qa_utils.h:73
bool absolute_mode()
Definition: qa_utils.h:85
void set_iter(unsigned int iter)
Definition: qa_utils.h:76
void set_benchmark(bool benchmark)
Definition: qa_utils.h:77
void set_scalar(lv_32fc_t scalar)
Definition: qa_utils.h:74
void set_vlen(unsigned int vlen)
Definition: qa_utils.h:75
std::string kernel_regex()
Definition: qa_utils.h:86
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:59
void set_regex(std::string regex)
Definition: qa_utils.h:78
float tol()
Definition: qa_utils.h:80
bool benchmark_mode()
Definition: qa_utils.h:84
Definition: qa_utils.h:35
std::string name
Definition: qa_utils.h:37
std::string config_name
Definition: qa_utils.h:38
unsigned int iter
Definition: qa_utils.h:40
std::map< std::string, volk_test_time_t > results
Definition: qa_utils.h:41
std::string best_arch_a
Definition: qa_utils.h:42
std::string best_arch_u
Definition: qa_utils.h:43
unsigned int vlen
Definition: qa_utils.h:39
Definition: qa_utils.h:26
double time
Definition: qa_utils.h:29
std::string name
Definition: qa_utils.h:28
std::string units
Definition: qa_utils.h:30
bool pass
Definition: qa_utils.h:31
volk_type_t volk_type_from_string(std::string)
Definition: qa_utils.cc:114
void(* volk_fn_1arg)(void *, unsigned int, const char *)
Definition: qa_utils.h:181
void(* volk_fn_3arg)(void *, void *, void *, unsigned int, const char *)
Definition: qa_utils.h:185
void(* volk_fn_3arg_s32fc)(void *, void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:197
void(* volk_fn_2arg_s32f)(void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:189
float uniform(void)
void(* volk_fn_4arg)(void *, void *, void *, void *, unsigned int, const char *)
Definition: qa_utils.h:186
void(* volk_fn_2arg)(void *, void *, unsigned int, const char *)
Definition: qa_utils.h:184
void(* volk_fn_1arg_s32f)(void *, float, unsigned int, const char *)
Definition: qa_utils.h:187
void(* volk_fn_1arg_s32fc)(void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:191
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
void(* volk_fn_3arg_s32f)(void *, void *, void *, float, unsigned int, const char *)
Definition: qa_utils.h:190
void(* volk_fn_2arg_s32fc)(void *, void *, lv_32fc_t, unsigned int, const char *)
Definition: qa_utils.h:196
void random_floats(float *buf, unsigned n)
Definition: qa_utils.h:16
bool is_signed
Definition: qa_utils.h:19
bool is_complex
Definition: qa_utils.h:20
bool is_scalar
Definition: qa_utils.h:18
std::string str
Definition: qa_utils.h:22
bool is_float
Definition: qa_utils.h:17
int size
Definition: qa_utils.h:21
__VOLK_DECL_BEGIN struct volk_func_desc volk_func_desc_t
float complex lv_32fc_t
Definition: volk_complex.h:65