2015-11-05 104 views
1

我正在尝试获取英特尔MKL版本的pardiso以使用多个内核。我用它来解决具有大约60K方程的结构对称系统(mtype=1)。英特尔MKL pardiso将不会在Fortran中并行运行

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并没有改变

+0

请发送完整的代码。 – Jeff

+1

你应该检查你的'iparm'数组。这个数组有64个入口(不仅20个),并且'iparm(3)'被保留,应该为零。你是否尝试用默认值运行('iparm(1)= 0')? – Stefan

回答

-1

我不能添加评论(没有足够的声誉)。

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

相关问题