私は質問は、使用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関数の2つの家族の周りだけ薄いラッパーですDPOSV
およびDGESV
)。
SciPyレベルでは並列処理が行われていませんが、システム上で複数のコアを使用している機能を観察できます。唯一可能な説明は、あなたのLAPACKライブラリーが、を実行するためにNumPy/SciPyなしでの複数のコアを使用できることです。
出典
2011-08-04 13:43:09
NPE
これは 'numpy' /' scipy'ではなく、BLAS/LAPACKライブラリにある程度対応しているので、ちょっとややこしいです。たとえば、MKL(http://software.intel.com/en-us/articles/intel-mkl/)では、他のライブラリでは使用できない複数のコアを使用する場合があります。 – NPE
ある種の機能がありますか? – NPE
@aix私は一般的にSciPyについて考えていましたが、おそらく線形代数関数に焦点を当てています。私はそれを見る。 scipy.linalg.solveは、複数のコアを使用します(コアの動作を確認するために私のシステムモニタをチェックするだけです)。 – matiasq