@@ -19,75 +19,71 @@ int main()
1919 TestRecorder tr (cout);
2020 cout.precision (4 );
2121
22- auto bench =
23- [&tr](char const * tag, int m, int n, int reps, auto && f)
24- {
25- ra::Big<real, 2 > a ({m, n}, ra::_0 - ra::_1);
26- ra::Big<real, 1 > ref ({n}, 0 );
27- iter<1 >(ref) += iter<1 >(a)*reps;
28- ra::Big<real, 1 > c ({n}, ra::none);
22+ auto bench = [&tr](char const * tag, int m, int n, int reps, auto && f){
23+ ra::Big<real, 2 > a ({m, n}, ra::_0 - ra::_1);
24+ ra::Big<real, 1 > ref ({n}, 0 );
25+ ra::iter<1 >(ref) += ra::iter<1 >(a)*reps;
26+ ra::Big<real, 1 > c ({n}, ra::none);
2927
30- auto bv = Benchmark ().repeats (reps).runs (3 )
31- .once_f ([&](auto && repeat) { c=0 .; repeat ([&]() { f (c, a); }); });
32- tr.info (Benchmark::report (bv, m*n), " " , tag)
33- .test_eq (ref, c);
34- };
28+ auto bv = Benchmark ().repeats (reps).runs (3 )
29+ .once_f ([&](auto && repeat) { c=0 .; repeat ([&]() { f (c, a); }); });
30+ tr.info (Benchmark::report (bv, m*n), " " , tag)
31+ .test_eq (ref, c);
32+ };
3533
36- auto bench_all =
37- [&](int m, int n, int reps)
38- {
39- tr.section (m, " x " , n, " times " , reps);
40- bench (" raw" , m, n, reps,
41- [](auto & c, auto const & a)
42- {
43- real const * __restrict__ ap = a.data ();
44- real * __restrict__ cp = c.data ();
45- ra::dim_t const m = a.len (0 );
46- ra::dim_t const n = a.len (1 );
47- for (ra::dim_t i=0 ; i!=m; ++i) {
48- for (ra::dim_t j=0 ; j!=n; ++j) {
49- cp[j] += ap[i*n+j];
50- }
34+ auto bench_all = [&](int m, int n, int reps){
35+ tr.section (m, " x " , n, " times " , reps);
36+ bench (" raw" , m, n, reps,
37+ [](auto & c, auto const & a)
38+ {
39+ real const * __restrict__ ap = a.data ();
40+ real * __restrict__ cp = c.data ();
41+ ra::dim_t const m = a.len (0 );
42+ ra::dim_t const n = a.len (1 );
43+ for (ra::dim_t i=0 ; i!=m; ++i) {
44+ for (ra::dim_t j=0 ; j!=n; ++j) {
45+ cp[j] += ap[i*n+j];
5146 }
52- });
53- bench (" sideways" , m, n, reps,
54- [](auto & c, auto const & a)
55- {
56- for (int j=0 , jend=a.len (1 ); j<jend; ++j) {
57- c (j) += sum (a (ra::all, j));
58- }
59- });
60- bench (" accumrows" , m, n, reps,
61- [](auto & c, auto const & a)
62- {
63- for_each ([&c](auto && a) { c += a; }, iter<1 >(a));
64- });
65- bench (" wrank1" , m, n, reps,
66- [](auto & c, auto const & a)
67- {
68- for_each (ra::wrank<1 , 1 >([](auto & c, auto && a) { c += a; }), c, a);
69- });
70- bench (" wrank2" , m, n, reps,
71- [](auto & c, auto const & a)
72- {
73- for_each (ra::wrank<1 , 1 >(ra::wrank<0 , 0 >([](auto & c, auto a) { c += a; })), c, a);
74- });
75- bench (" accumscalar" , m, n, reps,
76- [](auto & c, auto const & a)
77- {
78- ra::scalar (c) += iter<1 >(a);
79- });
80- bench (" accumiter" , m, n, reps,
81- [](auto & c, auto const & a)
82- {
83- iter<1 >(c) += iter<1 >(a);
84- });
85- bench (" frametransp" , m, n, reps,
86- [](auto & c, auto const & a)
87- {
88- c += transpose (a);
89- });
90- };
47+ }
48+ });
49+ bench (" sideways" , m, n, reps,
50+ [](auto & c, auto const & a)
51+ {
52+ for (int j=0 , jend=a.len (1 ); j<jend; ++j) {
53+ c (j) += sum (a (ra::all, j));
54+ }
55+ });
56+ bench (" accumrows" , m, n, reps,
57+ [](auto & c, auto const & a)
58+ {
59+ for_each ([&c](auto && a) { c += a; }, ra::iter<1 >(a));
60+ });
61+ bench (" wrank1" , m, n, reps,
62+ [](auto & c, auto const & a)
63+ {
64+ for_each (ra::wrank<1 , 1 >([](auto & c, auto && a) { c += a; }), c, a);
65+ });
66+ bench (" wrank2" , m, n, reps,
67+ [](auto & c, auto const & a)
68+ {
69+ for_each (ra::wrank<1 , 1 >(ra::wrank<0 , 0 >([](auto & c, auto a) { c += a; })), c, a);
70+ });
71+ bench (" accumscalar" , m, n, reps,
72+ [](auto & c, auto const & a)
73+ {
74+ ra::scalar (c) += ra::iter<1 >(a);
75+ });
76+ bench (" accumiter" , m, n, reps,
77+ [](auto & c, auto const & a)
78+ {
79+ ra::iter<1 >(c) += ra::iter<1 >(a);
80+ });
81+ bench (" frametransp" , m, n, reps,
82+ [](auto & c, auto const & a)
83+ {
84+ c += transpose (a);
85+ });
86+ };
9187
9288 bench_all (1 , 1000000 , 20 );
9389 bench_all (10 , 100000 , 20 );
0 commit comments