mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Fix TensorReverse on GPU with m_stride[i]==0
This commit is contained in:
parent
8053eeb51e
commit
81a03bec75
@ -122,6 +122,8 @@ struct TensorEvaluator<const TensorReverseOp<ReverseDimensions, ArgType>, Device
|
||||
RawAccess = false
|
||||
};
|
||||
|
||||
typedef internal::TensorIntDivisor<Index> IndexDivisor;
|
||||
|
||||
typedef typename internal::remove_const<Scalar>::type ScalarNoConst;
|
||||
typedef internal::TensorBlock<ScalarNoConst, Index, NumDims, Layout>
|
||||
OutputTensorBlock;
|
||||
@ -141,17 +143,15 @@ struct TensorEvaluator<const TensorReverseOp<ReverseDimensions, ArgType>, Device
|
||||
m_strides[0] = 1;
|
||||
for (int i = 1; i < NumDims; ++i) {
|
||||
m_strides[i] = m_strides[i-1] * m_dimensions[i-1];
|
||||
if (m_strides[i] > 0) m_fastStrides[i] = IndexDivisor(m_strides[i]);
|
||||
}
|
||||
} else {
|
||||
m_strides[NumDims-1] = 1;
|
||||
for (int i = NumDims - 2; i >= 0; --i) {
|
||||
m_strides[i] = m_strides[i+1] * m_dimensions[i+1];
|
||||
if (m_strides[i] > 0) m_fastStrides[i] = IndexDivisor(m_strides[i]);
|
||||
}
|
||||
}
|
||||
// Remember the strides for fast division.
|
||||
for (int i = 0; i < NumDims; ++i) {
|
||||
m_fastStrides[i] = internal::TensorIntDivisor<Index>(m_strides[i]);
|
||||
}
|
||||
}
|
||||
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
@ -377,7 +377,7 @@ struct TensorEvaluator<const TensorReverseOp<ReverseDimensions, ArgType>, Device
|
||||
protected:
|
||||
Dimensions m_dimensions;
|
||||
array<Index, NumDims> m_strides;
|
||||
array<internal::TensorIntDivisor<Index>, NumDims> m_fastStrides;
|
||||
array<IndexDivisor, NumDims> m_fastStrides;
|
||||
TensorEvaluator<ArgType, Device> m_impl;
|
||||
ReverseDimensions m_reverse;
|
||||
const Device& m_device;
|
||||
|
Loading…
x
Reference in New Issue
Block a user