1
votes

I am trying to get the intel MKL version of pardiso to work with multiple cores. Im using it to solve a structurally symmetric system (mtype=1) with around 60K equations.

  iparm= 0
  iparm(1) = 1 !
  iparm(2) = 3 !  
  iparm(3) = omp_get_max_threads() !   
  iparm(4) = 0 !
  iparm(5) = 0 !
  iparm(6) = 0 !
  iparm(7) = 0 !
  iparm(8) = 9 ! 
  iparm(9) = 0 !
  iparm(10) = 13
  iparm(11) = 1 
  iparm(12) = 0 
  iparm(13) = 0 
  iparm(14) = 0 
  iparm(15) = 0 
  iparm(16) = 0 
  iparm(17) = 0 
  iparm(18) = -1
  iparm(19) = -1
  iparm(20) = 0

These are the my ipram parameters. When compiling I have

F90FLAGS = ${F77FLAGS} -I${SOLIDroot} -openmp -mkl=parallel -d-lines -debug 

Before calling pardiso I also set the number of threads available to MKL and openmp

call mkl_set_num_threads(3) call omp_set_num_threads(3)

call mkl_set_dynamic(0) ! disabling dynamic adjustment of the number of threads

As far as I have understood, all MKL functions will try to use multiple threads if allowed or enabled for "sufficiently" large problems. I already have some parallelism using OMP and the code runs on several cores. The region from which I call pardiso is serial. My question is, what else is needed to make pardiso work with multiple cores?

Tried with the default values for iparm, ie iparm(1)=0 and there was no change

1
Post full code please. - Jeff Hammond
You should check your iparm array. This array has 64 entries (not only 20) and iparm(3) is reserved and should be zero. Did you try to run with default values (iparm(1) = 0)? - Stefan

1 Answers

-1
votes

I cannot add a comment (not enough reputations).

You can try setting the environment variable OMP_NUM_THREADS before you run the code and see if that works.