我有一个 cython 优化的速度程序,但速度仍然很慢。我想知道我的 cython 程序是否使用 OpenBLAS 还是 MKL(链接 openblas/mkl 库)?如何知道这一点?
这与查看进程使用哪些 dll/共享库没有什么不同。启动 python 并导入你的 cython 模块:
import my_cython_module
Python 现在将动态加载您的模块以及模块所需的所有共享库,这也意味着 MKL 或 BLAS。
在 Linux 上:
- 获取程序的pid:
pgrep python
- 看一下加载的共享库:
cat /proc/<PID>/maps
在 Windows 上:
- 您可以使用ProcessExplorer ,选择 python 进程并查看加载的 dll (Ctrl+D)。
- 您可以使用 VisualStudio-Debugger 附加到 python 进程并查看模块 (Ctrl+Alt+U)。
现在,如果您同时加载了(blas 和 mkl)(可能是这种情况),我想您必须运行计算并使用调试器查看调用堆栈以确保确定。
<小时/>
大多数时候,您的 cython 模块不会直接链接到 MKL/BLAS,而是通过 numpy。在本例中,如 question 的链接所示。由DavidW提供,您可以通过以下方式查找:
>>> numpy.show_config()
lapack_opt_info:
libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
...
我是一名优秀的程序员,十分优秀!