topic PARDISO solve step performances and fill-in reducing in IntelĀ® oneAPI Math Kernel Library
https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/PARDISO-solve-step-performances-and-fill-in-reducing/m-p/1065553#M21902
<P>Hello,</P>
<P>In my problem, I have a constant SPD matrix to factorize (Cholesky / LL<SUP>T</SUP>) 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.</P>
<P>For example, I have a 4595x4595 matrix (MatrixMarket file attached to this message) with 58231 non-zeros values :</P>
<P><IMG alt="Matrix A" src="http://i.imgur.com/1rMeugu.png" /></P>
<P>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.</P>
<P>When I use fill-in reducing mode 2 (METIS), 2500 solves are done in 4.95s with 241820 non-zeros in L matrix.</P>
<P>I have tried Eigen 3 library with the same matrix, 2500 solves are done in 4.28s (unable to retrieve non-zeros count).</P>
<P> </P>
<P>I have two questions :</P>
<P>1) Is it normal that the solve step is slower with METIS re-ordering while there is less non-zeros values in L matrix ?</P>
<P>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) ?</P>
<P> </P>
<P><SPAN style="font-size: 1em; line-height: 1.5;">Factorization call :</SPAN></P>
<PRE class="brush:cpp;"> 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);</PRE>
<P> </P>
<P><SPAN style="font-size: 1em; line-height: 1.5;">Thank you.</SPAN></P>Tue, 06 Sep 2016 09:36:34 GMTMichael_M_202016-09-06T09:36:34ZPARDISO solve step performances and fill-in reducing
https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/PARDISO-solve-step-performances-and-fill-in-reducing/m-p/1065553#M21902
<P>Hello,</P>
<P>In my problem, I have a constant SPD matrix to factorize (Cholesky / LL<SUP>T</SUP>) 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.</P>
<P>For example, I have a 4595x4595 matrix (MatrixMarket file attached to this message) with 58231 non-zeros values :</P>
<P><IMG alt="Matrix A" src="http://i.imgur.com/1rMeugu.png" /></P>
<P>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.</P>
<P>When I use fill-in reducing mode 2 (METIS), 2500 solves are done in 4.95s with 241820 non-zeros in L matrix.</P>
<P>I have tried Eigen 3 library with the same matrix, 2500 solves are done in 4.28s (unable to retrieve non-zeros count).</P>
<P> </P>
<P>I have two questions :</P>
<P>1) Is it normal that the solve step is slower with METIS re-ordering while there is less non-zeros values in L matrix ?</P>
<P>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) ?</P>
<P> </P>
<P><SPAN style="font-size: 1em; line-height: 1.5;">Factorization call :</SPAN></P>
<PRE class="brush:cpp;"> 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);</PRE>
<P> </P>
<P><SPAN style="font-size: 1em; line-height: 1.5;">Thank you.</SPAN></P>Tue, 06 Sep 2016 09:36:34 GMThttps://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/PARDISO-solve-step-performances-and-fill-in-reducing/m-p/1065553#M21902Michael_M_202016-09-06T09:36:34Z