5

我试图明确地弄清楚 SciPy/NumPy 中的哪些函数在多个处理器上运行。例如,我可以在 SciPy 参考手册中阅读 SciPy 使用它,但我更感兴趣的是哪些函数确实运行并行计算,因为并非所有函数都运行。理想的情况当然是在您键入 help(SciPy.foo) 时包含它,但情况似乎并非如此。

任何帮助都感激不尽。

最好的,

马蒂亚斯

4

1 回答 1

5

我认为这个问题最好解决您使用的 BLAS/LAPACK 库而不是 SciPy/NumPy。

一些 BLAS/LAPACK 库,例如MKL,在其他实现可能不使用的情况下本机使用多个内核。

scipy.linalg.solve个例子,这里是它的源代码(为了清楚起见省略了一些错误处理代码):

def solve(a, b, sym_pos=0, lower=0, overwrite_a=0, overwrite_b=0,
          debug = 0):
    if sym_pos:
        posv, = get_lapack_funcs(('posv',),(a1,b1))
        c,x,info = posv(a1,b1,
                        lower = lower,
                        overwrite_a=overwrite_a,
                        overwrite_b=overwrite_b)
    else:
        gesv, = get_lapack_funcs(('gesv',),(a1,b1))
        lu,piv,x,info = gesv(a1,b1,
                             overwrite_a=overwrite_a,
                             overwrite_b=overwrite_b)

    if info==0:
        return x
    if info>0:
        raise LinAlgError, "singular matrix"
    raise ValueError,\
          'illegal value in %-th argument of internal gesv|posv'%(-info)

如您所见,它只是两个 LAPACK 函数系列(以DPOSV和为例DGESV)的薄包装。

在 SciPy 级别上没有并行性,但是您可以在系统上使用多个内核来观察该功能。唯一可能的解释是您的 LAPACK 库能够使用多个内核,而无需 NumPy/SciPy 做任何事情来实现这一点

于 2011-08-04T13:43:09.153 回答