mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-09-23 06:43:13 +08:00
Add MMA and performance improvements for VSX in GEMV for PowerPC.
This commit is contained in:
parent
d1bf056394
commit
708fd6d136
@ -2226,6 +2226,8 @@ EIGEN_STRONG_INLINE void gemm_complex(const DataMapper& res, const LhsScalar* bl
|
|||||||
#undef advanceCols
|
#undef advanceCols
|
||||||
#undef advanceRows
|
#undef advanceRows
|
||||||
|
|
||||||
|
#include "MatrixVectorProduct.h"
|
||||||
|
|
||||||
/************************************
|
/************************************
|
||||||
* ppc64le template specializations *
|
* ppc64le template specializations *
|
||||||
* **********************************/
|
* **********************************/
|
||||||
|
2319
Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.h
Normal file
2319
Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -87,7 +87,7 @@ public:
|
|||||||
eigen_assert(incr==1);
|
eigen_assert(incr==1);
|
||||||
}
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(int i) const {
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i) const {
|
||||||
internal::prefetch(&operator()(i));
|
internal::prefetch(&operator()(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,6 +100,11 @@ public:
|
|||||||
return ploadt<PacketType, AlignmentType>(m_data + i);
|
return ploadt<PacketType, AlignmentType>(m_data + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename PacketType, int AlignmentT>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType load(Index i) const {
|
||||||
|
return ploadt<PacketType, AlignmentT>(m_data + i);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename PacketType>
|
template<typename PacketType>
|
||||||
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType &p) const {
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType &p) const {
|
||||||
pstoret<Scalar, PacketType, AlignmentType>(m_data + i, p);
|
pstoret<Scalar, PacketType, AlignmentType>(m_data + i, p);
|
||||||
@ -189,6 +194,9 @@ public:
|
|||||||
return VectorMapper(&operator()(i, j));
|
return VectorMapper(&operator()(i, j));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i, Index j) const {
|
||||||
|
internal::prefetch(&operator()(i, j));
|
||||||
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
|
EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
|
||||||
@ -284,6 +292,10 @@ public:
|
|||||||
return LinearMapper(&operator()(i, j), m_incr.value());
|
return LinearMapper(&operator()(i, j), m_incr.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i, Index j) const {
|
||||||
|
internal::prefetch(&operator()(i, j));
|
||||||
|
}
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
|
EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
|
||||||
return m_data[StorageOrder==RowMajor ? j*m_incr.value() + i*m_stride : i*m_incr.value() + j*m_stride];
|
return m_data[StorageOrder==RowMajor ? j*m_incr.value() + i*m_stride : i*m_incr.value() + j*m_stride];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user