mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-10 02:39:03 +08:00
Added missing AVX intrinsics for fp16: in particular, implemented predux which is required by the matrix-vector code.
This commit is contained in:
parent
80b5133789
commit
d485d12c51
@ -492,6 +492,30 @@ template<> EIGEN_STRONG_INLINE void pscatter<Eigen::half, Packet8h>(Eigen::half*
|
|||||||
to[stride*7].x = aux[7].x;
|
to[stride*7].x = aux[7].x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> EIGEN_STRONG_INLINE Eigen::half predux<Packet8h>(const Packet8h& a) {
|
||||||
|
Packet8f af = half2float(a);
|
||||||
|
float reduced = predux<Packet8f>(af);
|
||||||
|
return Eigen::half(reduced);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<> EIGEN_STRONG_INLINE Eigen::half predux_max<Packet8h>(const Packet8h& a) {
|
||||||
|
Packet8f af = half2float(a);
|
||||||
|
float reduced = predux_max<Packet8f>(af);
|
||||||
|
return Eigen::half(reduced);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<> EIGEN_STRONG_INLINE Eigen::half predux_min<Packet8h>(const Packet8h& a) {
|
||||||
|
Packet8f af = half2float(a);
|
||||||
|
float reduced = predux_min<Packet8f>(af);
|
||||||
|
return Eigen::half(reduced);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<> EIGEN_STRONG_INLINE Eigen::half predux_mul<Packet8h>(const Packet8h& a) {
|
||||||
|
Packet8f af = half2float(a);
|
||||||
|
float reduced = predux_mul<Packet8f>(af);
|
||||||
|
return Eigen::half(reduced);
|
||||||
|
}
|
||||||
|
|
||||||
EIGEN_STRONG_INLINE void
|
EIGEN_STRONG_INLINE void
|
||||||
ptranspose(PacketBlock<Packet8h,8>& kernel) {
|
ptranspose(PacketBlock<Packet8h,8>& kernel) {
|
||||||
__m128i a = kernel.packet[0].x;
|
__m128i a = kernel.packet[0].x;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user