2017-10-05 13 views
0

私はcythonに最適化されたスピードプログラムを持っていますが、速度は遅いです。私は私のcythonプログラムがOpenBLASまたはMKL(リンクopenblas/mklライブラリ)を使用しているかどうかを知りたいですか? これを知るには?cythonプログラムがnumpy + MKLを使用しているか、MKLを使用していないかを知るには?

+0

の可能性のある重複した[BLASライブラリはnumpyので使用されている/どうかを調べます]( https://stackoverflow.com/questions/37184618/find-out-if-which-blas-library-is-used-by-numpy) – DavidW

+0

@ eadの回答はうまくいくと思いますし、もう一つの質問。 – DavidW

答えて

1

どのDLL /共有ライブラリがプロセスで使用されているかは、違いはありません。 pythonを起動し、cythonモジュールをインポートします。

import my_cython_module 
Pythonは動的にもMKLやBLASを意味し、あなたのモジュールと、モジュールのために必要とされるすべての共有ライブラリをロードします。 Linuxの

  1. はプログラムのPIDを取得します:pgrep python
  2. は、ロードされた共有ライブラリを見てみましょう:Windowsではcat /proc/<PID>/maps

を:

  • ProcessExplorerを使用して、python-processを選択し、ロードされたdll(Ctrl + D)を見てください。
  • VisualStudio-Debuggerでpython-processに接続して、モジュール(Ctrl + Alt + U)を見ることができます。

ここで(blasとmkl)が両方ともロードされている場合は、計算を実行し、デバッガを使用してコールスタックを確認する必要があります。


ほとんどの場合、あなたのcythonモジュールはMKL/BLASと直接リンクするのではなくnumpy経由でリンクされます。それはDavidWによって提供さquestionへのリンクに示されたように、このケースでは、あなただけを経由して、それを調べることができます。

>>> numpy.show_config() 
lapack_opt_info: 
    libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll'] 
... 
+0

numpy.show_config()は次のように表示します:libraries = ['mkl_core_dll'、 'mkl_intel_lp64_dll'、 'mkl_intel_thread_dll']は既にMKL/BLASの成功とリンクしていることを意味しますか? – machen

+0

実行中のMyプログラムでProcessExplorerを使用していますが、mkl dllの名前がProcessExplorerのPythonプログラムに表示されています。これはMKLが実際にリンクされていることを意味しますか? – machen

+0

@machenすべてのケースの99.9%で十分です。 blas-libraryがロードされていますか?それ以外の場合は、mklだけを使用することができます - あなたのコードがmklを使用するかどうかは別の質問ですが、blasは使用しません。 – ead

関連する問題