Re: [eigen] new API for Cholmod

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


Yes, I think including ordering routines is quite important.
For any significant size problem, ordering is almost always
required to avoid very long computational times.

I've thought a bit about the ordering issue recently. Here are
a couple of things you might want to consider.

1. The ordering algorithm in a particular sparse matrix package
    is likely to be useful with other sparse matrix factoring routines (i.e.
    the CSparse AMD would be useful with MUMPS or SPOOLES, etc.)
    The Metis ordering package is often very effective and is distributed or
    recommended in several sparse matrix packages-- probably all
    sparse backends would find this useful.

2. Users who are particularly interested in performance, often like to
    experiment with different ordering algorithms to find the optimum
    one for their problem.

So its probably better to allow the user to separate the ordering step
from the analysis and factorization steps.

>This still require some work to make it compatible with any Eigen's
>sparse representation (SparseMatrix, DynamicSparseMatrix, row-column
>major, with only the lower, or upper or both triangular part etc.).

Yes, I can see how this would be quite a bit of work. Did you consider
just stopping with an error message if the matrix is not a SparseMatrix
in the correct form-- the upper triangle for CSparse? As a user I don't
think that would be so objectionable. I could then choose to convert the
matrix to the correct format, myself, possibly avoiding the memory cost
of having two copies of the matrix.

On Wed, Nov 3, 2010 at 10:16 AM, Gael Guennebaud <gael.guennebaud@xxxxxxxxx> wrote:
Hi,

regarding CSparse, since it is LGPL, last week, I've started a port of
its AMD ordering routine. This is the most interesting routine to port
since writing the decomposition on top of it is relatively easy.

So basically, I finally have a usable LDLt decomposition which
automatically reduce the fill-in and does not require any external
library.

This still require some work to make it compatible with any Eigen's
sparse representation (SparseMatrix, DynamicSparseMatrix, row-column
major, with only the lower, or upper or both triangular part etc.).

gael

On Sun, Oct 31, 2010 at 5:46 PM, Bill Greene <w.h.greene@xxxxxxxxx> wrote:
>>I'd be interested in CSparse for instance :
>>The good news is that it is CCS, but the Eigen doc[0] warns about a
>> difference:
>>"unlike several other sparse libraries (e.g., CSparse), the coefficients of
>> our CCS matrices are always sorted. " Am I right to believe that this won't
>> be a stumbling block ?
>
> There is no problem extracting the internal arrays of an Eigen CCS
> SparseMatrix and passing them to the CSparse routines. CSparse does not
> require the columns
> to be sorted by row-index but is quite happy to accept sparse matrices
> stored this way.
>
> CSparse (like CHOLMOD) *does* require the sparse matrices to be stored as
> CCS (rather than CRS). I downloaded the 10/29 zip file for Eigen3 and did
> not see in the
> code a test to make sure the matrix is CCS-- but I could easily have missed
> that.
>
> CSparse (unlike CHOLMOD) does not accept a sparse matrix with only the
> coefficients in the lower triangle stored.
> So something like
> Eigen::CSparseDecomposition<Eigen::SparseMatrix<double>,Eigen::Lower> chol;
> would need to be rejected.
>
> Which brings up a design question. Should the SparseMatrix class itself
> allow the user to set and check the characteristics of the matrix-- i.e.
> symmetric-lower,
> symmetric-upper, unsymmetric? I know the dense matrix classes treat these
> characteristics as a "view" of the matrix. I'm sure this issue has been
> discussed
> previously but I haven't seen this discussion, myself.
>
> Here is one other small observation about Eigen::CholmodDecomposition(). The
> design lets you extract the success or failure of the last method via in the
> info()
> method. Internally, the class maintains m_analysisIsOk and
> m_factorizationIsOk values. Shouldn't the user be able to retrieve these
> anytime also?
>
> Bill Greene
>
>
> On Fri, Oct 29, 2010 at 12:23 PM,  <bernard.hugueney@xxxxxxxxxx> wrote:
>>
>> Hi,
>>>
>>> i,
>>>
>>> I've started to rework our sparse solvers/backends with Cholmod. The
>>> old API is still available.
>>> The first difference is that there is no SparssLLT or SparseLDLT or so
>>> base classes which was really confusing to use.
>>> Instead, you directly use the relevant wrapper class,
>>> CholmodDecomposition<MatrixType,UpLo>:
>>> [snip]
>>> You can also configure the underlying decomposition with:
>>> chol.setMode(mode);
>>> [snip]
>>> It is not that much changes but I think this approach is much cleaner
>>> and easier to use.
>>> I plane to write all solvers/wrappers using the same model, so it is
>>> perfect time to give your opinion on what would be the best API for
>>> them. The constraint is that we must be as close as possible to the
>>> dense API, but it is perfectly reasonable to add convenient methods
>>> with more runtime facilities....
>>
>> Cool, this is great news to me !
>> As previously discussed, I believe that the runtime of most (all ?)
>>  member function calls on sparse matrices and the lack of compile-time
>>  unrolling through fixed size makes static polymorphism pointless for
>>  such use cases, so I'll be glad to get the ease of use of runtime
>>  polymorphism instead.
>>
>> Wrt API, I think it should be possible to closely follow the dense API
>> with the only addition of your setMode(XXX) with XXX being the run-time
>> equivalent of the compile-time template parameters.
>>
>>> Then we could imagine to have a meta solver built on top of them with
>>> runtime registration of backends, priority rules, etc. but that's
>>> another story.
>>
>> The main difference is that the availability of backends could be checked
>> at runtime instead of compile-time. That would be an asset when
>> shipping binaries using system libraries (e.g. libsparsesuite,
>> libumfpack on Debian). Do you have plans/ideas to support this ?
>>
>> Speaking about backends, I am wondering how hard is it to write a new
>> wrapper.
>> I'd be interested in CSparse for instance :
>> The good news is that it is CCS, but the Eigen doc[0] warns about a
>> difference:
>> "unlike several other sparse libraries (e.g., CSparse), the coefficients
>> of
>> our CCS matrices are always sorted. " Am I right to believe that this
>> won't
>> be a stumbling block ?
>>
>> One of my reasons to be interested by CSparse is that the LU decomposition
>> is rank revealing : is there another way to compute the rank with
>> currently
>> supported Eigen backends ?
>>
>> (I would also be insterested in SPRSBLKLLT)
>>
>> On the subject of backend choice, maybe it would be useful to add a few
>> references (I not qualified to evaluated the, but I found [1] anf [2] to
>> be
>> interesting.), in the doc (maybe @[3]).
>>
>> Kind regards,
>>
>> Bernard
>> [0] http://eigen.tuxfamily.org/index.php?title=SparseMatrix#Current_state
>> [1] http://www.cise.ufl.edu/research/sparse/codes/codes..pdf
>> [2] ftp://ftp.numerical.rl.ac.uk/pub/reports/ghsRAL200505.pdf
>> [3]
>>
>> http://eigen.tuxfamily.org/dox-devel/TutorialSparse.html#TutorialSparseDirectSolvers
>>
>>
>>
>
>





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