Re: [eigen] about JacobiSVD's options |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] about JacobiSVD's options
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Thu, 17 Sep 2009 09:05:24 -0400
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=IHfdtUc4DEbd58VbrN/POuvdfb8chZpB1kRBW0902vA=; b=N+tWJpFf4136dbXWeg7/Yy2T9XHM8syg2XU+shQluA/SV1VUrEing0A8DLJ1lsCmRt 1koG98fobB6EMCHzLf1i1LtThjTNKQNhuvgv4I8SVpgRLFx24BY7e2ILR90k83QCqzF9 8k4ufaAMuwvujHgJra5dybzB95UR2YZNPipyc=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=nM+7A4FN8MhoTNx8iiIVsTx1e7tTu8WF1KhVS09BOoadL2z6BzEQLyA9BzJUlkprrT rKyA2OWeUj3k4f3B5r17GjChrv8bRci7AMx9BqRwPisq6CleRrDchSmbglujVvtV8AVk WpyQvI5xfX0Uf6/076zj3IyLkObeexzJdggIY=
2009/9/17 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>:
> On Wed, Sep 16, 2009 at 2:57 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
>> 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...
>
> well, that depends, because if someone use both non square and square
> then the code size increase (+4k per instantiation of JacobiSVD)
+4k in the case of more intensive usage isn't a big deal, compared to
+ dozens of k for the simplest use case.
(By the way my numbers were for non-stripped binary, stripping cuts
them in half)
There are a lot of users out there who will use only one SVD, and they
are more likely to care about code size than the one who use multiple
SVDs.
>
>> 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?
>
> yes the AtLeastAsMany*As* are definitely useless and they can only
> increase the code size.
OK.
> One problem is that the SkipU/SkipV options are mixed with the
> Square/NonSquare one, and so if someone use SkipU then he loses the
> automatic computation of Square/NonSquare for fixed sizes,
No, I disagree, unless you saw a bug that I don't see in my code?
> and so he
> would have to duplicate that piece of code... So if you really really
> want to keep Square, then it should be a separate template parameter.
Again, I thought that I had implemented correctly the bit-field idea,
you seem to have seen a bug?
> oh! I've just got an idea: what about making the Square/NonSquare
> option a true feature ? The idea is to template JacobiSVD by a
> preconditioner type which would allow the user to choose between:
>
> - Identity (for square matrix)
> - FullPivotingHouseholderQR
> - ColPivotingHouseholderQR
> - etc.
>
> Currently there is no big advantage of using ColPivotingHouseholderQR,
> but once we'll have a blocked version of it, performance wise, it will
> be very relevant to offer that feature. What do you think ?
Indeed, I was thinking about letting the user choose the QR preconditioner.
I was thinking of adding it as an additional template template parameter.
But your idea (of letting it replace the Square/... option) sounds
good, I need to think but that seems to work, thanks!
Benoit