GPLIB++
perftest.cpp
Go to the documentation of this file.
1 #include <vector>
2 #include <algorithm>
3 #include <numeric>
4 #include <boost/bind.hpp>
5 #include <cmath>
6 #include <functional>
7 #include <boost/numeric/ublas/vector.hpp>
8 #include <boost/numeric/ublas/vector_expression.hpp>
9 
10 namespace ublas = boost::numeric::ublas;
11 using namespace std;
12 using namespace gplib;
13 
14 const int size = 1000000;
15 const int iterations = 1;
16 
17 void f(vector<double> &v1, vector<double> &v2, vector<double> &v3, vector<
18  double> &v4)
19  {
20  transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), boost::bind(
21  std::multiplies<double>(), boost::bind<double>(std::minus<double>(),
22  _1, _2), boost::bind<double>(std::minus<double>(), _1, _2)));
23  copy(v2.begin(), v2.end(), v4.begin());
24  double value = accumulate(v3.begin(), v3.end(), 0.0);
25  }
26 
27 void g(vector<double> &v1, vector<double> &v2, vector<double> &v3, vector<
28  double> &v4)
29  {
30  double value = 0;
31  for (size_t i = 0; i < v1.size(); ++i)
32  {
33  v3.at(i) = pow(v1.at(i) - v2.at(i), 2);
34  v4.at(i) = v2.at(i);
35  value += v3.at(i);
36  //v3.at(i) = v1.at(i) * v2.at(i);
37  }
38  }
39 
40 void h(vector<double> &v1, vector<double> &v2, vector<double> &v3, vector<
41  double> &v4)
42  {
43  typedef vector<double>::iterator tit;
44  double value = 0;
45  for (tit it1 = v1.begin(), it2 = v2.begin(), it3 = v3.begin(), it4 =
46  v4.begin(); it1 != v1.end(); ++it1, ++it2, ++it3, ++it4)
47  {
48  *it3 = (*it1 - *it2) * (*it1 - *it2);
49  *it4 = *it2;
50  value += *it3;
51  }
52  }
53 
54 void ublasf(ublas::vector<double> &v1, ublas::vector<double> &v2,
55  ublas::vector<double> &v3, ublas::vector<double> &v4)
56  {
57  transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), boost::bind(
58  std::multiplies<double>(), boost::bind<double>(std::minus<double>(),
59  _1, _2), boost::bind<double>(std::minus<double>(), _1, _2)));
60  v2 = v4;
61  double value = ublas::sum(v3);
62  }
63 
64 void ublasg(ublas::vector<double> &v1, ublas::vector<double> &v2,
65  ublas::vector<double> &v3, ublas::vector<double> &v4)
66  {
67  double value = 0;
68  for (size_t i = 0; i < v1.size(); ++i)
69  {
70  v3(i) = pow(v1(i) - v2(i), 2);
71  v4(i) = v2(i);
72  value += v3(i);
73  //v3.at(i) = v1.at(i) * v2.at(i);
74  }
75  }
76 
77 void ublash(ublas::vector<double> &v1, ublas::vector<double> &v2,
78  ublas::vector<double> &v3, ublas::vector<double> &v4)
79  {
80  typedef ublas::vector<double>::iterator tit;
81  double value = 0;
82  for (tit it1 = v1.begin(), it2 = v2.begin(), it3 = v3.begin(), it4 =
83  v4.begin(); it1 != v1.end(); ++it1, ++it2, ++it3, ++it4)
84  {
85  *it3 = (*it1 - *it2) * (*it1 - *it2);
86  *it4 = *it2;
87  value += *it3;
88  }
89  }
90 int main()
91  {
92  vector<double> V1(size, 2.), V2(size, 1.5), V3(size, 1.1), V4(size, 1.3);
93  f(V1, V2, V3, V4);
94  g(V1, V2, V3, V4);
95  h(V1, V2, V3, V4);
96 
97  ublas::vector<double> U1(size), U2(size), U3(size), U4(size);
98 
99  ublasf(U1, U2, U3, U4);
100  ublasg(U1, U2, U3, U4);
101  ublash(U1, U2, U3, U4);
102  }
int main()
Definition: perftest.cpp:90
void f(vector< double > &v1, vector< double > &v2, vector< double > &v3, vector< double > &v4)
Definition: perftest.cpp:17
void ublasf(ublas::vector< double > &v1, ublas::vector< double > &v2, ublas::vector< double > &v3, ublas::vector< double > &v4)
Definition: perftest.cpp:54
void ublash(ublas::vector< double > &v1, ublas::vector< double > &v2, ublas::vector< double > &v3, ublas::vector< double > &v4)
Definition: perftest.cpp:77
void h(vector< double > &v1, vector< double > &v2, vector< double > &v3, vector< double > &v4)
Definition: perftest.cpp:40
void ublasg(ublas::vector< double > &v1, ublas::vector< double > &v2, ublas::vector< double > &v3, ublas::vector< double > &v4)
Definition: perftest.cpp:64
void g(vector< double > &v1, vector< double > &v2, vector< double > &v3, vector< double > &v4)
Definition: perftest.cpp:27
const int size
Definition: perftest.cpp:14
const int iterations
Definition: perftest.cpp:15