Re: [eigen] std::complex vectorization braindump

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Benoit Jacob wrote:
[snip]

*** General problems ***

vectorizing std::complex breaks at least 2 assumptions that Eigen is
currently making:
1) that vectorized paths can assume real numbers
 ---> For example in Dot.h the vectorized paths don't bother conjugating
2) that PacketSize==1 means no vectorization
 ---> This breaks for complex<double>
[snip]
5) The puzzle: What to do about ei_pabs() ? In the same vein it would
be nice to introduce a ei_pabs2()... but we need to solve the
question: what should they return, a half of a packet of reals???


Is a packet limited to 128 bits long?
If longer is possible, this may have some advantages:
1. PacketSize remains > 1 ( minor benefit to avoid short-term code scrub)
2. Unrolls some loops. (see below)
3. The complex-to-real problem (e.g. abs2) goes away

I've found a certain amount of loop unrolling very beneficial to speed, even with SIMD. e.g. loading 4 SIMD registers, working on them, then storing the results can be much faster than doing them one at a time.


-- Mark




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/