2017-10-05 173 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

這與查看進程使用哪些dlls /共享庫不同。啓動Python和導入用Cython模塊:

import my_cython_module 

的Python現在動態加載模塊,併爲您模塊,它需要所有的共享庫,這也意味着MKL BLAS或。

在Linux上:pgrep python

  • 在加載共享庫看看:cat /proc/<PID>/maps
  • 在Windows上:

      程序的

      1. 獲取PID
      2. 您可以使用ProcessExplorer,選擇python進程並查看加載的dll(Ctrl + D)。
      3. 您可以使用VisualStudio-Debugger附加到python進程並查看模塊(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()顯示:庫= ['mkl_core_dll','mkl_intel_lp64_dll','mkl_intel_thread_dll']意味着它已經鏈接到MKL/BLAS成功了嗎? – machen

    +0

    我在Process程序運行時使用ProcessExplorer,在運行過程中,我發現mkl dll名字出現在ProcessExplorer python程序中,這是否意味着MKL實際上是鏈接成功? – machen

    +0

    @machen在所有情況下,99.9%就夠了。你看到任何blas-library加載了嗎?如果不是那麼,如果只有mkl可以使用 - 你的代碼是否使用mkl是另一個問題,但它不使用bla。 – ead