summaryrefslogtreecommitdiff
path: root/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp')
-rw-r--r--boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp55
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