1 #include "benchmark_helpers.hpp"
2 #include "cache_aligned_array.hpp"
3 #include "../simd_ternary_arithmetic.hpp"
4 
5 using namespace nova;
6 using namespace std;
7 
8 aligned_array<float, 64> out, in1, in2, in3;
9 
bench_1(unsigned int n)10 void __noinline__ bench_1(unsigned int n)
11 {
12     ampmod_vec(out.begin(), wrap_argument(in1.begin()), wrap_argument(in2.begin()), wrap_argument(0.1f), n);
13 }
14 
bench_1_simd(unsigned int n)15 void __noinline__ bench_1_simd(unsigned int n)
16 {
17     ampmod_vec_simd(out.begin(), wrap_argument(in1.begin()), wrap_argument(in2.begin()), wrap_argument(0.1f), n);
18 }
19 
bench_2(unsigned int n)20 void __noinline__ bench_2(unsigned int n)
21 {
22     ampmod_vec(out.begin(), wrap_argument(in1.begin()), wrap_argument(in2.begin()), wrap_argument(in3.begin()), n);
23 }
24 
bench_2_simd(unsigned int n)25 void __noinline__ bench_2_simd(unsigned int n)
26 {
27     ampmod_vec_simd(out.begin(), wrap_argument(in1.begin()), wrap_argument(in2.begin()), wrap_argument(in3.begin()), n);
28 }
29 
bench_3(unsigned int n)30 void __noinline__ bench_3(unsigned int n)
31 {
32     ampmod_vec(out.begin(), wrap_argument(in1.begin()), wrap_argument(in2.begin()), wrap_argument(0.1f, 0.001f), n);
33 }
34 
bench_3_simd(unsigned int n)35 void __noinline__ bench_3_simd(unsigned int n)
36 {
37     ampmod_vec_simd(out.begin(), wrap_argument(in1.begin()), wrap_argument(in2.begin()), wrap_argument(0.1f, 0.001f), n);
38 }
39 
main(void)40 int main(void)
41 {
42     out.assign(0.f);
43     in1.assign(0.f);
44     in2.assign(0.f);
45     in3.assign(0.f);
46 
47     const unsigned int iterations = 50000000;
48 
49     cout << "simd:" << endl;
50     run_bench(boost::bind(bench_1_simd, 64), iterations);
51     run_bench(boost::bind(bench_2_simd, 64), iterations);
52     run_bench(boost::bind(bench_3_simd, 64), iterations);
53 
54     cout << "\nnormal:" << endl;
55     run_bench(boost::bind(bench_1, 64), iterations);
56     run_bench(boost::bind(bench_2, 64), iterations);
57     run_bench(boost::bind(bench_3, 64), iterations);
58 }
59