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