Showing results for 
Search instead for 
Did you mean: 

PARDISO solve step performances and fill-in reducing


In my problem, I have a constant SPD matrix to factorize (Cholesky / LLT) and several thousands of solve to do. So I'm more concerned about solve performance since the ordering and factorize steps are done only one time.

For example, I have a 4595x4595 matrix (MatrixMarket file attached to this message) with 58231 non-zeros values :

Matrix A

When I use MKL PARDISO with fill-in reducing mode 0 (minimum degree method), 2500 solves are done in 4.59s with 251271 non-zeros in L matrix.

When I use fill-in reducing mode 2 (METIS), 2500 solves are done in 4.95s with 241820 non-zeros in L matrix.

I have tried Eigen 3 library with the same matrix, 2500 solves are done in 4.28s (unable to retrieve non-zeros count).


I have two questions :

1) Is it normal that the solve step is slower with METIS re-ordering while there is less non-zeros values in L matrix ?

2) It seems that re-ordering step are not optimal with both MKL methods (for example SCILAB returns 223228 non-zeros). Is there a way to reduce fill-in other than iparm(2) ?


Factorization call :

    void* pt = ...; //handle
    int maxfct=1;
    int mnum=1;
    int mtype=2;
    int phase=12;
    int n=4595;
    int nrhs=0;
    int msglvl=0;
    int error=-1;
    int* perm=NULL;
    double* a = ...; //values
    int* ia = ...; //rows
    int* ja = ...; //columns
    int iparm[] = {1,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

    pardiso(pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, NULL, &nrhs, iparm, &msglvl, NULL, NULL, &error);


Thank you.

0 Kudos
0 Replies