diff options
author | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2016-01-11 10:36:37 -0800 |
---|---|---|
committer | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2016-01-11 10:36:37 -0800 |
commit | 2ccb1c86342203cbc25a587590149d2cf5175900 (patch) | |
tree | 28e610f9505261830e0da0af3c488b07443d9087 /unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h | |
parent | 780623261eedd996404795dfb7928e680408adb5 (diff) |
Fixed a bug in the dispatch of optimized reduction kernels.
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h')
-rw-r--r-- | unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h b/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h index cea32d05f..7bd2326b0 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h @@ -438,19 +438,18 @@ struct TensorEvaluator<const TensorReductionOp<Op, Dims, ArgType>, Device> EIGEN_STATIC_ASSERT((!ReducingInnerMostDims | !PreservingInnerMostDims | (NumReducedDims == NumInputDims)), YOU_MADE_A_PROGRAMMING_MISTAKE); - // Bitmap indicating if an input dimension is reduced or not. - array<bool, NumInputDims> reduced; + // Build the bitmap indicating if an input dimension is reduced or not. for (int i = 0; i < NumInputDims; ++i) { - reduced[i] = false; + m_reduced[i] = false; } for (int i = 0; i < NumReducedDims; ++i) { eigen_assert(op.dims()[i] >= 0); eigen_assert(op.dims()[i] < NumInputDims); - reduced[op.dims()[i]] = true; + m_reduced[op.dims()[i]] = true; } const typename TensorEvaluator<ArgType, Device>::Dimensions& input_dims = m_impl.dimensions(); - internal::DimInitializer<Dimensions>::run(input_dims, reduced, &m_dimensions, &m_reducedDims); + internal::DimInitializer<Dimensions>::run(input_dims, m_reduced, &m_dimensions, &m_reducedDims); // Precompute output strides. if (NumOutputDims > 0) { @@ -485,7 +484,7 @@ struct TensorEvaluator<const TensorReductionOp<Op, Dims, ArgType>, Device> int outputIndex = 0; int reduceIndex = 0; for (int i = 0; i < NumInputDims; ++i) { - if (reduced[i]) { + if (m_reduced[i]) { m_reducedStrides[reduceIndex] = input_strides[i]; ++reduceIndex; } else { @@ -531,9 +530,9 @@ struct TensorEvaluator<const TensorReductionOp<Op, Dims, ArgType>, Device> bool reducing_inner_dims = true; for (int i = 0; i < NumReducedDims; ++i) { if (static_cast<int>(Layout) == static_cast<int>(ColMajor)) { - reducing_inner_dims &= m_reducedDims[i]; + reducing_inner_dims &= m_reduced[i]; } else { - reducing_inner_dims &= m_reducedDims[NumInputDims - 1 - i]; + reducing_inner_dims &= m_reduced[NumInputDims - 1 - i]; } } if (internal::InnerReducer<Self, Op, Device>::HasOptimizedImplementation && @@ -548,9 +547,9 @@ struct TensorEvaluator<const TensorReductionOp<Op, Dims, ArgType>, Device> bool preserving_inner_dims = true; for (int i = 0; i < NumReducedDims; ++i) { if (static_cast<int>(Layout) == static_cast<int>(ColMajor)) { - preserving_inner_dims &= m_reducedDims[NumInputDims - 1 - i]; + preserving_inner_dims &= m_reduced[NumInputDims - 1 - i]; } else { - preserving_inner_dims &= m_reducedDims[i]; + preserving_inner_dims &= m_reduced[i]; } } if (internal::OuterReducer<Self, Op, Device>::HasOptimizedImplementation && @@ -689,6 +688,8 @@ struct TensorEvaluator<const TensorReductionOp<Op, Dims, ArgType>, Device> return startInput; } + // Bitmap indicating if an input dimension is reduced or not. + array<bool, NumInputDims> m_reduced; // Dimensions of the output of the operation. Dimensions m_dimensions; // Precomputed strides for the output tensor. |