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