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

Is pardiso_64 back-substitution parallelized?

Arthur_M_
Beginner
489 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
489 Views
Hi, Did you change value of iparm(25)? With best regards, Alexander Kalinkin
0 Kudos
Arthur_M_
Beginner
489 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.
0 Kudos
Alexander_K_Intel2
489 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
0 Kudos
Arthur_M_
Beginner
489 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.
0 Kudos
Arthur_M_
Beginner
489 Views
Alexander, I forgot to mention: MKLROOT = /opt/intel/composerxe-2011.4.191/mkl
0 Kudos
Alexander_K_Intel2
489 Views
Artur, Provide way to send me reproducer in private topic. With best regards, Alexander Kalinkin
0 Kudos
Arthur_M_
Beginner
489 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
0 Kudos
Roman_A_Intel
Employee
489 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
0 Kudos
Arthur_M_
Beginner
489 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
0 Kudos
Roman_A_Intel
Employee
489 Views
Arthur, In case you use your own reordering and miss reordering phase in Pardiso, the parallel solving is not available. Regards, Roman
0 Kudos
Reply