我正在使用scipy.sparse.linalg.spilu
和scipy.sparse.linalg.bicgstab
来解决Ax = b。我发现我的CPU使用率有时约为50%。我的CPU是Intel(R)Xeon(R)CPU E3-1245 V2@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)
答案 0 :(得分:0)
这些例程本身并不是并行化的。但是,如果您使用多线程BLAS库(如ATLAS或Openblas),则可能会在例程中并行化几个线性代数运算。因此,它们受益于多个核心。
答案 1 :(得分:0)
@ p.v是正确的。您必须将scipy / numpy链接到多线程blas库以利用您的多核。
另一方面,我假设您使用的是Linux。在Linux中,当观察CPU利用率时,您看到的百分比是每个核心。 50%意味着正在使用一个核心的一半。如果你有8个内核,那么如果所有8个内核都被完全使用,你会看到CPU使用率大约为800%。