Re: [eigen] about changeset 6eb14e380

[ Thread Index | Date Index | More Archives ]

2010/8/19 joel falcou <joel.falcou@xxxxxx>
On 19/08/10 13:03, Gael Guennebaud wrote:
To make things more complicated we could also think about how to
support packet of different sizes for the same scalar type. Indeed,
both the NEON (for ARM) and the future AVX engines support packet of
different sizes. 2 or 4 floats for NEON, and 4 or 8 floats for AVX.
For dynamic sized objects it is pretty clear that supporting largest
packets is enough. However, for small fixed sized objects it be very
welcome to be able to instantiate packet types according to the
context. For instance, if AVX is enabled, we still want to able to use
packets of 4 floats to vectorize Vector4 and Matrix4. This is very
important for what you know...
It is not.

Gael was just saying that it's important to offer vectorization for small fixed-size objects, such as Vector4f, which means that we must be able to use 16 byte packets instead of 32 byte packets in some circumstances.

Earlier today on IRC, we discussed replacing the AlignedBit flag by a new, separate enum value Alignment. Heap allocated arrays would use a generously large alignment, e.g. cache line boundary alignment. Static arrays would use the highest alignment that is useful for SIMD, doesn't increase their sizeof, and is <= some limit that the user could manually set if he really knows what he's doing (setting such a limit would be ABI incompatible). At computation-time, we'd then check the value of Alignment and emit SIMD code accordingly.


In nt2, the simd packet class is native<T,X> where T is the scalar
type and X the extension tag. Then functions knwo which packet they are allowed
to mix and the configuration include w/e tag needed.

Mail converted by MHonArc 2.6.19+