[petsc-users] [SLEPc] Performance of Krylov-Schur with MUMPS-based shift-and-invert
Thibaut Appel
t.appel17 at imperial.ac.uk
Mon Feb 19 12:15:57 CST 2018
Good afternoon,
I am solving generalized eigenvalue problems {Ax = omegaBx} in complex
arithmetic, where A is non-hermitian and B is singular. I think the only
way to get round the singularity is to employ a shift-and-invert method,
where I am using MUMPS to invert the shifted matrix.
I am using the Fortran interface of PETSc 3.8.3 and SLEPc 3.8.2 where my
./configure line was
./configure --with-fortran-kernels=1 --with-scalar-type=complex
--with-blaslapack-dir=/home/linuxbrew/.linuxbrew/opt/openblas
--PETSC_ARCH=cplx_dble_optim
--with-cmake-dir=/home/linuxbrew/.linuxbrew/opt/cmake
--with-mpi-dir=/home/linuxbrew/.linuxbrew/opt/openmpi --with-debugging=0
--download-scalapack --download-mumps --COPTFLAGS="-O3 -march=native"
--CXXOPTFLAGS="-O3 -march=native" --FOPTFLAGS="-O3 -march=native"
My matrices A and B are assembled correctly in parallel and my
preallocation is quasi-optimal in the sense that I don't have any called
to mallocs but I may overestimate the required memory for some rows of
the matrices. Here is how I setup the EPS problem and solve:
CALL EPSSetProblemType(eps,EPS_GNHEP,ierr)
CALL EPSSetOperators(eps,MatA,MatB,ierr)
CALL EPSSetType(eps,EPSKRYLOVSCHUR,ierr)
CALL EPSSetDimensions(eps,nev,ncv,PETSC_DECIDE,ierr)
CALL EPSSetTolerances(eps,tol_ev,PETSC_DECIDE,ierr)
CALL EPSSetFromOptions(eps,ierr)
CALL EPSSetTarget(eps,shift,ierr)
CALL EPSSetWhichEigenpairs(eps,EPS_TARGET_MAGNITUDE,ierr)
CALL EPSGetST(eps,st,ierr)
CALL STGetKSP(st,ksp,ierr)
CALL KSPGetPC(ksp,pc,ierr)
CALL STSetType(st,STSINVERT,ierr)
CALL KSPSetType(ksp,KSPPREONLY,ierr)
CALL PCSetType(pc,PCLU,ierr)
CALL PCFactorSetMatSolverPackage(pc,MATSOLVERMUMPS,ierr)
CALL PCSetFromOptions(pc,ierr)
CALL EPSSolve(eps,ierr)
CALL EPSGetIterationNumber(eps,iter,ierr)
CALL EPSGetConverged(eps,nev_conv,ierr)
- Using one MPI process, it takes 1 hour and 22 minutes to retrieve
250 eigenvalues with a Krylov subspace of size 500, a tolerance of
10^-12 when the leading dimension of the matrices is 405000. My matrix A
has 98,415,000 non-zero elements and B has 1,215,000 non zero elements.
Would you be shocked by that computation time? I would have expected
something much lower given the values of nev and ncv I have but could be
completely wrong in my understanding of the Krylov-Schur method.
- My goal is speed and reliability. Is there anything you notice in
my EPS solver that could be improved or corrected? I remember an
exchange with Jose E. Roman where he said that the parameters of MUMPS
are not worth being changed, however I notice some people play with the
-mat_mumps_cntl_1 and -mat_mumps_cntl_3 which control the
relative/absolute pivoting threshold?
- Would you advise the use of EPSSetTrueResidual and EPSSetBalance
since I am using a spectral transformation?
- Would you see anything that would prevent me from getting speedup
in parallel executions?
Thank you very much in advance and I look forward to exchanging with you
about these different points,
Thibaut
More information about the petsc-users
mailing list