Re: [eigen] vectorization and ABI

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


Hi,

sorry, I didn't explain my idea well enough. I think that it is quick to 
implement, does not lengthen compilation, does not require macros, and adds 
only 1 line of code all in all.

*** what we currently do ****

in util/Constants.h :

#ifdef EIGEN_VECTORIZE
const unsigned int PacketAccessBit = 0x8;
#else
const unsigned int PacketAccessBit = 0x0;
#endif

in other files:

Flags = PacketAccessBit | SomeMoreBits;

...

if(Flags & PacketAccessBit)

...


*** what I propose instead ***

in util/Constants.h :

const unsigned int PacketAccessBit = 0x8;

#ifdef EIGEN_VECTORIZE
const unsigned int ActualPacketAccess = PacketAccessBit ;
#else
const unsigned int PacketAccessBit = 0x0;
#endif

in other files:

// just replace PacketAccessBit by ActualPacketAccess and you're done

Flags = ActualPacketAccess | SomeMoreBits;

...

if(Flags & ActualPacketAccess)

...



***

That's it. Do you like it? As you can see it's just search and replace plus 
one line to add in util/Constants.h.

Benoit

On Thursday 03 July 2008 10:22:11 Gael Guennebaud wrote:
> Hi,
>
> I'm not sure to understand what you wanna do with ActualPacketAccess,
> but I see at least two other workarounds:
>
> - using preprocessor #if/#endif directives in Assign.h (and everywhere
> we enable vectorization)
>
> - using a macro or a meta structure to get the actual value of
> Flags&PacketAccessBit...for instance:
> instead for writing : Derived::Flags&PacketAccessBit you would write:
>   EI_HAS_PACKET_ACCESS(Derived)
>
> and currently  I'm in favor of such a macro: easy to use, no
> compilation time penalty.
>
> cheers,
> gael.
>
> On Thu, Jul 3, 2008 at 8:57 AM, Benoît Jacob <jacob@xxxxxxxxxxxxxxx> wrote:
> > Hi,
> >
> > I think again that we need to make sure that enabling/disabling
> > vectorization does not affect the ABI. The use case is for apps who want
> > to make a runtime switch for vectorization. They would compile the same
> > file a.cpp with and without -msse2. If a.cpp contains functions that take
> > (refs to) Eigen matrices as argument, this requires the type of Eigen
> > matrices to be independent of whether -msse2 is used. This is currently
> > not the case since PacketAccessBit is set to 0 unless vectorization is
> > enabled. So I think we must change that. I understand that setting
> > PacketAccessBit to 0 was a nice convenience to quickly ensure that
> > vectorized paths are never used without vectorization support, but we can
> > do without... so I'm for setting PacketAccessBit regardless of the
> > vectorization switch; and we could have another constant
> > ActualPacketAccess that is the same thing that is currently called
> > PacketAccessBit. What do you think? I know we discussed that before but I
> > don't remember clearly the outcome.
> >
> > Cheers,
> >
> > Benoit


Attachment: signature.asc
Description: This is a digitally signed message part.



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