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

Pardiso usage about low rank update

Shawn0704
Beginner
637 Views

Hi,

 

I have some question about pardiso usage in MKL library 2023.0.0.

I want to use pardiso to solve a linear equation Ax=b.

My scenario is solve the equations many times but with A not changed or (slightly change), b changed each time, I read the mkl document about low rank update usage and still have some questions.

1. The doc said when use low rank update, iparm[27] should be 0, that is use double precision, but I want to use single. Does it mean I cannot use low rank update?

2. If I call pardiso phase 1 and phase 2 once (the matrix is not changed, but right hand b changed), and call phase 3 many times without release the memory (phase -1), will the memory consumption increased continuously, or is there any method to release the memory in phase 3 but keep the result produced in phase 1 and phase 2.

My matrix size is about 700,000 x 700,000, 0.1 percentage of non-zero element.

 

Looking forward to your early reply. 

0 Kudos
4 Replies
ShanmukhS_Intel
Moderator
559 Views

Hi Zhang,

 

Thanks for posting in Intel communities.

 

Low-rank update cannot be used in combination with a user-supplied permutation vector - in other words, you must use the default values of iparm[4] = 0, iparm[30] = 0, and iparm[35] = 0). Additionally, iparm[3], iparm[5], iparm[27], iparm[36], iparm[55], and iparm[59] must all be set to the default value of 0.

 

We will get back to you soon regarding the iparm[27] which must be set to 0 which corresponds to arrays presented in double precision.

 

Best Regards,

Shanmukh.SS

 

0 Kudos
ShanmukhS_Intel
Moderator
516 Views

Hi Zhang,


The doc said when use low rank update, iparm[27] should be 0, that is use double precision, but I want to use single. Does it mean I cannot use low rank update?

>> Yes, as iparm[27] must be set to 0 to use low rank updates, It is recommended to use the double-precision and single precision could not be used for the mentioned size.


During Phase 1 and Phase 2, matrix A undergoes both symbolic and numerical factorization processes. As your matrix A is not changing, you only need to perform Phase 1 and Phase 2 once as long as the matrix's structure remains the same. If you are changing the right-hand side vector b and not changing the matrix A, you can reuse the numerical factorization obtained from Phase 2 as this could save a potential computation time.


To release memory occupied by the factorization, you can use Phase -1. This is the deallocation phase, and it releases the memory associated with the symbolic and numerical factorizations.


As per your matrix size, it is advised to 

  1. Perform Phase 1 and Phase 2 once to compute the factorization.
  2. For each set of changed right-hand side vectors b, use Phase 3 to solve without re-running Phase 1 and Phase 2.
  3. After solving with all required b vectors, use Phase -1 to release memory if needed.


Best Regards,

Shanmukh.SS


0 Kudos
ShanmukhS_Intel
Moderator
486 Views

Hi,


A gentle reminder:

Has the information provided helped? Could you please let us know if you have any updates regarding your issue?


Best Regards,

Shanmukh.SS


0 Kudos
ShanmukhS_Intel
Moderator
458 Views

Hi,


A gentle reminder:

Has the information provided helped? Could you please let us know if you have any updates regarding your issue?


Best Regards,

Shanmukh.SS


0 Kudos
Reply