-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbench.hpp
More file actions
55 lines (50 loc) · 1.15 KB
/
bench.hpp
File metadata and controls
55 lines (50 loc) · 1.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef _BENCH_HPP_
#define _BENCH_HPP_
#include<numeric>
#include<vector>
namespace benchmark {
template<typename T>
struct stats_t
{
T total;
T mean;
T min;
T max;
T stddev;
};
template<typename T>
inline stats_t<T> calculateStatistics(std::vector<T>& dataset)
{
stats_t<T> s;
std::sort(dataset.begin(), dataset.end());
s.total = std::accumulate(dataset.begin(), dataset.end(),T(0));
s.mean = s.total / static_cast<T>(dataset.size());
s.min = dataset.front();
s.max = dataset.back();
T var = T(0);
for(T& x : dataset)
var += x*x;
var /= static_cast<T>(dataset.size());
var -= (s.mean*s.mean);
s.stddev = std::sqrt(var);
return s;
}
template<typename T,typename U>
bool validate(T* a, T* b, U N) {
T atol = 1.0e-9;
T rtol = 1.0e-12;
for(U i{};i<N;++i) {
if((std::abs(a[i]-b[i])>atol)&&(std::abs((a[i]-b[i])/b[i])>rtol))
{
std::cout<<" Validation check failed!"
<<"\n\texpected: "<<a[i]
<<"\n\tactual : "<<b[i]
<<"\n\tdiffer : "<<a[i]-b[i]
<<std::endl;
std::terminate();
}
}
return true;
}
}
#endif