mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Introducing "vectorized" byte on unpacket_traits structs
This is a preparation to a change on gebp_traits, where a new template argument will be introduced to dictate the packet size, so it won't be bound to the current/max packet size only anymore. By having packet types defined early on gebp_traits, one has now to act on packet types, not scalars anymore, for the enum values defined on that class. One approach for reaching the vectorizable/size properties one needs there could be getting the packet's scalar again with unpacket_traits<>, then the size/Vectorizable enum entries from packet_traits<>. It turns out guards like "#ifndef EIGEN_VECTORIZE_AVX512" at AVX/PacketMath.h will hide smaller packet variations of packet_traits<> for some types (and it makes sense to keep that). In other words, one can't go back to the scalar and create a new PacketType, as this will always lead to the maximum packet type for the architecture. The less costly/invasive solution for that, thus, is to add the vectorizable info on every unpacket_traits struct as well.
This commit is contained in:
@@ -117,14 +117,14 @@ struct packet_traits<int32_t> : default_packet_traits {
|
||||
template <>
|
||||
struct unpacket_traits<Packet4f> {
|
||||
typedef float type;
|
||||
enum { size = 4, alignment = Aligned16 };
|
||||
enum { size = 4, alignment = Aligned16, vectorizable=true };
|
||||
typedef Packet4f half;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct unpacket_traits<Packet4i> {
|
||||
typedef int32_t type;
|
||||
enum { size = 4, alignment = Aligned16 };
|
||||
enum { size = 4, alignment = Aligned16, vectorizable=true };
|
||||
typedef Packet4i half;
|
||||
};
|
||||
|
||||
@@ -925,7 +925,7 @@ struct packet_traits<double> : default_packet_traits {
|
||||
template <>
|
||||
struct unpacket_traits<Packet2d> {
|
||||
typedef double type;
|
||||
enum { size = 2, alignment = Aligned16 };
|
||||
enum { size = 2, alignment = Aligned16, vectorizable=true };
|
||||
typedef Packet2d half;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user