我試圖弄清楚SciPy/NumPy中的哪些函數在多個處理器上運行。我可以例如閱讀SciPy參考手冊中的SciPy使用這個,但我更關心哪些函數執行並行計算,因爲並不是所有的函數都可以。當然,如果在你輸入help(SciPy.foo)時包含了這個夢想場景,但這似乎並不是這樣。是否有可能知道哪些SciPy/NumPy函數在多個核心上運行?
任何幫助將不勝感激。
最佳,
馬蒂亞斯
我試圖弄清楚SciPy/NumPy中的哪些函數在多個處理器上運行。我可以例如閱讀SciPy參考手冊中的SciPy使用這個,但我更關心哪些函數執行並行計算,因爲並不是所有的函數都可以。當然,如果在你輸入help(SciPy.foo)時包含了這個夢想場景,但這似乎並不是這樣。是否有可能知道哪些SciPy/NumPy函數在多個核心上運行?
任何幫助將不勝感激。
最佳,
馬蒂亞斯
我認爲這個問題是您使用,而不是SciPy的/ NumPy的BLAS的/ LAPACK庫,更好地解決。
某些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做任何事情都可以使用多核,。
感謝您的有用答案。我有Enthoughts 2.7.1使用MKL的python,所以我狀態良好。 – matiasq
以及如何找出哪些BLAS/LAPACK函數並行運行? – usethedeathstar
這有點棘手,因爲它在某種程度上取決於BLAS/LAPACK庫,而不是'numpy' /'scipy'。例如,MKL(http://software.intel.com/en-us/articles/intel-mkl/)可能會使用多個內核,而其他庫可能不會。 – NPE
是否有某種您想到的功能? – NPE
@aix我一般都在思考SciPy,但也許更關注線性代數函數。我看到例如scipy.linalg.solve使用多個內核(通過檢查我的系統監視器來查看內核的活動)。 – matiasq