Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 /* | |
2 [auto_generated] | |
3 boost/numeric/odeint/external/viennacl_operations.hpp | |
4 | |
5 [begin_description] | |
6 ViennaCL operations. | |
7 [end_description] | |
8 | |
9 Copyright 2009-2011 Karsten Ahnert | |
10 Copyright 2009-2011 Mario Mulansky | |
11 | |
12 Distributed under the Boost Software License, Version 1.0. | |
13 (See accompanying file LICENSE_1_0.txt or | |
14 copy at http://www.boost.org/LICENSE_1_0.txt) | |
15 */ | |
16 | |
17 | |
18 #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_VIENNACL_VIENNACL_OPERATIONS_HPP_INCLUDED | |
19 #define BOOST_NUMERIC_ODEINT_EXTERNAL_VIENNACL_VIENNACL_OPERATIONS_HPP_INCLUDED | |
20 | |
21 #include <viennacl/vector.hpp> | |
22 #include <viennacl/generator/custom_operation.hpp> | |
23 | |
24 namespace boost { | |
25 namespace numeric { | |
26 namespace odeint { | |
27 | |
28 | |
29 | |
30 struct viennacl_operations | |
31 { | |
32 | |
33 template< class Fac1 = double , class Fac2 = Fac1 > | |
34 struct scale_sum2 | |
35 { | |
36 const Fac1 m_alpha1; | |
37 const Fac2 m_alpha2; | |
38 | |
39 scale_sum2( Fac1 alpha1 , Fac2 alpha2 ) | |
40 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) | |
41 { } | |
42 | |
43 template< class T1 , class T2 , class T3 > | |
44 void operator()( viennacl::vector<T1> &v1 , | |
45 const viennacl::vector<T2> &v2 , | |
46 const viennacl::vector<T3> &v3 | |
47 ) const | |
48 { | |
49 using namespace viennacl; | |
50 | |
51 static generator::symbolic_vector <0, T1> sym_v1; | |
52 static generator::symbolic_vector <1, T2> sym_v2; | |
53 static generator::symbolic_vector <2, T3> sym_v3; | |
54 static generator::cpu_symbolic_scalar<3, Fac1> sym_a1; | |
55 static generator::cpu_symbolic_scalar<4, Fac2> sym_a2; | |
56 | |
57 static generator::custom_operation op( | |
58 sym_v1 = sym_a1 * sym_v2 | |
59 + sym_a2 * sym_v3 | |
60 ); | |
61 | |
62 ocl::enqueue( op(v1, | |
63 const_cast< viennacl::vector<T2>& >(v2), | |
64 const_cast< viennacl::vector<T3>& >(v3), | |
65 const_cast< Fac1& >(m_alpha1), | |
66 const_cast< Fac2& >(m_alpha2) | |
67 ) ); | |
68 } | |
69 | |
70 typedef void result_type; | |
71 }; | |
72 | |
73 | |
74 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 > | |
75 struct scale_sum3 | |
76 { | |
77 const Fac1 m_alpha1; | |
78 const Fac2 m_alpha2; | |
79 const Fac3 m_alpha3; | |
80 | |
81 scale_sum3( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 ) | |
82 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) | |
83 { } | |
84 | |
85 template< class T1 , class T2 , class T3 , class T4 > | |
86 void operator()( viennacl::vector<T1> &v1 , | |
87 const viennacl::vector<T2> &v2 , | |
88 const viennacl::vector<T3> &v3 , | |
89 const viennacl::vector<T4> &v4 | |
90 ) const | |
91 { | |
92 using namespace viennacl; | |
93 | |
94 static generator::symbolic_vector <0, T1> sym_v1; | |
95 static generator::symbolic_vector <1, T2> sym_v2; | |
96 static generator::symbolic_vector <2, T3> sym_v3; | |
97 static generator::symbolic_vector <3, T4> sym_v4; | |
98 static generator::cpu_symbolic_scalar<4, Fac1> sym_a1; | |
99 static generator::cpu_symbolic_scalar<5, Fac2> sym_a2; | |
100 static generator::cpu_symbolic_scalar<6, Fac3> sym_a3; | |
101 | |
102 static generator::custom_operation op( | |
103 sym_v1 = sym_a1 * sym_v2 | |
104 + sym_a2 * sym_v3 | |
105 + sym_a3 * sym_v4 | |
106 ); | |
107 | |
108 ocl::enqueue( op(v1, | |
109 const_cast< viennacl::vector<T2>& >(v2), | |
110 const_cast< viennacl::vector<T3>& >(v3), | |
111 const_cast< viennacl::vector<T4>& >(v4), | |
112 const_cast< Fac1& >(m_alpha1), | |
113 const_cast< Fac2& >(m_alpha2), | |
114 const_cast< Fac3& >(m_alpha3) | |
115 ) ); | |
116 } | |
117 | |
118 typedef void result_type; | |
119 }; | |
120 | |
121 | |
122 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 > | |
123 struct scale_sum4 | |
124 { | |
125 const Fac1 m_alpha1; | |
126 const Fac2 m_alpha2; | |
127 const Fac3 m_alpha3; | |
128 const Fac4 m_alpha4; | |
129 | |
130 scale_sum4( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ) | |
131 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) { } | |
132 | |
133 template< class T1 , class T2 , class T3 , class T4 , class T5 > | |
134 void operator()( viennacl::vector<T1> &v1 , | |
135 const viennacl::vector<T2> &v2 , | |
136 const viennacl::vector<T3> &v3 , | |
137 const viennacl::vector<T4> &v4 , | |
138 const viennacl::vector<T5> &v5 | |
139 ) const | |
140 { | |
141 using namespace viennacl; | |
142 | |
143 static generator::symbolic_vector <0, T1> sym_v1; | |
144 static generator::symbolic_vector <1, T2> sym_v2; | |
145 static generator::symbolic_vector <2, T3> sym_v3; | |
146 static generator::symbolic_vector <3, T4> sym_v4; | |
147 static generator::symbolic_vector <4, T5> sym_v5; | |
148 static generator::cpu_symbolic_scalar<5, Fac1> sym_a1; | |
149 static generator::cpu_symbolic_scalar<6, Fac2> sym_a2; | |
150 static generator::cpu_symbolic_scalar<7, Fac3> sym_a3; | |
151 static generator::cpu_symbolic_scalar<8, Fac4> sym_a4; | |
152 | |
153 static generator::custom_operation op( | |
154 sym_v1 = sym_a1 * sym_v2 | |
155 + sym_a2 * sym_v3 | |
156 + sym_a3 * sym_v4 | |
157 + sym_a4 * sym_v5 | |
158 ); | |
159 | |
160 ocl::enqueue( op(v1, | |
161 const_cast< viennacl::vector<T2>& >(v2), | |
162 const_cast< viennacl::vector<T3>& >(v3), | |
163 const_cast< viennacl::vector<T4>& >(v4), | |
164 const_cast< viennacl::vector<T5>& >(v5), | |
165 const_cast< Fac1& >(m_alpha1), | |
166 const_cast< Fac2& >(m_alpha2), | |
167 const_cast< Fac3& >(m_alpha3), | |
168 const_cast< Fac4& >(m_alpha4) | |
169 ) ); | |
170 } | |
171 | |
172 typedef void result_type; | |
173 }; | |
174 | |
175 | |
176 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 > | |
177 struct scale_sum5 | |
178 { | |
179 const Fac1 m_alpha1; | |
180 const Fac2 m_alpha2; | |
181 const Fac3 m_alpha3; | |
182 const Fac4 m_alpha4; | |
183 const Fac5 m_alpha5; | |
184 | |
185 scale_sum5( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 , Fac5 alpha5 ) | |
186 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { } | |
187 | |
188 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 > | |
189 void operator()( viennacl::vector<T1> &v1 , | |
190 const viennacl::vector<T2> &v2 , | |
191 const viennacl::vector<T3> &v3 , | |
192 const viennacl::vector<T4> &v4 , | |
193 const viennacl::vector<T5> &v5 , | |
194 const viennacl::vector<T6> &v6 | |
195 ) const | |
196 { | |
197 using namespace viennacl; | |
198 | |
199 static generator::symbolic_vector < 0, T1> sym_v1; | |
200 static generator::symbolic_vector < 1, T2> sym_v2; | |
201 static generator::symbolic_vector < 2, T3> sym_v3; | |
202 static generator::symbolic_vector < 3, T4> sym_v4; | |
203 static generator::symbolic_vector < 4, T5> sym_v5; | |
204 static generator::symbolic_vector < 5, T6> sym_v6; | |
205 static generator::cpu_symbolic_scalar< 6, Fac1> sym_a1; | |
206 static generator::cpu_symbolic_scalar< 7, Fac2> sym_a2; | |
207 static generator::cpu_symbolic_scalar< 8, Fac3> sym_a3; | |
208 static generator::cpu_symbolic_scalar< 9, Fac4> sym_a4; | |
209 static generator::cpu_symbolic_scalar<10, Fac5> sym_a5; | |
210 | |
211 static generator::custom_operation op( | |
212 sym_v1 = sym_a1 * sym_v2 | |
213 + sym_a2 * sym_v3 | |
214 + sym_a3 * sym_v4 | |
215 + sym_a4 * sym_v5 | |
216 + sym_a5 * sym_v6 | |
217 ); | |
218 | |
219 ocl::enqueue( op(v1, | |
220 const_cast< viennacl::vector<T2>& >(v2), | |
221 const_cast< viennacl::vector<T3>& >(v3), | |
222 const_cast< viennacl::vector<T4>& >(v4), | |
223 const_cast< viennacl::vector<T5>& >(v5), | |
224 const_cast< viennacl::vector<T6>& >(v6), | |
225 const_cast< Fac1& >(m_alpha1), | |
226 const_cast< Fac2& >(m_alpha2), | |
227 const_cast< Fac3& >(m_alpha3), | |
228 const_cast< Fac4& >(m_alpha4), | |
229 const_cast< Fac5& >(m_alpha5) | |
230 ) ); | |
231 } | |
232 | |
233 typedef void result_type; | |
234 }; | |
235 | |
236 | |
237 }; | |
238 | |
239 | |
240 } // odeint | |
241 } // numeric | |
242 } // boost | |
243 | |
244 | |
245 #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VIENNACL_VIENNACL_OPERATIONS_HPP_INCLUDED |