mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-14 12:46:00 +08:00
Fixed the vectorized implementation of the Tensor select() method
This commit is contained in:
parent
ccf290a65c
commit
b3343bfdae
@ -352,11 +352,12 @@ template<typename IfArgType, typename ThenArgType, typename ElseArgType, typenam
|
|||||||
struct TensorEvaluator<const TensorSelectOp<IfArgType, ThenArgType, ElseArgType>, Device>
|
struct TensorEvaluator<const TensorSelectOp<IfArgType, ThenArgType, ElseArgType>, Device>
|
||||||
{
|
{
|
||||||
typedef TensorSelectOp<IfArgType, ThenArgType, ElseArgType> XprType;
|
typedef TensorSelectOp<IfArgType, ThenArgType, ElseArgType> XprType;
|
||||||
|
typedef typename XprType::Scalar Scalar;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
IsAligned = TensorEvaluator<ThenArgType, Device>::IsAligned & TensorEvaluator<ElseArgType, Device>::IsAligned,
|
IsAligned = TensorEvaluator<ThenArgType, Device>::IsAligned & TensorEvaluator<ElseArgType, Device>::IsAligned,
|
||||||
PacketAccess = TensorEvaluator<ThenArgType, Device>::PacketAccess & TensorEvaluator<ElseArgType, Device>::PacketAccess/* &
|
PacketAccess = TensorEvaluator<ThenArgType, Device>::PacketAccess & TensorEvaluator<ElseArgType, Device>::PacketAccess &
|
||||||
TensorEvaluator<IfArgType>::PacketAccess*/,
|
internal::packet_traits<Scalar>::HasBlend,
|
||||||
Layout = TensorEvaluator<IfArgType, Device>::Layout,
|
Layout = TensorEvaluator<IfArgType, Device>::Layout,
|
||||||
CoordAccess = false, // to be implemented
|
CoordAccess = false, // to be implemented
|
||||||
};
|
};
|
||||||
@ -373,7 +374,6 @@ struct TensorEvaluator<const TensorSelectOp<IfArgType, ThenArgType, ElseArgType>
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef typename XprType::Index Index;
|
typedef typename XprType::Index Index;
|
||||||
typedef typename XprType::Scalar Scalar;
|
|
||||||
typedef typename internal::traits<XprType>::Scalar CoeffReturnType;
|
typedef typename internal::traits<XprType>::Scalar CoeffReturnType;
|
||||||
typedef typename internal::traits<XprType>::Packet PacketReturnType;
|
typedef typename internal::traits<XprType>::Packet PacketReturnType;
|
||||||
typedef typename TensorEvaluator<IfArgType, Device>::Dimensions Dimensions;
|
typedef typename TensorEvaluator<IfArgType, Device>::Dimensions Dimensions;
|
||||||
@ -403,7 +403,7 @@ struct TensorEvaluator<const TensorSelectOp<IfArgType, ThenArgType, ElseArgType>
|
|||||||
template<int LoadMode>
|
template<int LoadMode>
|
||||||
EIGEN_DEVICE_FUNC PacketReturnType packet(Index index) const
|
EIGEN_DEVICE_FUNC PacketReturnType packet(Index index) const
|
||||||
{
|
{
|
||||||
static const int PacketSize = internal::unpacket_traits<PacketReturnType>::size;
|
const int PacketSize = internal::unpacket_traits<PacketReturnType>::size;
|
||||||
internal::Selector<PacketSize> select;
|
internal::Selector<PacketSize> select;
|
||||||
for (Index i = 0; i < PacketSize; ++i) {
|
for (Index i = 0; i < PacketSize; ++i) {
|
||||||
select.select[i] = m_condImpl.coeff(index+i);
|
select.select[i] = m_condImpl.coeff(index+i);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user