Re: [eigen] Optimization for special complex operations

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


On Tue, Aug 17, 2010 at 2:01 PM, Carlos Becker <carlosbecker@xxxxxxxxx> wrote:
> Gael: Yes you are right, I forgot about those. So I believe that something
> like matrix.colwise().normalized() should not be too hard to achieve.

yes, indeed.

> I was also thinking about what Benoit said regarding Matrix<ArrayXf, 3, 1>.
> I am wondering which are the true advantages of doing over defining a normal
> MatrixXf, or better, a fixed size Matrix<rows,cols,float>.

Such a layout (Matrix<ArrayXf, 3, 1>) is not very convenient because
it does not allow you to access to a given vector. It is also quite
limited with respect to the set of operations you can perform. For
instance you cannot do batch cross products, apply transformations,
etc. So I think a Matrix<float,3,Dynamic,RowMajor> is more
appropriate.

> Is there an
> especialization for a Matrix containing a single-dimensional Array?

Not at all.

Gael.

>
> Thanks
>
> On Tue, Aug 17, 2010 at 9:22 AM, Gael Guennebaud <gael.guennebaud@xxxxxxxxx>
> wrote:
>>
>> On Mon, Aug 16, 2010 at 5:43 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
>> wrote:
>> > 2010/8/16 Carlos Becker <carlosbecker@xxxxxxxxx>:
>> >>
>> >> On Mon, Aug 16, 2010 at 2:34 PM, Benoit Jacob
>> >> <jacob.benoit.1@xxxxxxxxx>
>> >> wrote:
>> >>>
>> >>> 2010/8/16 Carlos Becker <carlosbecker@xxxxxxxxx>:
>> >>> > Hi everyone again. Lately I've been using Eigen with complex numbers
>> >>> > to
>> >>> > calculate things such as calculating the maximum of the real part or
>> >>> > imaginary part of a certain vector. I suppose that trying to take
>> >>> > the
>> >>> > real
>> >>> > part and then use maxCoeff() or minCoeff() would create a possible
>> >>> > unnecessary temporary.
>> >>>
>> >>> No, it wouldn't :-)
>> >>
>> >> Ok good, maybe 'temporary' is not exactly what I wanted to say. I mean
>> >> that
>> >> maybe there are vectorized ways to do certain stuff and special
>> >> implementations could be provided for such operations.
>> >>
>> >>>
>> >>> > Another thing is to be able to do something like:
>> >>> >
>> >>> > MatrixXf nn,xx;
>> >>> > xx = nn.colwise().normalized();
>> >>>
>> >>> Hm. If we start going that route, won't we end up offering every
>> >>> possible vector operation as colwise() operation?
>> >>>
>> >> .....
>> >>>
>> >>> The biggest reason not to do it now is that it really isn't necessary
>> >>> to release Eigen 3.0 .... ;-)
>> >>
>> >>
>> >> Yes I understand. I think vector-wise operations could be very
>> >> important,
>> >> but they would probably require a bit of discussion before implementing
>> >> them
>> >> (ie: should we keep .colwise(), should we use .vectorwise(), in the
>> >> case
>> >> some names for the reductions and vector-wise operations are the same).
>> >> I
>> >> believe these kind of operations would be very useful since many times
>> >> a set
>> >> of vectors is stored in a matrix, so this way the user could benefit
>> >> from
>> >> extra performance.
>> >
>> > But the thing is, for this kind of use case, the much better approach
>> > is to use a matrix-of-arrays:
>> >
>> > Matrix<ArrayXf, 3, 1>
>> >
>> > then all operations are automatically supported and vectorized.
>> >
>> > The problem is that right now there is an inefficiency problem as we
>> > create useless temporaries with Scalar=Array. This is the problem that
>> > is the most worth fixing.
>>
>> agree.
>>
>>
>> To Carlos: note that colwise() and rowwise() returns a VectorwiseOp
>> proxy and are not limited to reduction only... For instance there are
>> functions which are not about reduction at all: +, -, cross,
>> hnormalized (homogeneous normalization), etc.
>>
>> gael
>>
>> >
>> > Benoit
>> >
>> >> I could try some prototypes to see if I can make it work. I designing
>> >> something like .vectorwise() could be fine.
>> >> Carlos
>> >
>> >
>> >
>>
>>
>
>



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