annotate DEPENDENCIES/generic/include/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp @ 125:34e428693f5d vext

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