Squashed 'third_party/boostorg/ublas/' content from commit e8607b3
Change-Id: Ia06afd642157a24e17fa9ddea28fb8601810b78e
git-subtree-dir: third_party/boostorg/ublas
git-subtree-split: e8607b3eea238e590eca93bfe498c21f470155c1
diff --git a/benchmarks/bench2/bench2.hpp b/benchmarks/bench2/bench2.hpp
new file mode 100644
index 0000000..efb20a2
--- /dev/null
+++ b/benchmarks/bench2/bench2.hpp
@@ -0,0 +1,182 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef BENCH2_H
+#define BENCH2_H
+
+#include <iostream>
+#include <string>
+#include <valarray>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/vector_sparse.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/matrix_sparse.hpp>
+
+#include <boost/timer.hpp>
+
+
+#define BOOST_UBLAS_NOT_USED(x) (void)(x)
+
+
+namespace ublas = boost::numeric::ublas;
+
+void header (std::string text);
+
+template<class T>
+struct footer {
+ void operator () (int multiplies, int plus, int runs, double elapsed) {
+ std::cout << "elapsed: " << elapsed << " s, "
+ << (multiplies * ublas::type_traits<T>::multiplies_complexity +
+ plus * ublas::type_traits<T>::plus_complexity) * runs /
+ (1024 * 1024 * elapsed) << " Mflops" << std::endl;
+ }
+};
+
+template<class T, int N>
+struct c_vector_traits {
+ typedef T type [N];
+};
+template<class T, int N, int M>
+struct c_matrix_traits {
+ typedef T type [N] [M];
+};
+
+template<class T, int N>
+struct initialize_c_vector {
+ void operator () (typename c_vector_traits<T, N>::type &v) {
+ for (int i = 0; i < N; ++ i)
+ v [i] = std::rand () * 1.f;
+// v [i] = 0.f;
+ }
+};
+template<class V>
+BOOST_UBLAS_INLINE
+void initialize_vector (V &v) {
+ int size = v.size ();
+ for (int i = 0; i < size; ++ i)
+ v [i] = std::rand () * 1.f;
+// v [i] = 0.f;
+}
+
+template<class T, int N, int M>
+struct initialize_c_matrix {
+ void operator () (typename c_matrix_traits<T, N, M>::type &m) {
+ for (int i = 0; i < N; ++ i)
+ for (int j = 0; j < M; ++ j)
+ m [i] [j] = std::rand () * 1.f;
+// m [i] [j] = 0.f;
+ }
+};
+template<class M>
+BOOST_UBLAS_INLINE
+void initialize_matrix (M &m, ublas::row_major_tag) {
+ int size1 = m.size1 ();
+ int size2 = m.size2 ();
+ for (int i = 0; i < size1; ++ i)
+ for (int j = 0; j < size2; ++ j)
+ m (i, j) = std::rand () * 1.f;
+// m (i, j) = 0.f;
+}
+template<class M>
+BOOST_UBLAS_INLINE
+void initialize_matrix (M &m, ublas::column_major_tag) {
+ int size1 = m.size1 ();
+ int size2 = m.size2 ();
+ for (int j = 0; j < size2; ++ j)
+ for (int i = 0; i < size1; ++ i)
+ m (i, j) = std::rand () * 1.f;
+// m (i, j) = 0.f;
+}
+template<class M>
+BOOST_UBLAS_INLINE
+void initialize_matrix (M &m) {
+ typedef typename M::orientation_category orientation_category;
+ initialize_matrix (m, orientation_category ());
+}
+
+template<class T>
+BOOST_UBLAS_INLINE
+void sink_scalar (const T &s) {
+ static T g_s = s;
+}
+
+template<class T, int N>
+struct sink_c_vector {
+ void operator () (const typename c_vector_traits<T, N>::type &v) {
+ static typename c_vector_traits<T, N>::type g_v;
+ for (int i = 0; i < N; ++ i)
+ g_v [i] = v [i];
+ }
+};
+template<class V>
+BOOST_UBLAS_INLINE
+void sink_vector (const V &v) {
+ static V g_v (v);
+}
+
+template<class T, int N, int M>
+struct sink_c_matrix {
+ void operator () (const typename c_matrix_traits<T, N, M>::type &m) {
+ static typename c_matrix_traits<T, N, M>::type g_m;
+ for (int i = 0; i < N; ++ i)
+ for (int j = 0; j < M; ++ j)
+ g_m [i] [j] = m [i] [j];
+ }
+};
+template<class M>
+BOOST_UBLAS_INLINE
+void sink_matrix (const M &m) {
+ static M g_m (m);
+}
+
+template<class T>
+struct peak {
+ void operator () (int runs);
+};
+
+template<class T, int N>
+struct bench_1 {
+ void operator () (int runs);
+};
+
+template<class T, int N>
+struct bench_2 {
+ void operator () (int runs);
+};
+
+template<class T, int N>
+struct bench_3 {
+ void operator () (int runs);
+};
+
+struct safe_tag {};
+struct fast_tag {};
+
+// #define USE_FLOAT
+#define USE_DOUBLE
+// #define USE_STD_COMPLEX
+
+#define USE_MAP_ARRAY
+// #define USE_STD_MAP
+// #define USE_STD_VALARRAY
+
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+
+#define USE_MAPPED_MATRIX
+// #define USE_SPARSE_VECTOR_OF_SPARSE_VECTOR
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#endif