Memory requirements of lobpcg: Matlab and hypre implementation differences
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hi,
until recently i used lobpcg.m from http://www.mathworks.com/matlabcentral/fileexchange/48-lobpcg-m to solve an eigenvalue problem A x = lambda*x. A is large, symmetric, complex and sparse. To compute several eigenpairs (lambda, x) inside the spectrum i use the folded spectrum method: folding the original matrix around the desired value AA = ( A -value)^2, solve the resulting eigenproblem for AA and backtransform the eigenvalues.
This worked fine until i added some small modifications to the off-diagonal entries of the original matrix A. These modifications resulted in very poor convergence.
To solve this problem i call lobpcg via mpirun in the ij-interface of hypre, where i can use the BoomerAMG preconditioner. With this the convergence is okay again, but:
Compared to the lobpcg.m-version, the memory requirements using hypre are several times higher (lets say by a factor of 4 or 5 approximately). In both cases i use the same number of processors. Of course, with mpirun several small parts of the matrix to diagonalize are additionally stored locally, but this is not the origin of the high memory requirements.
Maybe somebody can help me with this.
Thanks
0 comentarios
Respuesta aceptada
Andrew Knyazev
el 15 de Jun. de 2011
The lobpcg code in hypre is very similar to the MATLAB code, and uses about the same memory. The BoomerAMG preconditioner requires extra memory. You can check this by tracing the memory use while running the code and looking at the screen output. BoomerAMG preconditioner is constructed first. The lobpcg starts when you see the actual screen output from the iterations.
You can alternatively check this by running the lobpcg in hypre without the BoomerAMG preconditioner - these runs should be very similar to MATLAB runs in all respects.
You may be able to reduce the memory use in BoomerAMG preconditioner without slowing it down too much, by using some non-default options. The BoomerAMG preconditioner is a part of hypre, which is not related to , although can be used by, lobpcg. Please contact hypre technical support if you have any questions concerning the BoomerAMG preconditioner.
One thing surprises me in your post: "A is complex" - to my recollection, hypre currently does not support complex arithmetic.
0 comentarios
Más respuestas (6)
Andrew Knyazev
el 24 de Jul. de 2011
Please try adding the following options to the ij driver: "-hmis -agg_nl 1 -interptype 6 -Pmx 4" These are proposed by a member of the hypre team. They make the preconditioner a bit worse, but, at the same time, not so memory-hungry.
I am still uneasy about your use of a complex matrix in the ij driver. You may want to send a email to hypre support to ask about it. If you do, please let me know their answer.
Since you actually use BLOPEX in hypre, rather then MATLAB, you may want to post your further comments at our BLOPEX site at http://code.google.com/p/blopex/issues/list
0 comentarios
Andrew Knyazev
el 31 de Jul. de 2011
The development version of SLEPc incorporates BLOPEX now, see http://code.google.com/p/blopex/wiki/PETScInstallDevel so that you can easily give it a try (without preconditioning). If you do, please let me know how it runs. We have not yet tested it for complex matrices.
0 comentarios
Andrew Knyazev
el 1 de Ag. de 2011
Have you actually tried the development version of SLEPc? The one that one gets by
If so, could you please be very specific and report the complete setup and the error message?
0 comentarios
Ver también
Categorías
Más información sobre Audio Processing Algorithm Design en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!