在使用Pardiso.jl求解方程组时,想设置其求解时的线程数,进行多线程计算;但我利用 set_nprocs!(ps, i)设置时,不管我的i取多少, get_nprocs(ps)得到的线程数都为2。我更改julia自身的线程数Threads.nthreads为i,再运行结果还是2。现在不知道是哪里出错了,所以想问一下
下面是一个示例代码:
using SparseArrays
using Pardiso
ps = MKLPardisoSolver()
set_nprocs!(ps, 8)
get_nprocs(ps)
A = sparse(rand(1000, 1000))
B = rand(1000, 2)
X = zeros(1000, 2)
solve!(ps, X, A, B)
下面是示例的运行情况:
julia> using SparseArrays
julia> using Pardiso
julia> ps = MKLPardisoSolver()
MKLPardisoSolver:
Matrix type: Real nonsymmetric
Phase: Analysis, numerical factorization, solve, iterative refinement
julia> set_nprocs!(ps, 8)
julia> get_nprocs(ps)
2
julia> A = sparse(rand(1000, 1000))
1000×1000 SparseMatrixCSC{Float64,Int64} with 1000000 stored entries:
[1 , 1] = 0.536508
[2 , 1] = 0.223994
[3 , 1] = 0.27551
[4 , 1] = 0.779583
⋮
[996 , 1000] = 0.475305
[997 , 1000] = 0.421885
[998 , 1000] = 0.818858
[999 , 1000] = 0.657867
[1000, 1000] = 0.713921
julia> B = rand(1000, 2)
1000×2 Array{Float64,2}:
0.758533 0.461676
0.794269 0.646466
0.145926 0.474638
0.41682 0.709873
0.478481 0.622945
⋮
0.171621 0.74124
0.257501 0.586585
0.825143 0.253205
0.600026 0.250749
julia> X = zeros(1000, 2)
1000×2 Array{Float64,2}:
0.0 0.0
0.0 0.0
0.0 0.0
0.0 0.0
0.0 0.0
⋮
0.0 0.0
0.0 0.0
0.0 0.0
0.0 0.0
julia> solve!(ps, X, A, B)
1000×2 Array{Float64,2}:
-0.771206 -3.50291
0.0667699 0.425585
-0.314671 -0.128101
0.317924 2.32667
1.53918 3.54766
⋮
1.88157 1.41786
1.09144 -1.20533
1.64837 1.90146
0.256798 -2.55176