英特尔MKL pardiso将不会在fortran中并行运行

时间:2015-11-05 08:15:28

标签: multithreading fortran intel-mkl pardiso

我正在尝试使用intel MKL版本的pardiso来处理多个内核。我用它来解决一个结构对称的系统(mtype=1)和大约60K方程。

  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

这些是我的ipram参数。编译时我有

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

在调用pardiso之前,我还设置了MKL和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

据我所知,如果允许或启用“足够大”的问题,所有MKL函数都会尝试使用多个线程。我已经使用OMP进行了一些并行操作,代码在几个内核上运行。我称之为pardiso的地区是连续的。我的问题是,还需要什么才能使pardiso与多个内核一起工作?

尝试使用iparm的默认值,即iparm(1)=0并且没有变化

1 个答案:

答案 0 :(得分:-1)

我无法添加评论(声誉不足)。

您可以在运行代码之前尝试设置环境变量OMP_NUM_THREADS,看看是否有效。