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

MKL / PARDISO Multithreading Issue

Roman_S_7
Beginner
768 Views

Hello!

I am using PARDISO for factorization of symmetrical complex matrices. Recently I downloaded evaluation library v. 11.2 upd3 and run a code that was developed for v.10 library some time ago. It solves the problem with success but only with 1 thread. I.e. I failed to enable multithreading for PARDISO. Last time I used OMP_NUM_THREADS variable and it was ok.

How can I enable multithreading? Can the evaluation (trial) license be locked for more than 1 thread?

Environment:

  • Win7 OS

  • MS Visual Studio 2010 C++

  • Desktop PC with Intel i5 CPU

Pardiso iparm:

iparm[0] = 0; // No solver default.

iparm[1] = 3; // The parallel (OpenMP) version of the nested dissection algorithm

iparm[2] = 0; //

iparm[3] = 0; // No iterative-direct algorithm.

iparm[4] = 0; // No user fill-in reducing permutation.

iparm[5] = 0; // Write solution into x.

iparm[6] = 0; // Not in use.

iparm[7] = 2; // Max numbers of iterative refinement steps.

iparm[8] = 0; // Not in use.

iparm[9] = 13; // Perturb the pivot elements with 1E-13.

iparm[10] = 1; // Use nonsymmetric permutation and scaling MPS.

iparm[11] = 0; // Not in use.

iparm[12] = 0; // Not in use.

iparm[13] = 0; // Output: Number of perturbed pivots.

iparm[14] = 0; // Not in use.

iparm[15] = 0; // Not in use.

iparm[16] = 0; // Not in use.

iparm[17] = -1; // Output: Number of nonzeros in the factor LU.

iparm[18] = -1; // Output: Mflops for LU factorization.

iparm[19] = 0; // Output: Numbers of CG Iterations.

 

Task: Reordering + factorization of Complex symmetrical matrix;

Goal: multithread run within OpenMP paradigm

I tried following methods for multithreading:

  • Set environment variable OMP_NUM_THREADS– does not work (process uses 1 thread/CPU kernel)

  • Set variable MKL_NUM_THREADS– does not work (process uses 1 thread)

  • Call function omp_set_num_threads(num_threads) – does not work (process uses 1 thread)

  • Call function mkl_set_num_thread(num threads) – does not work (process uses 1 thread)

All “*_set_num_thread” functions call are in the main() before calling any Pardiso routine. Variables are set for the process or in the main function.

Thank you in advance.

0 Kudos
4 Replies
Gennady_F_Intel
Moderator
768 Views

Roman, the evaluation version of MKL is the same as the product version. How do you link your application? it looks like you linked sequential threading libs. 

 

0 Kudos
Roman_S_7
Beginner
768 Views

 

Thank you for answer!

 

It seems so. Could you tell me please, what libraries are necessary to link in order to use PARDISO in a parallel? I mean, static libs?

 

0 Kudos
Gennady_F_Intel
Moderator
768 Views

static or dynamic - doesn't make a sense from threading point of view.  Please refer to the mkl linker adviser follow with the link: https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/  to find how to link with threading version. 

 

 

0 Kudos
Roman_S_7
Beginner
768 Views

The link is very helpful. Thanks a lot!

0 Kudos
Reply