Mercurial > hg > vamp-build-and-test
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,245 @@ +/* + [auto_generated] + boost/numeric/odeint/external/viennacl_operations.hpp + + [begin_description] + ViennaCL operations. + [end_description] + + Copyright 2009-2011 Karsten Ahnert + Copyright 2009-2011 Mario Mulansky + + 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) + */ + + +#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_VIENNACL_VIENNACL_OPERATIONS_HPP_INCLUDED +#define BOOST_NUMERIC_ODEINT_EXTERNAL_VIENNACL_VIENNACL_OPERATIONS_HPP_INCLUDED + +#include <viennacl/vector.hpp> +#include <viennacl/generator/custom_operation.hpp> + +namespace boost { +namespace numeric { +namespace odeint { + + + +struct viennacl_operations +{ + + template< class Fac1 = double , class Fac2 = Fac1 > + struct scale_sum2 + { + const Fac1 m_alpha1; + const Fac2 m_alpha2; + + scale_sum2( Fac1 alpha1 , Fac2 alpha2 ) + : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) + { } + + template< class T1 , class T2 , class T3 > + void operator()( viennacl::vector<T1> &v1 , + const viennacl::vector<T2> &v2 , + const viennacl::vector<T3> &v3 + ) const + { + using namespace viennacl; + + static generator::symbolic_vector <0, T1> sym_v1; + static generator::symbolic_vector <1, T2> sym_v2; + static generator::symbolic_vector <2, T3> sym_v3; + static generator::cpu_symbolic_scalar<3, Fac1> sym_a1; + static generator::cpu_symbolic_scalar<4, Fac2> sym_a2; + + static generator::custom_operation op( + sym_v1 = sym_a1 * sym_v2 + + sym_a2 * sym_v3 + ); + + ocl::enqueue( op(v1, + const_cast< viennacl::vector<T2>& >(v2), + const_cast< viennacl::vector<T3>& >(v3), + const_cast< Fac1& >(m_alpha1), + const_cast< Fac2& >(m_alpha2) + ) ); + } + + typedef void result_type; + }; + + + template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 > + struct scale_sum3 + { + const Fac1 m_alpha1; + const Fac2 m_alpha2; + const Fac3 m_alpha3; + + scale_sum3( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 ) + : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) + { } + + template< class T1 , class T2 , class T3 , class T4 > + void operator()( viennacl::vector<T1> &v1 , + const viennacl::vector<T2> &v2 , + const viennacl::vector<T3> &v3 , + const viennacl::vector<T4> &v4 + ) const + { + using namespace viennacl; + + static generator::symbolic_vector <0, T1> sym_v1; + static generator::symbolic_vector <1, T2> sym_v2; + static generator::symbolic_vector <2, T3> sym_v3; + static generator::symbolic_vector <3, T4> sym_v4; + static generator::cpu_symbolic_scalar<4, Fac1> sym_a1; + static generator::cpu_symbolic_scalar<5, Fac2> sym_a2; + static generator::cpu_symbolic_scalar<6, Fac3> sym_a3; + + static generator::custom_operation op( + sym_v1 = sym_a1 * sym_v2 + + sym_a2 * sym_v3 + + sym_a3 * sym_v4 + ); + + ocl::enqueue( op(v1, + const_cast< viennacl::vector<T2>& >(v2), + const_cast< viennacl::vector<T3>& >(v3), + const_cast< viennacl::vector<T4>& >(v4), + const_cast< Fac1& >(m_alpha1), + const_cast< Fac2& >(m_alpha2), + const_cast< Fac3& >(m_alpha3) + ) ); + } + + typedef void result_type; + }; + + + template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 > + struct scale_sum4 + { + const Fac1 m_alpha1; + const Fac2 m_alpha2; + const Fac3 m_alpha3; + const Fac4 m_alpha4; + + scale_sum4( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ) + : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) { } + + template< class T1 , class T2 , class T3 , class T4 , class T5 > + void operator()( viennacl::vector<T1> &v1 , + const viennacl::vector<T2> &v2 , + const viennacl::vector<T3> &v3 , + const viennacl::vector<T4> &v4 , + const viennacl::vector<T5> &v5 + ) const + { + using namespace viennacl; + + static generator::symbolic_vector <0, T1> sym_v1; + static generator::symbolic_vector <1, T2> sym_v2; + static generator::symbolic_vector <2, T3> sym_v3; + static generator::symbolic_vector <3, T4> sym_v4; + static generator::symbolic_vector <4, T5> sym_v5; + static generator::cpu_symbolic_scalar<5, Fac1> sym_a1; + static generator::cpu_symbolic_scalar<6, Fac2> sym_a2; + static generator::cpu_symbolic_scalar<7, Fac3> sym_a3; + static generator::cpu_symbolic_scalar<8, Fac4> sym_a4; + + static generator::custom_operation op( + sym_v1 = sym_a1 * sym_v2 + + sym_a2 * sym_v3 + + sym_a3 * sym_v4 + + sym_a4 * sym_v5 + ); + + ocl::enqueue( op(v1, + const_cast< viennacl::vector<T2>& >(v2), + const_cast< viennacl::vector<T3>& >(v3), + const_cast< viennacl::vector<T4>& >(v4), + const_cast< viennacl::vector<T5>& >(v5), + const_cast< Fac1& >(m_alpha1), + const_cast< Fac2& >(m_alpha2), + const_cast< Fac3& >(m_alpha3), + const_cast< Fac4& >(m_alpha4) + ) ); + } + + typedef void result_type; + }; + + + template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 > + struct scale_sum5 + { + const Fac1 m_alpha1; + const Fac2 m_alpha2; + const Fac3 m_alpha3; + const Fac4 m_alpha4; + const Fac5 m_alpha5; + + scale_sum5( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 , Fac5 alpha5 ) + : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { } + + template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 > + void operator()( viennacl::vector<T1> &v1 , + const viennacl::vector<T2> &v2 , + const viennacl::vector<T3> &v3 , + const viennacl::vector<T4> &v4 , + const viennacl::vector<T5> &v5 , + const viennacl::vector<T6> &v6 + ) const + { + using namespace viennacl; + + static generator::symbolic_vector < 0, T1> sym_v1; + static generator::symbolic_vector < 1, T2> sym_v2; + static generator::symbolic_vector < 2, T3> sym_v3; + static generator::symbolic_vector < 3, T4> sym_v4; + static generator::symbolic_vector < 4, T5> sym_v5; + static generator::symbolic_vector < 5, T6> sym_v6; + static generator::cpu_symbolic_scalar< 6, Fac1> sym_a1; + static generator::cpu_symbolic_scalar< 7, Fac2> sym_a2; + static generator::cpu_symbolic_scalar< 8, Fac3> sym_a3; + static generator::cpu_symbolic_scalar< 9, Fac4> sym_a4; + static generator::cpu_symbolic_scalar<10, Fac5> sym_a5; + + static generator::custom_operation op( + sym_v1 = sym_a1 * sym_v2 + + sym_a2 * sym_v3 + + sym_a3 * sym_v4 + + sym_a4 * sym_v5 + + sym_a5 * sym_v6 + ); + + ocl::enqueue( op(v1, + const_cast< viennacl::vector<T2>& >(v2), + const_cast< viennacl::vector<T3>& >(v3), + const_cast< viennacl::vector<T4>& >(v4), + const_cast< viennacl::vector<T5>& >(v5), + const_cast< viennacl::vector<T6>& >(v6), + const_cast< Fac1& >(m_alpha1), + const_cast< Fac2& >(m_alpha2), + const_cast< Fac3& >(m_alpha3), + const_cast< Fac4& >(m_alpha4), + const_cast< Fac5& >(m_alpha5) + ) ); + } + + typedef void result_type; + }; + + +}; + + +} // odeint +} // numeric +} // boost + + +#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VIENNACL_VIENNACL_OPERATIONS_HPP_INCLUDED