[petsc-users] Slepc: Computing first 4 smallest eigenvalues and eigenvectors of a large graph Laplacian

Barry Smith bsmith at mcs.anl.gov
Sat Mar 25 22:56:16 CDT 2017


> On Mar 25, 2017, at 10:48 PM, Bodhisatta Pramanik <bodhi91 at iastate.edu> wrote:
> 
> Try     -st_pc_type gamg:
> 
> Doing this with the existing eigensolver,linear solver : ./RunPart -eps_type jd -eps_nev 3 -st_ksp_type cg -st_ksp_rtol 0.001 -eps_tol 0.001 -st_pc_type gamg -eps_smallest_real        results in the following issues:-
> PETSC ERROR: Object is in wrong state
> PETSC ERROR: Must call EPSSolve() first: Parameter #1

   I cannot explain this. A different preconditioner with nothing else changed shouldn't cause any problem like this. Send all the output in the error message.
> 
> Try -st_pc_type sor
> 
> Doing this again with the existing eigensolver,linear solver returns me the eigenvalues but it takes more time. (106 seconds) for a Laplacian matrix of 200K size. The bjacobi was giving me the same eigenvalues but in 60 seconds. 

   Ok, this is reasonable.

> 
> 
> Run with -log_view to see where the computation is taking the most time: 

   Send the output from -log_view
> 
> EPSSolve and KSPSolve take the most time to finish computation. 
> 
> Since the matrix is symmetric are you using the sbaij format instead of AIJ?
> 
> I am using the sbaij format but with block size 1. I guess that is equivalent to the AIJ format itself. 

   Ok. Since it only stores half the matrix it requires less memory and because of the way it does the MatMult and MatSolve it can be a tiny bit faster.

   Barry

> 
> 
> Thanks,
> Bodhi
> 
> 
> 
> 
> On Sat, Mar 25, 2017 at 10:22 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> > On Mar 25, 2017, at 8:52 PM, Bodhisatta Pramanik <bodhi91 at iastate.edu> wrote:
> >
> > Hi,
> >
> > I apologize for the slepc question. I could not find any user lists so I'm hoping someone on here might be able to offer some guidance.
> >
> > Problem Definition:
> > I am working on a graph partitioning problem. I have the laplacian of a large graph(500,000 nodes) and am interested in extracting its global information in order to find good partitioning. An approach is to compute the first few(4-5) eigenvalues and use that information to formulate the partition algorithm.
> >
> > I am leveraging the EPS solvers of the Slepc library. It appears that the Jacobi-davidson eigen solver gives me the eigenvalues in the shortest period of time compared to others (Krylov-Schur, Rayleigh quotient, Lanczos, etc). I use this eigensolver with the conjugate gradient linear solver and the block-jacobi preconditioner. So this is what I am basically passing through the command line:
> >
> > ./RunPart -eps_type jd -eps_nev 4 -st_ksp_type cg -st_ksp_rtol 0.001 -eps_tol 0.001 -st_pc_type bjacobi -eps_smallest_real
> 
>   Try     -st_pc_type gamg
> 
>    One one process default bjacobi results in ILU which is not a great preconditioner.
> 
>   Also try -st_pc_type sor
> 
> >
> > Question:
> > The time it takes to compute the first 4-5 eigenvectors of a matrix of size (200k) is near about 60 seconds. CPU config: Intel Xeon 2GHz. I am using a single processor to run my code. Is there any way I can gain major speedup than what I am getting?
> 
>   Run with -log_view to see where the computation is taking the most time.
> 
> >
> > Is it possible to obtain the eigenvalues inside 10-15 seconds of such huge matrices even if I do not use multiple processor??
> >
> > Can someone provide me with some valuable guidance??
> 
>    Since the matrix is symmetric are you using the sbaij format instead of AIJ?
> 
> >
> > Thanks,
> > Bodhi
> 
> 
> 
> 
> -- 
> Bodhisatta Pramanik,
> Graduate Student,
> Department of Electrical and Computer Engineering,
> 301 Durham,
> Iowa State University,
> Ames,Iowa 50011,
> bodhi91 at iastate.edu
> 515-735-6300



More information about the petsc-users mailing list