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

How to use multiprocessors?

xian-zhong_guous_cd-
346 Views
I am testing MKL Sparse Solver PARDISO on linux with 8 processors. I've set the enviroment variable MKL_NUM_THREADS=8. However, the output keeps telling me it uses only processor(see enclosed below). Any idea what I did wrong?
Here is my make:
make sointel64 interface=lp64 compiler=gnu function=pardiso_sym_c
Here is the output:
=== PARDISO is running in In-Core mode, because iparam(60)=0 ===


================  PARDISO: solving a  symmetric indef. system  ================


Summary PARDISO: ( reorder to reorder )
================

Times:
======
      Time fulladj: 0.000005 s
      Time reorder: 0.000250 s
      Time symbfct: 0.005507 s
      Time malloc : 0.000074 s
      Time total  : 0.006585 s total - sum: 0.000748 s

Statistics:
===========
 < Parallel Direct Factorization with #processors: >         1
 < Numerical Factorization with Level-3 BLAS performance >

 < Linear system Ax = b>  
             #equations:                                     9
             #non-zeros in A:                                19
             non-zeros in A (%):                            23.456790

             #right-hand sides:                              1

 < Factors L and U > 
             #columns for each panel:                        128
             #independent subgraphs:                         0
 < Preprocessing with state of the art partitioning metis>
             #supernodes:                                    6
             size of largest supernode:                      4
             number of nonzeros in L                       29
             number of nonzeros in U                       1
             number of nonzeros in L+U                     30

Reordering completed ... 
Number of nonzeros in factors = 30
Number of factorization MFLOPS = 0 Percentage of computed non-zeros for LL^T factorization
 0 %  3 %  13 %  24 %  31 %  44 %  100 %  
 
================  PARDISO: solving a  symmetric indef. system  ================


Summary PARDISO: ( factorize to factorize )
================

Times:
======
      Time A to LU: 0.000000 s
      Time numfct : 0.001327 s
      Time malloc : 0.000012 s
      Time total  : 0.001343 s total - sum: 0.000004 s

Statistics:
===========
 < Parallel Direct Factorization with #processors: >         1
 < Numerical Factorization with Level-3 BLAS performance >

 < Linear system Ax = b>  
             #equations:                                     9
             #non-zeros in A:                                19
             non-zeros in A (%):                            23.456790

             #right-hand sides:                              1

 < Factors L and U > 
             #columns for each panel:                        128
             #independent subgraphs:                         0
 < Preprocessing with state of the art partitioning metis>
             #supernodes:                                    6
             size of largest supernode:                      4
             number of nonzeros in L                       29
             number of nonzeros in U                       1
             number of nonzeros in L+U                     30
             gflop   for the numerical factorization:        0.000000

             gflop/s for the numerical factorization:        0.000047


Factorization completed ... 
================  PARDISO: solving a  symmetric indef. system  ================


Summary PARDISO: ( solve to solve )
================

Times:
======
      Time solve  : 0.000047 s
      Time total  : 0.000066 s total - sum: 0.000019 s

Statistics:
===========
 < Parallel Direct Factorization with #processors: >         1
 < Numerical Factorization with Level-3 BLAS performance >

 < Linear system Ax = b>  
             #equations:                                     9
             #non-zeros in A:                                19
             non-zeros in A (%):                            23.456790

             #right-hand sides:                              1

 < Factors L and U > 
             #columns for each panel:                        128
             #independent subgraphs:                         0
 < Preprocessing with state of the art partitioning metis>
             #supernodes:                                    6
             size of largest supernode:                      4
             number of nonzeros in L                       29
             number of nonzeros in U                       1
             number of nonzeros in L+U                     30
             gflop   for the numerical factorization:        0.000000

             gflop/s for the numerical factorization:        0.000047


Solve completed ... 
The solution of the system is: 
 x [0] = -0.041860
 x [1] = -0.003413
 x [2] =  0.117250
 x [3] = -0.112640
 x [4] =  0.024172
 x [5] = -0.107633
 x [6] =  0.198720
 x [7] =  0.190383
 x [8] =  1.000000


0 Kudos
4 Replies
Alexander_K_Intel2
346 Views
Hi,
Could you provide link line of your example? It's seem that you link with sequential library. To check your link line please use this articlehttp://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/
With best regards,
Alexander Kalinkin
0 Kudos
xian-zhong_guous_cd-
346 Views
Here is the link line:
xeons03 270> make sointel64 interface=ilp64 compiler=gnu function=pardiso_sym_c

----- Compiling gnu_ilp64_parallel_intel64_so ----- pardiso_sym_c
gcc -m64 -w -DMKL_ILP64 -I"/opt/intel/Compiler/11.1/046/mkl/include" \
./source/pardiso_sym_c.c \
-L"/opt/intel/Compiler/11.1/046/mkl/lib/intel64" -lmkl_intel_ilp64 \
-lmkl_intel_thread \
-lmkl_core \
-L"/opt/intel/Compiler/11.1/046/mkl/../lib/intel64" -liomp5 -lpthread -lm -o _results/gnu_ilp64_parallel_intel64_so/pardiso_sym_c.out
----- Execution gnu_ilp64_parallel_intel64_so ----- pardiso_sym_c
export LD_LIBRARY_PATH="/opt/intel/Compiler/11.1/046/mkl/lib/intel64":/opt/intel/Compiler/11.1/046/mkl/lib/em64t:/opt/intel/Compiler/11.1/046/mkl/../lib/intel64; \
_results/gnu_ilp64_parallel_intel64_so/pardiso_sym_c.out > _results/gnu_ilp64_parallel_intel64_so/pardiso_sym_c.res

Is it because my problem size is too small?
0 Kudos
VipinKumar_E_Intel
346 Views
Can you please check the value of MKL_NUM_THREADS environment variable?

More details on controlling# of threads using env variables can be found in the MKL user manual

http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/mklxe/mkl_userguide_lnx/MKL_UG_managing_performance/MKL_Environment_Variables_For_Threading_Control.htm

--Vipin
0 Kudos
Konstantin_A_Intel
346 Views
Hi,

You are correct, the task is too small and PARDISO decided to solve it using only 1 thread because there's no any benefit to use multithreading for such really small matrices.

Most likely, all is correct with threading in your program. Please just try to solvea matrix with substantially larger number of equations (say, more than one thousand).

Best regards,
Konstantin
0 Kudos
Reply