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

Pardiso Won't Run Parallel

sebpinski
Beginner
888 Views
I'm having serious problems with running Pardiso in Parallel mode, as in, it just won't! Could someone please shed some light.

Trying to iteratively diagonalize a sparse matrix using ARPACK and Pardiso. I used to use the regular Pardiso library that is downloadable from the pardiso project website, but their liscensing set-up is a real pain when I want to use multiple computers.

Compilers:
-ifort 11.1_072
-mkl (bundled with the latest fortran compiler)
I did a standard install with these.

System:
-AMD 6 core Phenom
-8GB (4x2) DDR3 1333MHz memory

Pardiso options used:

INTEGER :: mkl_get_max_threads
EXTERNAL :: mkl_get_max_threads

IIparm(1)=1 !No solver default
IIparm(2)=2 !Fill-in reordering from METIS
IIparm(3)=mkl_get_max_threads() !Number of processors mkl_get_max_threads()
IIparm(4)=0 !No iterative-direct algorithm
IIparm(5)=0 !No user fill-in reducing permutation
IIparm(6)=0 !=0 solution on the first n components of x
IIparm(8)=9 !Number of iterative refinement steps
IIparm(10)=13 !Perturb the pivot elements with 1E-13
IIparm(11)=1 !Use non-symetric permutation and scaling MPS
IIparm(13)=1 ! maximum weighted matching algorithm is switched-on (default for non-symmetric)
IIparm(14)=0 !OUTPUT: number of perturbed pivots
IIparm(18)=-1 !OUTPUT: number of non-zeros in the factor LU
IIparm(19)=-1 !OUTPUT: MFlops for LU factorizations
IIparm(21)=1
IIparm(27)=1

NOTE: Not using OOC IIparm(60)>1

Linking libraries when compling:

-lblas -llapack -L ARPACK -larpack_x86_64 -L/opt/intel/Compiler/11.1/072/mkl/lib/em64t/ -lguide -lmkl_intel_lp64 -liomp5 -lmkl_sequential -lpthread -lmkl_core -L JADAMILU_2.0/lib/INT64Nifort -ljadamilu


When I run, with these options the pardiso information just tells me that the #processors used =1. I can't seem to get pardiso to run using multiple processors.

I'm really fed-up with trying to link to alternate libraries and trying different options. It's just confusing using pardiso when bundles examples appear to be wrong. For instants, the example found at the following link:

http://www.intel.com/software/products/mkl/docs/webhelp/appendices/mkl_appC_SULS.html

It calls the following:
      integer omp_get_max_threads
external omp_get_max_threads

yet uses (what appears to be conflicting to me):
      iparm(3) = mkl_get_max_threads()

The example bundled with the mkl library, file `pardiso_unsym_f.f' has the following include file:

include 'mkl_pardiso.f77' (I have no idea why!)



      
0 Kudos
7 Replies
barragan_villanueva_
Valued Contributor I
888 Views

Hi,

There is used sequential MKL library on yourlinking line therefore you will not get parallization.

Alsowhy do you use-lguide together with -liomp5 and in strange places before MKL libraries?

Please visit MKL Link line Advisorat the top of MKL Forum to correctly constract needed link line.

0 Kudos
Gennady_F_Intel
Moderator
888 Views
Hi Seb,
some more comments on this topic:
1) as Victor mentioned before, your linking line
-lguide -lmkl_intel_lp64 -liomp5 -lmkl_sequential -lpthread -lmkl_core -L
have to be different.
2)iparm(3)- currently is not used inifort 11.1_072 ( MKL 10.2 Update 5). See here the details.
3) what is the task size you are solving? Pardiso will not execute in parallel in the case of small inputs...
--Gennady
0 Kudos
sebpinski
Beginner
888 Views
Hi Victor,

I've used the linkline advisor and have linked in the following way now:

LIBFLAGS= -lblas -llapack -L ARPACK -larpack_x86_64 -L JADAMILU_2.0/lib/INT64Nifort -ljadamilu -L /opt/intel/Compiler/11.1/072/mkl/lib/em64t/ /opt/intel/Compiler/11.1/072/mkl/lib/em64t/libmkl_solver_ilp64.a -Wl,--start-group -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -Wl,--end-group -openmp -lpthread

The program now compiles fine but on the very first call to pardiso I get a segmentation fault. I've never had this before and previous results in the sequential version have been fine:

forrtl: severe (174): SIGSEGV, segmentation fault occurred

Are any of the libraries I need missing? What could cause such a problem?
0 Kudos
barragan_villanueva_
Valued Contributor I
888 Views
Hi,

Could you please send small test-case and makefile to reproduce the problem?
However, maybe it's related to ILP64/LP64 model.
Please take a look at the following thread
http://software.intel.com/en-us/forums/showthread.php?t=76101
andmore details are in MKL docs. See for example:
http://www.intel.com/software/products/mkl/docs/linux/WebHelp/mkl_ug_structure/support_for_ilp64_programming.htm
0 Kudos
sebpinski
Beginner
888 Views
Thanks Gennady, I didn't realize that iparm(3) was no longer in use.
0 Kudos
sebpinski
Beginner
888 Views
This worked a treat. No more segmentation faults and using all 6 processors.

There are many long explanations for the difference between ilp/lp, did it just cause a segmentation fault for ilp because I've defined my own 'integer' precision?
0 Kudos
Gennady_F_Intel
Moderator
888 Views
yes, there are many seg. faults happens for this reason.
0 Kudos
Reply