Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
6622 Discussions

Is pardiso_64 back-substitution parallelized?

Arthur_M_
Beginner
233 Views

Hello,

I've been running pardiso_64 on several problems. If I change MKL_NUM_THREADS I can quickly notice that the factorization elapsed time goes down.

However, the back-substitution doesn't seem to be affected by the number of threads. Given that I am solving, one right-hand-side at a time, many, many right-hand-side vectors, I would like the back-substitution to also be parallelized.

Do I need to do anything special to get speedup in this phase?

Thanks.

0 Kudos
10 Replies
Alexander_K_Intel2
233 Views
Hi, Did you change value of iparm(25)? With best regards, Alexander Kalinkin
Arthur_M_
Beginner
233 Views
It's been set to 0 which, according to the documentation, If iparm(25) = 0 (default value), then PARDISO uses a parallel algorithm for the solve step. Could it be there's a typo in the documentation and I really need to set it to a non-zero value instead? Thanks.
Alexander_K_Intel2
233 Views
Hi, No, you set iparm correctly. For some matrices parallel solving turn off because of specific internal routine, but such situation happens really rarely. Could you send to me your testcase to reproduce it? And could you provide me information about version of your MKL? With best regards, Alexander Kalinkin
Arthur_M_
Beginner
233 Views
Alexander, I first have to check whether I can share the matrix. It comes from a client. But even if I could I don't really know how to do it. I have about one million equations, and about 34M non-zeros in the matrix. Should I upload each of the arrays in the argument list to pardiso_64? rowIndex, columns, floating point values, integer parameters? Please confirm that this is how I should upload the matrix while I check whether I can share the matrix. Thanks.
Arthur_M_
Beginner
233 Views
Alexander, I forgot to mention: MKLROOT = /opt/intel/composerxe-2011.4.191/mkl
Alexander_K_Intel2
233 Views
Artur, Provide way to send me reproducer in private topic. With best regards, Alexander Kalinkin
Arthur_M_
Beginner
233 Views
Alexander, I am attaching a few files. They are all C binary files, written with fwrite, so you can use fread to read them all back again. The number of equations is 974337. Note that I'm using PARDISO_64, so all integers are 64-bit integers. Files are: iparm.dat: the array of parameters rowIndex.dat: the rowIndex argument. There are 974338 entries in the array (neq + 1). columns.dat: the number of entries equals the last argument in the rowIndex array values.dat: an array of double precision numbers. Same size as columns.dat. Please let me know if I'm missing something. Thanks. Arthur
Roman_A_Intel
Employee
233 Views
Hi Arthur based on your data I can see that you set iparm(5) to 1 that equally to use predefined permuted vector. In such case only serial version of solving step for 1 rhs available. With best regards, Roman
Arthur_M_
Beginner
233 Views
Roman, Thanks for the feedback. I have done all reordering outside of Pardiso. All I want is for the ordering array to be 1,2,3,4,...N. The only way I found to do this trivial thing is to set the flag as you mentioned and set the array to these trivial values. Is there a way in Pardiso to just set the natural ordering and still have a parallel back substitution? Thanks. Arthur
Roman_A_Intel
Employee
233 Views
Arthur, In case you use your own reordering and miss reordering phase in Pardiso, the parallel solving is not available. Regards, Roman
Reply