diff options
Diffstat (limited to 'boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp')
-rw-r--r-- | boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp b/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp index 5deba2cb57..0961346350 100644 --- a/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +++ b/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp @@ -24,6 +24,7 @@ #include <boost/numeric/odeint/external/thrust/thrust_algebra.hpp> #include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp> +// specializations for the standard thrust containers namespace boost { namespace numeric { @@ -48,5 +49,59 @@ struct algebra_dispatcher< thrust::device_vector< T , A > > } // namespace boost +// add support for thrust backend vectors, if available + +#include <thrust/version.h> + +#if THRUST_VERSION >= 100600 + +// specialization for thrust cpp vector +#include <thrust/system/cpp/vector.h> +namespace boost { namespace numeric { namespace odeint { + template< class T , class A > + struct algebra_dispatcher< thrust::cpp::vector< T , A > > + { + typedef thrust_algebra algebra_type; + }; +} } } + +// specialization for thrust omp vector +#ifdef _OPENMP +#include <thrust/system/omp/vector.h> +namespace boost { namespace numeric { namespace odeint { + template< class T , class A > + struct algebra_dispatcher< thrust::omp::vector< T , A > > + { + typedef thrust_algebra algebra_type; + }; +} } } +#endif // _OPENMP + +// specialization for thrust tbb vector +#ifdef TBB_VERSION_MAJOR +#include <thrust/system/tbb/vector.h> +namespace boost { namespace numeric { namespace odeint { + template< class T , class A > + struct algebra_dispatcher< thrust::tbb::vector< T , A > > + { + typedef thrust_algebra algebra_type; + }; +} } } +#endif // TBB_VERSION_MAJOR + +// specialization for thrust cuda vector +#ifdef __CUDACC__ +#include <thrust/system/cuda/vector.h> +namespace boost { namespace numeric { namespace odeint { + template< class T , class A > + struct algebra_dispatcher< thrust::cuda::vector< T , A > > + { + typedef thrust_algebra algebra_type; + }; +} } } +#endif // __CUDACC__ + +#endif // THRUST_VERSION >= 100600 + #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_DISPATCHER_HPP_DEFINED |