2 // Copyright (c) 2000-2002
3 // Joerg Walter, Mathias Koch
5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
9 // The authors gratefully acknowledge the support of
10 // GeNeSys mbH & Co. KG in producing this work.
15 void header (std::string text) {
16 std::cout << text << std::endl;
23 void operator () (int runs) const {
27 for (int i = 0; i < runs; ++ i) {
31 footer<value_type> () (0, 1, runs, t.elapsed ());
33 catch (std::exception &e) {
34 std::cout << e.what () << std::endl;
39 struct peak_c_multiplies {
42 void operator () (int runs) const {
46 for (int i = 0; i < runs; ++ i) {
50 footer<value_type> () (0, 1, runs, t.elapsed ());
52 catch (std::exception &e) {
53 std::cout << e.what () << std::endl;
59 void peak<T>::operator () (int runs) {
63 peak_c_plus<T> () (runs);
65 header ("multiplies");
66 peak_c_multiplies<T> () (runs);
70 template <typename scalar>
71 void do_bench (std::string type_string, int scale)
74 peak<scalar> () (1000000 * scale);
76 header (type_string + ", 3");
77 bench_1<scalar, 3> () (1000000 * scale);
78 bench_2<scalar, 3> () (300000 * scale);
79 bench_3<scalar, 3> () (100000 * scale);
81 header (type_string + ", 10");
82 bench_1<scalar, 10> () (300000 * scale);
83 bench_2<scalar, 10> () (30000 * scale);
84 bench_3<scalar, 10> () (3000 * scale);
86 header (type_string + ", 30");
87 bench_1<scalar, 30> () (100000 * scale);
88 bench_2<scalar, 30> () (3000 * scale);
89 bench_3<scalar, 30> () (100 * scale);
91 header (type_string + ", 100");
92 bench_1<scalar, 100> () (30000 * scale);
93 bench_2<scalar, 100> () (300 * scale);
94 bench_3<scalar, 100> () (3 * scale);
97 int main (int argc, char *argv []) {
101 scale = std::atoi (argv [1]);
104 do_bench<float> ("FLOAT", scale);
108 do_bench<double> ("DOUBLE", scale);
111 #ifdef USE_STD_COMPLEX
113 do_bench<std::complex<float> > ("COMPLEX<FLOAT>", scale);
117 do_bench<std::complex<double> > ("COMPLEX<DOUBLE>", scale);