2011-08-04 9 views
4

私はSciPy/NumPyのどの機能が複数のプロセッサ上で実行されているかを明示的に理解しようとしています。私はできる。 SciPyがこれを使用するSciPyのリファレンスマニュアルを読んでください。しかし、すべての関数が並列計算を実行するのではなく、どの関数が正確に実行されているのか、より興味があります。夢のシナリオは、あなたがヘルプ(SciPy.foo)を入力するときに含まれていればもちろんですが、そうではありません。複数のコアで実行されているSciPy/NumPy関数を知ることはできますか?

ご協力いただければ幸いです。

ベスト、

マティアス

+2

これは 'numpy' /' scipy'ではなく、BLAS/LAPACKライ​​ブラリにある程度対応しているので、ちょっとややこしいです。たとえば、MKL(http://software.intel.com/en-us/articles/intel-mkl/)では、他のライブラリでは使用できない複数のコアを使用する場合があります。 – NPE

+0

ある種の機能がありますか? – NPE

+0

@aix私は一般的にSciPyについて考えていましたが、おそらく線形代数関数に焦点を当てています。私はそれを見る。 scipy.linalg.solveは、複数のコアを使用します(コアの動作を確認するために私のシステムモニタをチェックするだけです)。 – matiasq

答えて

4

私は質問は、使用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なしでの複数のコアを使用できることです。

+0

便利な回答ありがとうございます。私はMKLを使用するEnthoughts 2.7.1 Pythonを持っているので、良い形になっています。 – matiasq

+0

とどのBLAS/LAPACK関数が並行して実行されるかをどのように見つけることができますか? – usethedeathstar

関連する問題