【问题标题】:How to know cython program is using numpy+MKL or not using MKL?如何知道 cython 程序是使用 numpy+MKL 还是不使用 MKL?
【发布时间】:2017-10-05 03:19:56
【问题描述】:

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

【问题讨论】:

标签: python numpy cython intel-mkl openblas


【解决方案1】:

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

import my_cython_module

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

在 Linux 上:

  1. 获取程序的pid:pgrep python
  2. 看看加载的共享库:cat /proc/<PID>/maps

在 Windows 上:

  • 您可以使用ProcessExplorer,选择python进程并查看加载的dll(Ctrl+D)。
  • 您可以将 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']
...

【讨论】:

  • 是否 numpy.show_config() 显示:libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll'] 是否意味着它已经与 MKL/BLAS 成功关联?
  • 我在我的程序运行中使用了ProcessExplorer,在运行过程中,我发现ProcessExplorer python程序中出现了mkl dll名称,这是否意味着MKL实际上是链接成功的?
  • @machen 在 99.9% 的情况下,这已经足够了。你看到任何加载的 blas 库吗?如果不是那么,如果只能使用 mkl - 您的代码是否使用 mkl 是另一个问题,但它不使用 blas。
  • 我有一台IBM电源处理器机器(我用的是anaconda ppcle64版python),它不显示MKL,但显示openblas_info:libraries = ['openblas', 'openblas'],这是不是这个意思机器实际上是使用openBLAS,如果CPU不是intel,OpenBLAS是我目前最好的选择吗?
  • 我不太明白。你说python加载了mkl,所以它使用的是mkl。机器上安装了什么并不重要(我的机器上有多个不同的 mkl 版本和 openblas,但 anaconda 使用它安装的一个版本)我不知道哪个库/实现更适合你的机器。
猜你喜欢
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2015-10-18
  • 2018-12-23
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多