Short question: how do the execution time of FEAST scale with the subspace size M0?
I am trying to add support for the eigensolver FEAST to a large atomic structure program package, GRASP2K, and it seems to work just fine for small and medium sized problems (up to matrix sizes about 3-4000, 100 000 non-zero elements and M0~200-300). For larger problems (N~200 000, NZ~50-60 000 000, M0~1000) the solution, or rather the execution time, depends a lot on the initial guess for emin and emax. I have an older approxiamte solver that can calculate approximate values for emin and emax but with large error bars. If I use these values and use FEAST to estimate the number of eigenvalues (fmp(14=2)) I always get a very large number recommended for M0 (~20 000). I know from the physics involved that it always is the Neig (a number comming from the way the Hamiltonian is constructed, ~2-300) lowest eigenvalues that I am interseted in.
I can either set emin and emax so that I am sure to bracket the eigenvalues I am interested in and accept a large value for M0 and only use the first few eigenvaules returned, or I can iterate and test lower and lower values for emax until M0 returned by fmp(14)=2 comes close to Neig*1.5. It is not cheap to call FEAST many times to find a good energy range as the solution is iterated over many times improving the basis set in an outer loop. I could just test the two cases but the resources I have at hand during development are a bit underpowered and each test run takes about a week so any hint would be welcome.
The short answer is that execution time of FEAST significantly depends on M0. So as I understood you want to estimate this parameter.
Could you, please, give us more details about your use model of FEAST. For example: 1) csr or dense input matrix? 2) Do you solve standard (Ax = λx) or generalized (Ax = λBx) problem? 3) Do you use RCI interface or PREDEFINED interface?
As I know fpm(14) can be 0 or 1. Do you use MKL FEAST?
Best regards, Anton
Thank you for looking at my problem and sorry for the noob mistake of not supplying enough information!
Sparse matrix in CSR format (UPLO='L'), standard problem. I am calling the predefined interface dfeast_scsrev.
I have tried both the MKL implementation of FEAST, setting fpm(14)=1 and increased m0 until info\=3, and the stand alone code from the developers, compiled from source, calling mkl_paradiso, using fpm(14)=2 to get a direct estimate of m and therefor m0 and I get roughly the same number for m0 using both methods.
If you solve standard problem Ax=λx and if you have emin and emax then you can try the following approach to estimate the number of eigenvalues in this interval:
1) Prepare matrices B1=(A-emin*E) and B2=(A-emax*E) where E is a unit matrix.
2)Using MKL PARDISO run phase 11(reordering) and 22(factorization) with B1 and B2 and look at iparm(22) (inertia) that reports the number of positive eigenvalue for symmetric matrices. Let iparm(22)=b1 for B1 and iparm(22)=b2 for B2. Then M0 =( b1 - b2) * 1.5
This approach has to estimate number of eigenvalues accurately enough.
Best regards, Anton
I just read in an Intel Forum thread that there is a bug in 11.1.3 causing PARDISO to crash for large cases in some cases. I have experienced silent crashes in PHASE=33. Is my case large enough to be affected by the bug?
Could you check this on newer mkl, like 11.3 There were significant changes. Or, if you have not chance to check it, you could send us reproducer to try it on our side. In any case, you will need only phase 11 and 22 in proposed approach.
Best regards, Anton
I am doing this on a non-commercial basis so I am stuck with what I have, unfortunately. I have applied for a renewed non-commersial license so I can install a more up-to-date version but my application gets denied by some automatic filter at Intel: >> Error: Unable to validate the open source project <<
Sooner or later I have to do 33 as well so I am testing 11.0.2 that I also have installed and I also will try to create a package for you to test.
I got my non-comm license for 11.3 and FEAST is now fast enough for me to just use the original estimate of the lowest and highest eigenvalue and a large M0. Thanks for all the help.