scipy.sparse包是否为多线程/多进程



我使用scipy.sparse.linalg.spiluscipy.sparse.linalg.bicgstab来求解Ax=b。我观察到我的CPU使用率有时在50%左右。我的CPU是Intel(R)Xeon(R)CPU E3-1245V2@3.40GHZ它有4个核心和8个逻辑处理器。我想知道我使用的这两个函数是否是多线程/多处理器的,因为如果是单线程/核心的,CPU使用率应该在12.5%左右,对吧?谢谢

编辑:

我的代码如下:

import scipy.sparse.linalg as spla
import scipy
import scipy.io as io
import numpy as np
import time
from scipy.sparse import csr_matrix
f="memplus.mtx"
A=io.mmread(f)
x=np.ones(A.shape[1])*0.99
b = np.dot( A.todense(), np.ones(A.shape[1]) ) 
lu=spla.spilu(A=A)
M_x = lambda x: lu.solve(x)
ndim = x.shape[0]
M = scipy.sparse.linalg.LinearOperator((ndim, ndim), M_x)
a, info=spla.bicgstab(A, b.T, x0=x, tol=1e-12, maxiter=10000, M=M)

这些例程本身并不是并行的。但是,如果您使用的是ATLAS或Openblas等多线程BLAS库,那么例程中的几个线性代数操作很可能是并行的。因此,它们受益于多个核心。

@p.v是正确的。您必须将scipy/numpy链接到多线程blas库,以利用您的多核。

顺便说一句,我假设您使用的是Linux。在Linux中,当观察CPU利用率时,您看到的百分比是每个内核。50%意味着一个核心的一半被使用。如果你有8个核心,那么如果全部8个都被充分使用,你应该会看到大约800%的CPU使用率。