mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			183 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| //  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
 |