Re: [eigen] about JacobiSVD's options

[ Thread Index | Date Index | More Archives ]

2009/9/16 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>:
> ok ok, but I still think it is a bit unfortunate to clutter the API
> for compilation time only.
> Actually, note that if the advanced user really want to speed up his
> compilation time, the best is to explicitly instantiate the few
> operations he need in a separate file (e.g., JacobiSVD<MatrixXd>), and
> then the compilation of JacobiSVD<MatrixXd> will take 0sec. I agree
> this is a little more work than just adding ",Square", but this
> solution works for all classes and global functions and it brings much
> more speed !

But it doesn't address the issue of code size...

Does it really clutter the API to have an optional template parameter here?
It's optional, meaning that the user who doesn't care can just do

JacobiSVD<MatrixXf> svd(m);

Would you prefer this being split in a separate class,
SquareJacobiSVD? Or would you prefer it being a separate
constructor/compute() method, like this,

JacobiSVD<MatrixXf> svd(m); // don't assume square, compile QR
JacobiSVD<MatrixXf> svd(m, IsSquare); // assume square. this ctor
takes a IsSquare_t argument

Or would it be more acceptable if we had just Square and discarded the
AtLeastAsManyRowsAsCols which I agree isn't very useful?


> gael.
> On Wed, Sep 16, 2009 at 2:11 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
>> ok, last email.
>> The symbol tables look fine, really it seems that it's just that
>> Householder QR is inherently more complicated code than square jacobi
>> SVD.
>> After all, the latter is just a 2x2 kernel and the code to apply
>> Jacobi rotations, that's about it.
>> This would confirm my theory that it's important to give the user an
>> option to specify "square" at compile time :)
>> Benoit
>> 2009/9/16 Benoit Jacob <jacob.benoit.1@xxxxxxxxx>:
>>> 2009/9/16 Benoit Jacob <jacob.benoit.1@xxxxxxxxx>:
>>>> See attached files, if you can make sense of that... i'm puzzled.
>>>> The matrix-vector product symbol itself takes 4 kilobytes, so it's not
>>>> explaining all the difference.
>>> Wow, i just found out about nm --demangle...
>>> === 23:53:05 ~$ nm --print-size --size-sort --demangle a | grep Eigen
>>> | tee symbols_a | wc -l
>>> 118
>>> === 23:53:27 ~$ nm --print-size --size-sort --demangle a_square | grep
>>> Eigen | tee symbols_a_square | wc -l
>>> 38
>>> see new attached files !
>>> Benoit

Mail converted by MHonArc 2.6.19+