aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h
diff options
context:
space:
mode:
authorGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2014-04-28 10:32:27 -0700
committerGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2014-04-28 10:32:27 -0700
commitc0f2cb016e60b7dbde1d5946f42234a709a711f9 (patch)
tree346d5beb917ea586a6a463312606cf794c91da75 /unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h
parent450d0c3de044c9f32fa2f37fee821f6e390df382 (diff)
Extended support for Tensors:
* Added ability to map a region of the memory to a tensor * Added basic support for unary and binary coefficient wise expressions, such as addition or square root * Provided an emulation layer to make it possible to compile the code with compilers (such as nvcc) that don't support cxx11.
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h')
-rw-r--r--unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h b/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h
new file mode 100644
index 000000000..f1df827f9
--- /dev/null
+++ b/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h
@@ -0,0 +1,52 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com>
+//
+// This Source Code Form is subject to the terms of the Mozilla
+// Public License v. 2.0. If a copy of the MPL was not distributed
+// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#ifndef EIGEN_CXX11_TENSOR_TENSOR_ASSIGN_H
+#define EIGEN_CXX11_TENSOR_TENSOR_ASSIGN_H
+
+
+namespace Eigen {
+
+/** \class TensorAssign
+ * \ingroup CXX11_Tensor_Module
+ *
+ * \brief The tensor assignment class.
+ *
+ * This class is responsible for triggering the evaluation of the expressions
+ * used on the lhs and rhs of an assignment operator and copy the result of
+ * the evaluation of the rhs expression at the address computed during the
+ * evaluation lhs expression.
+ *
+ * TODO: vectorization. For now the code only uses scalars
+ * TODO: parallelisation using multithreading on cpu, or kernels on gpu.
+ */
+namespace internal {
+
+template<typename Derived1, typename Derived2>
+struct TensorAssign
+{
+ typedef typename Derived1::Index Index;
+ EIGEN_DEVICE_FUNC
+ static inline void run(Derived1& dst, const Derived2& src)
+ {
+ TensorEvaluator<Derived1> evalDst(dst);
+ TensorEvaluator<Derived2> evalSrc(src);
+ const Index size = dst.size();
+ for(Index i = 0; i < size; ++i) {
+ evalDst.coeffRef(i) = evalSrc.coeff(i);
+ }
+ }
+};
+
+
+} // end namespace internal
+
+} // end namespace Eigen
+
+#endif // EIGEN_CXX11_TENSOR_TENSOR_ASSIGN_H