]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/numeric/ublas/benchmarks/bench3/bench3.hpp
Add patch for failing prerm scripts
[ceph.git] / ceph / src / boost / libs / numeric / ublas / benchmarks / bench3 / bench3.hpp
CommitLineData
7c673cae
FG
1//
2// Copyright (c) 2000-2002
3// Joerg Walter, Mathias Koch
4//
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)
8//
9// The authors gratefully acknowledge the support of
10// GeNeSys mbH & Co. KG in producing this work.
11//
12
13#ifndef BENCH3_H
14#define BENCH3_H
15
16#include <iostream>
17#include <string>
18#include <valarray>
19
20#include <boost/numeric/ublas/vector.hpp>
21#include <boost/numeric/ublas/vector_proxy.hpp>
22#include <boost/numeric/ublas/matrix.hpp>
23#include <boost/numeric/ublas/matrix_proxy.hpp>
24
25#include <boost/timer.hpp>
26
27
28#define BOOST_UBLAS_NOT_USED(x) (void)(x)
29
30
31namespace ublas = boost::numeric::ublas;
32
33void header (std::string text);
34
35template<class T>
36struct footer {
37 void operator () (int multiplies, int plus, int runs, double elapsed) {
38 std::cout << "elapsed: " << elapsed << " s, "
39 << (multiplies * ublas::type_traits<T>::multiplies_complexity +
40 plus * ublas::type_traits<T>::plus_complexity) * runs /
41 (1024 * 1024 * elapsed) << " Mflops" << std::endl;
42 }
43};
44
45template<class T, int N>
46struct c_vector_traits {
47 typedef T type [N];
48};
49template<class T, int N, int M>
50struct c_matrix_traits {
51 typedef T type [N] [M];
52};
53
54template<class T, int N>
55struct initialize_c_vector {
56 void operator () (typename c_vector_traits<T, N>::type &v) {
57 for (int i = 0; i < N; ++ i)
58 v [i] = std::rand () * 1.f;
59// v [i] = 0.f;
60 }
61};
62template<class V>
63BOOST_UBLAS_INLINE
64void initialize_vector (V &v) {
65 int size = v.size ();
66 for (int i = 0; i < size; ++ i)
67 v [i] = std::rand () * 1.f;
68// v [i] = 0.f;
69}
70
71template<class T, int N, int M>
72struct initialize_c_matrix {
73 void operator () (typename c_matrix_traits<T, N, M>::type &m) {
74 for (int i = 0; i < N; ++ i)
75 for (int j = 0; j < M; ++ j)
76 m [i] [j] = std::rand () * 1.f;
77// m [i] [j] = 0.f;
78 }
79};
80template<class M>
81BOOST_UBLAS_INLINE
82void initialize_matrix (M &m) {
83 int size1 = m.size1 ();
84 int size2 = m.size2 ();
85 for (int i = 0; i < size1; ++ i)
86 for (int j = 0; j < size2; ++ j)
87 m (i, j) = std::rand () * 1.f;
88// m (i, j) = 0.f;
89}
90
91template<class T>
92BOOST_UBLAS_INLINE
93void sink_scalar (const T &s) {
94 static T g_s = s;
95}
96
97template<class T, int N>
98struct sink_c_vector {
99 void operator () (const typename c_vector_traits<T, N>::type &v) {
100 static typename c_vector_traits<T, N>::type g_v;
101 for (int i = 0; i < N; ++ i)
102 g_v [i] = v [i];
103 }
104};
105template<class V>
106BOOST_UBLAS_INLINE
107void sink_vector (const V &v) {
108 static V g_v (v);
109}
110
111template<class T, int N, int M>
112struct sink_c_matrix {
113 void operator () (const typename c_matrix_traits<T, N, M>::type &m) {
114 static typename c_matrix_traits<T, N, M>::type g_m;
115 for (int i = 0; i < N; ++ i)
116 for (int j = 0; j < M; ++ j)
117 g_m [i] [j] = m [i] [j];
118 }
119};
120template<class M>
121BOOST_UBLAS_INLINE
122void sink_matrix (const M &m) {
123 static M g_m (m);
124}
125
126template<class T>
127struct peak {
128 void operator () (int runs);
129};
130
131template<class T, int N>
132struct bench_1 {
133 void operator () (int runs);
134};
135
136template<class T, int N>
137struct bench_2 {
138 void operator () (int runs);
139};
140
141template<class T, int N>
142struct bench_3 {
143 void operator () (int runs);
144};
145
146struct safe_tag {};
147struct fast_tag {};
148
149// #define USE_FLOAT
150#define USE_DOUBLE
151// #define USE_STD_COMPLEX
152
153#define USE_C_ARRAY
154// #define USE_BOUNDED_ARRAY
155#define USE_UNBOUNDED_ARRAY
156// #define USE_STD_VALARRAY
157#define USE_STD_VECTOR
158
159#endif