Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
7234 Discussions

Pardiso does not scale well in reordering step

li__wei
Beginner
4,924 Views

Hi eveyrone,

I have been solving a large symmetric indefinite sparse matrix using Pardiso symmetric solver, with property as below:

< Linear system Ax = b > (Upper half)
             number of equations:           107694
             number of non-zeros in A:      714952
             number of non-zeros in A (%): 0.006164
 
             number of right-hand sides:    1
 
However, it does not scale well in reorder step. Could anyone help?
 
  • thread = 1

reorder: 0.410754 s

factorize: 0.159544 s

solution: 0.047355 s

  • thread = 2

reorder: 0.404389 s

factorize: 0.073979 s

solution: 0.049030 s

  • thread = 4

reorder: 0.417474 s

factorize: 0.054813 s

solution: 0.038233 s

--------------

My laptop has 8 CPU, with details as below:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               2594.000
BogoMIPS:              5188.00
Virtualization:        VT-x
 
 
Detailed information is in attachment.
Thanks for help!

 

 

 

 

0 Kudos
6 Replies
Alexander_K_Intel2
4,924 Views
Hi, Is your matrix have blocked structure? Can you try set iparm[36] to -90 and rerun your test? Thanks, Alex
0 Kudos
li__wei
Beginner
4,924 Views

Hi Alexander,

Thanks for reply.

The matrix is a KKT system from FEM stiffness matrix and lagrange mutipliers. It has structure as below:

O8RSW9A9&#125;3%WOST0{ODI~TD.png

in which A is the n x n stiffness matrix from a FEM structure, Λ is a m x n lagrange multipliers matrix, usually m << n, ε is a very small perturbation.

 When I set the iparm[36] to -90, 

  • thread = 1

reorder time: 0.205429 s

  • thread = 2

reorder time: 0.141978 s

  • thread = 4

reorder time: 0.127079 s

It does scale somehow. Is this desired scalability for Pardiso? 

The Pardiso manual does not mention what iparm[36] is for. What does setting it to -90 mean?

The output files are in attachment.

Btw, the residual is computed from ||Ax - b||2 / ||b||2

  • iparm[36] = 0

residual = 4.208551e-15

  • iparm[36] = -90

residual = 5.733099e-12

Thanks!

 

0 Kudos
Ying_H_Intel
Moderator
4,924 Views

Hi Li Wei,
​It looks a problem. Could you provide us your test matrix and command line, a test code will be better. 


​and FYI,  as i mentioned in  topic: https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/777236

  MKL 2018 update 2  have some update about Pardiso routine,  you may try it .

https://software.intel.com/en-us/articles/intel-math-kernel-library-intel-mkl-2018-bug-fixes-list

MKLD-2776 Improved the performance of Intel MKL Pardiso routine in the case of multiple RHS and linking with Intel® Threaded Building Blocks (Intel® TBB) threading layer.

Best Regards,
Ying

 

 

 

0 Kudos
li__wei
Beginner
4,924 Views

Ying H. (Intel) wrote:

Hi Li Wei,
​It looks a problem. Could you provide us your test matrix and command line, a test code will be better. 

​and FYI,  as i mentioned in  topic: https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/...

  MKL 2018 update 2  have some update about Pardiso routine,  you may try it .

https://software.intel.com/en-us/articles/intel-math-kernel-library-inte...

MKLD-2776
Improved the performance of Intel MKL Pardiso routine in the case of multiple RHS and linking with Intel® Threaded Building Blocks (Intel® TBB) threading layer.

Best Regards,
Ying

 

Thanks for your reply! 

Here is the matrix in CSR format. bs is right-hand side vector, row-ptr and col-ind are row and column vectors, val is matrix value.

testPardisoSym.cpp is the code I used to test Pardiso, and makefile.txt(remove .txt) is the makefile I used to compile.

I will try the update 2 to see if scalability improves.

Best,

 

0 Kudos
Ying_H_Intel
Moderator
4,924 Views

 

Hi Wei,

Thank you for the test code. I can reproduce the problem with latest version.  Will look into details.

Thanks
Ying

 

 

0 Kudos
Gennady_F_Intel
Moderator
4,924 Views

the problem has been fixed into version 2019 u3.

0 Kudos
Reply