我正在尝试让 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
没有变化