36 #include <boost/chrono.hpp> 37 #include <boost/regex.hpp> 47 typedef boost::chrono::high_resolution_clock
clock;
61 clock::duration elapsed = clock::now() -
m_start;
62 return static_cast<int>(boost::chrono::duration_cast<boost::chrono::milliseconds>(elapsed).
count());
91 static_assert(0 < T::loop_count,
"T::loop_count must be greater than 0");
101 std::cout <<
"Warm up: " << timer.
elapsed_ms() <<
" ms" << std::endl;
124 static_assert(0 < T::loop_count,
"T::loop_count must be greater than 0");
138 return m_stats->is_same_distribution_99(npoints, mean, stddev);
147 const size_t warm_up_rounds = 1000 * 1000 * 1000;
149 for (
size_t i = 0;
i < warm_up_rounds; ++
i)
161 std::unique_ptr<Stats<tools::PerformanceTimer, uint64_t>>
m_stats;
164 template <
typename T>
168 if (!filter.empty() && !boost::regex_match(
std::string(test_name),
match, boost::regex(filter)))
176 std::cout << test_name <<
" - OK:\n";
177 std::cout <<
" loop count: " << T::loop_count * params.
loop_multiplier <<
'\n';
178 std::cout <<
" elapsed: " << runner.
elapsed_time() <<
" ms\n";
181 std::cout <<
" min: " << runner.
get_min() <<
" ns\n";
182 std::cout <<
" max: " << runner.
get_max() <<
" ns\n";
183 std::cout <<
" median: " << runner.
get_median() <<
" ns\n";
184 std::cout <<
" std dev: " << runner.
get_stddev() <<
" ns\n";
189 std::cout << test_name <<
" (" << T::loop_count * params.
loop_multiplier <<
" calls) - OK:";
191 const char *
unit =
"ms";
192 double scale = 1000000;
194 if (time_per_call < 100) {
211 std::vector<TimingsDatabase::instance> prev_instances = params.
td.
get(test_name);
212 params.
td.
add(test_name, {
time(NULL), runner.
get_size(),
min, max, mean, med, stddev, npskew, quantiles});
214 std::cout << (params.
verbose ?
" time per call: " :
" ") << time_per_call <<
" " <<
unit <<
"/call" << (params.
verbose ?
"\n" :
"");
219 uint64_t p95s = quantiles[9] / scale;
222 if (!prev_instances.empty())
227 double pc = fabs(100. * (prev_instance.
mean - runner.
get_mean()) / prev_instance.
mean);
228 cmp =
", " +
std::to_string(pc) +
"% " + (mean > prev_instance.
mean ?
"slower" :
"faster");
232 std::cout <<
" (min " << mins <<
" " <<
unit <<
", 90th " << p95s <<
" " <<
unit <<
", median " << meds <<
" " <<
unit <<
", std dev " << stddevs <<
" " <<
unit <<
")" << cmp;
234 std::cout << std::endl;
238 std::cout << test_name <<
" - FAILED" << std::endl;
242 #define QUOTEME(x) #x 243 #define TEST_PERFORMANCE0(filter, params, test_class) run_test< test_class >(filter, params, QUOTEME(test_class)) 244 #define TEST_PERFORMANCE1(filter, params, test_class, a0) run_test< test_class<a0> >(filter, params, QUOTEME(test_class<a0>)) 245 #define TEST_PERFORMANCE2(filter, params, test_class, a0, a1) run_test< test_class<a0, a1> >(filter, params, QUOTEME(test_class) "<" QUOTEME(a0) ", " QUOTEME(a1) ">") 246 #define TEST_PERFORMANCE3(filter, params, test_class, a0, a1, a2) run_test< test_class<a0, a1, a2> >(filter, params, QUOTEME(test_class) "<" QUOTEME(a0) ", " QUOTEME(a1) ", " QUOTEME(a2) ">") 247 #define TEST_PERFORMANCE4(filter, params, test_class, a0, a1, a2, a3) run_test< test_class<a0, a1, a2, a3> >(filter, params, QUOTEME(test_class) "<" QUOTEME(a0) ", " QUOTEME(a1) ", " QUOTEME(a2) ", " QUOTEME(a3) ">") 248 #define TEST_PERFORMANCE5(filter, params, test_class, a0, a1, a2, a3, a4) run_test< test_class<a0, a1, a2, a3, a4> >(filter, params, QUOTEME(test_class) "<" QUOTEME(a0) ", " QUOTEME(a1) ", " QUOTEME(a2) ", " QUOTEME(a3) ", " QUOTEME(a4) ">") 249 #define TEST_PERFORMANCE6(filter, params, test_class, a0, a1, a2, a3, a4, a5) run_test< test_class<a0, a1, a2, a3, a4, a5> >(filter, params, QUOTEME(test_class) "<" QUOTEME(a0) ", " QUOTEME(a1) ", " QUOTEME(a2) ", " QUOTEME(a3) ", " QUOTEME(a4) ", " QUOTEME(a5) ">")
double stddev
Definition: timings.h:15
bool run()
Definition: performance_tests.h:89
const uint32_t T[512]
Definition: groestl_tables.h:36
double get_non_parametric_skew() const
Definition: performance_tests.h:133
void add(const char *name, const instance &data)
Definition: timings.cc:122
uint64_t get_max() const
Definition: performance_tests.h:129
int * count
Definition: gmock_stress_test.cc:176
int i
Definition: pymoduletest.py:23
::std::string string
Definition: gtest-port.h:1097
size_t get_size() const
Definition: performance_tests.h:120
double mean
Definition: timings.h:15
bool verbose
Definition: performance_tests.h:73
volatile uint64_t m_warm_up
! This field is intended for preclude compiler optimizations
Definition: performance_tests.h:157
test_runner(const Params ¶ms)
Definition: performance_tests.h:82
TimingsDatabase td
Definition: performance_tests.h:72
int time_per_call(int scale=1) const
Definition: performance_tests.h:122
bool stats
Definition: performance_tests.h:74
Definition: performance_tests.h:70
match
Definition: check_missing_rpc_methods.py:38
unsigned loop_multiplier
Definition: performance_tests.h:75
std::vector< instance > get(const char *name) const
Definition: timings.cc:112
uint64_t get_min() const
Definition: performance_tests.h:128
uint64_t warm_up()
Definition: performance_tests.h:145
size_t npoints
Definition: timings.h:14
double get_mean() const
Definition: performance_tests.h:130
double get_stddev() const
Definition: performance_tests.h:132
Params m_params
Definition: performance_tests.h:159
std::vector< uint64_t > get_quantiles(size_t n) const
Definition: performance_tests.h:134
#define min(a, b)
Definition: oaes_lib.c:78
unsigned __int64 uint64_t
Definition: stdint.h:136
const base::type::char_t * unit
Definition: easylogging++.h:798
std::vector< tools::PerformanceTimer > m_per_call_timers
Definition: performance_tests.h:160
Definition: performance_tests.h:79
bool is_same_distribution(size_t npoints, double mean, double stddev) const
Definition: performance_tests.h:136
time
Definition: gen_wide_data.py:40
int m_elapsed
Definition: performance_tests.h:158
std::unique_ptr< Stats< tools::PerformanceTimer, uint64_t > > m_stats
Definition: performance_tests.h:161
std::string to_string(t_connection_type type)
Definition: connection_basic.cpp:70
int elapsed_time() const
Definition: performance_tests.h:119
uint64_t get_median() const
Definition: performance_tests.h:131
int test(const char *portListingXml, int portListingXmlLen, const struct port_mapping *ref, int count)
Definition: testportlistingparse.c:26