如果我有一系列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。

07-24 09:48
查看更多