Re: [eigen] Student contribution

[ Thread Index | Date Index | More Archives ]


2013/6/14 BRUN Gauthier <brunga@xxxxxxxxxxxxxx>


At the moment, the two first steps of our algorithm are working well on dynamic defined matrices of double and float.
Sadly, it still doesn't work for matrices of complex.

For matrices of int, it returns a matrix of zero in order to match the behaviour of jacobi algorithm (although using SVD on such matrices is irrelevant)

That's surprising! I've been away for a while, but I thought that the natural thing to do for SVD on integer matrices would be to prevent that with a static_assert, so that that would give a compilation error.

We are sorry, we couldn't finish the third and last step, but our algorithm in its current state is already significantly increasing the performances of the singular value decomposition on big matrices (more than around 200 rows and columns)
Thus we would like to submit the two first parts, the tests and the benchmark to you in order to validate an important step in our school project.
Indeed, although the work is not entirely finished, we believe that it can be useful to Eigen in its current state.

Despite the fact that our main work is supposed to be finished today, we can still work on it until next wednesday, so we will be able to make modifications on our code if you ask for it. Our final code has not been commited yet on our bitbucket

Performance analysis: We joined to this mail graphs of the performances analysis
                      (in red JacobiSVD times and in blue BDCSVD times)
        - Measures are not accurate since we run each test only one time
        - Time was measure with ctime (clock_gettime REALTIME) on the compute part of the algorithm

Why REALTIME? It is more usual, for performance measurements, to measure per-process (or per-thread, in single-threaded code) CPU time, which clock_gettime allows.
        - We compiled with " icpc -O3 -xhost "
        - The test machine is an Intel Ivy Bridge (i5 3570k)

Other important pieces of information to reproduce your results include compiler version and 32/64 bit code generation.

On the graph largMatrixTime we can suppose our version improve the complexity of the SVD, but on the largeMatrixRatio, we can noticed that the performance boost is stuck at x1,7. This because we still use a JacobiSVD in the third part, instead of using a SVD algorithm of the special matrix.

I think that actually implementing the SVD code (without resorting to JacobiSVD), and supporting complex matrices, should be the two main missing prerequisites to consider including this in Eigen.


Best regards,

Team GL27
Jean Ceccato, Pierre Zoppitelli, Gauthier Brun, Nicolas Carre

Mail converted by MHonArc 2.6.19+