scipy.sparse包是多线程还是多进程

时间:2015-02-26 19:26:43

标签: python multithreading scipy

我正在使用scipy.sparse.linalg.spiluscipy.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)

2 个答案:

答案 0 :(得分:0)

这些例程本身并不是并行化的。但是,如果您使用多线程BLAS库(如ATLAS或Openblas),则可能会在例程中并行化几个线性代数运算。因此,它们受益于多个核心。

答案 1 :(得分:0)

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

另一方面,我假设您使用的是Linux。在Linux中,当观察CPU利用率时,您看到的百分比是每个核心。 50%意味着正在使用一个核心的一半。如果你有8个内核,那么如果所有8个内核都被完全使用,你会看到CPU使用率大约为800%。