我试图明确地弄清楚 SciPy/NumPy 中的哪些函数在多个处理器上运行。例如,我可以在 SciPy 参考手册中阅读 SciPy 使用它,但我更感兴趣的是哪些函数确实运行并行计算,因为并非所有函数都运行。理想的情况当然是在您键入 help(SciPy.foo) 时包含它,但情况似乎并非如此。
任何帮助都感激不尽。
最好的,
马蒂亚斯
我试图明确地弄清楚 SciPy/NumPy 中的哪些函数在多个处理器上运行。例如,我可以在 SciPy 参考手册中阅读 SciPy 使用它,但我更感兴趣的是哪些函数确实运行并行计算,因为并非所有函数都运行。理想的情况当然是在您键入 help(SciPy.foo) 时包含它,但情况似乎并非如此。
任何帮助都感激不尽。
最好的,
马蒂亚斯
我认为这个问题最好解决您使用的 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 做任何事情来实现这一点。