如何知道cython程序是使用numpy + MKL还是不使用MKL?

时间:2017-10-05 03:19:57

标签: python numpy cython intel-mkl openblas

我有一个cython优化的速度计划但仍然放慢速度。我想知道我的cython程序是使用OpenBLAS还是MKL(链接openblas / mkl库)? 怎么知道?

1 个答案:

答案 0 :(得分:1)

查看进程使用哪些dll /共享库并没有什么不同。启动python并导入你的cython-module:

import my_cython_module

Python现在将动态加载模块和模块所需的所有共享库,这也意味着MKL或BLAS。

在Linux上:

  1. 获取该计划的pid:pgrep python
  2. 查看已加载的共享库:cat /proc/<PID>/maps
  3. 在Windows上:

    • 您可以使用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']
    ...