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.

Pardiso usage about low rank update

Shawn0704
Beginner
1,169 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
1,091 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
1,048 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
1,018 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
990 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