如果我有一系列CPU密集型操作,多线程程序是否一定会减少其运行时间这样做的利弊是什么?在这种情况下,我试图计算一个非常大的矩阵的零空间。我使用的是python,特别是numpy包:
def nullspace(A, eps=1e-15):
"""Computes the null space of the real matrix A."""
n, m = shape(A)
if n > m :
return nullspace(transpose(A), eps)
_, s, vh = linalg.svd(A)
s = append(s, zeros(m))[0:m]
null_mask = (s <= eps)
null_space = compress(null_mask, vh, axis=0)
return null_space.tolist()
另外,我想知道一个人将如何处理多线程这样的函数。提前谢谢。
最佳答案
python有全局解释器锁(gil),它一次只允许一个线程与解释器交互——实际上,这意味着您一次只能运行一个python线程。当尝试运行多个线程时,这是一个严重的缺点。
然而,numpy
是建立在一个被称为lapack的数值线性代数的高度优化的库之上的。如果您为您的系统安装正确版本的lapack,它将为您并行计算。然后,您可以在lapack上安装numpy
,python计算将被并行化。
这也意味着许多numpy
操作都会释放GIL,这样您就可以在Python线程中触发一个长的numpy
计算,同时执行其他Python谢谢@jfsebastian。