Re: [eigen] array functionality...

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


I started looking into the performance differences between MSVC and GCC.

First thing I stumbled upon is the alignment handling in

struct ei_redux_impl<Func, Derived, LinearVectorizedTraversal,
NoUnrolling>::run(...)

In the already aligned path, the alignment is double checked via the
alignment enum. In the example I previously attached, this is always
false for method_a, no matter whether the small Array dimension is
fixed, e.g. to 44 or whether it is dynamic. I have to say that I
changed the size on purpose such that each column is aligned.

But even when the alignment enum were true, why do we at all need to
check in the aligned path for aligned addresses? Why not use

PacketScalar packet_res = mat.template packet<Aligned>(alignedStart);
for(int index = alignedStart + packetSize; index < alignedEnd; index
+= packetSize)
  packet_res = func.packetOp(packet_res, mat.template packet<Aligned>(index));

Regards,
Hauke



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