2015-11-05 154 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,看看是否有效。

相關問題