【问题标题】:Make sure numpy is using MKL library on mac pro确保 numpy 在 mac pro 上使用 MKL 库
【发布时间】:2014-05-03 22:27:45
【问题描述】:

我正在使用 Enthought 的 Canopy/EPD 版本的 python,它附带与 MKL 链接的 numpy。我目前正在我的工作计算机(Windows 7,四核 i5 @ 3.33 Ghz,4 GB 内存)和我的家庭工作站(Mac Pro 3.1,Ubuntu 12.04,2x Quad Core Xeon)上并行运行一组模拟(使用 PP) @ 2.8 Ghz,6 GB 内存)。

但是当我对我的模拟进行基准测试时,它们在工作计算机上运行得更快(每次迭代 35 秒,而在 mac pro 上为 60 秒)。问题是内核之间的完美平衡(令人尴尬的并行问题),所以我怀疑家里的 linux 工作站上的 MKL 库存在问题。有没有办法验证 MKL 库是否真的在 python 中使用。我读过一些线程说你可以检查 python 是否链接到它,但它不能确保它被正确构建并且实际上正在被使用。

【问题讨论】:

  • scipy.show_config() 不是您想要的吗?不确定这是否算作“确保”它实际被使用。
  • 当我输入时,所有的 'library_dirs' 和 'include_dirs' 都说:“/home/vagrant/src/master-env/...”。是否正确(我的用户帐户不是“流浪者”,当我检查该文件夹时,它不存在)。该字段重要还是未使用?库正确报告“mkl_lapack95_lp64”等。

标签: numpy enthought intel-mkl


【解决方案1】:
>>> numpy.show_config()

您将看到类似这样的输出,表明 MKL 确实已链接。

lapack_opt_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
blas_opt_info:
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
openblas_info:
NOT AVAILABLE
lapack_mkl_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
blas_mkl_info:
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
mkl_info:
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']

【讨论】:

  • 关于您的潜在担忧,您是否考虑过物理核心与逻辑核心?您可以尝试调整环境变量 MKL_NUM_THREADS 以避免可能的颠簸。
  • 我会再看一遍,但我正在做的操作不是多线程的(很多 add()、multiply() 等,但没有 dot())。另外,我不确定为什么这在 XEON 上会成为问题,但在 i5 上不会出现
  • 这些路径是硬编码列表,您可以在 config.py 中找到,不一定是 numpy 使用的路径。
猜你喜欢
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2018-01-27
  • 2017-09-05
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多