numpy MKL vs Standard - 有什么要求?

时间:2015-03-04 18:14:02

标签: python numpy intel-mkl

我通常从here获取最新的科学Python包。我注意到有两个版本的numpy可用 - 标准版和MKL版。我的问题:

  1. 我们实际获得了多少性能改进 切换到MKL版本?在对真实数据集和问题进行测试后,是否有人有基准测试?
  2. 我们是否需要拥有英特尔的专有库来运行MKL版本?我问这个是因为从上面的链接安装MKL版本numpy似乎工作得很好 - 我也没有看到任何性能改进。这让我很好奇,我根据答案here运行了这个命令np.__config__.show(),它给了我以下内容:

    lapack_opt_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_blas95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'libiomp5md', 'libifportmd', 'mkl_lapack95_lp64', 'mkl_blas95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'libiomp5md', 'libifportmd']
    library_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/include']
    blas_opt_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_blas95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'libiomp5md', 'libifportmd']
    library_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/include']
    openblas_lapack_info:
    NOT AVAILABLE
    lapack_mkl_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_blas95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'libiomp5md', 'libifportmd', 'mkl_lapack95_lp64', 'mkl_blas95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'libiomp5md', 'libifportmd']
    library_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/include']
    blas_mkl_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_blas95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'libiomp5md', 'libifportmd']
    library_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/include']
    mkl_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_blas95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'libiomp5md', 'libifportmd']
    library_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['C:/Program Files (x86)/Intel/Composer XE/mkl/include']
    
  3. 所以我尝试浏览目录C:/Program Files (x86)/Intel/Composer XE/mkl/include以查看是否有任何内容 - 但我没有安装这些库。理想情况下它应该不正常,因为文件丢失了?

1 个答案:

答案 0 :(得分:2)

至1:

许多人使用Gohlke基于MKL的库的主要原因 - afaik - 就是那里没有免费的64位Fortran编译器。因此,使用MKL主要不是基于性能原因。 检查例如对这个答案的评论: https://stackoverflow.com/a/11200146/2319400

到2:

不,你不需要它们。正如Christoph Gohlke的网站告诉你的那样:

  

Numpy + MKL与英特尔®数学核心函数库静态链接。   Numpy + MKL在numpy.core目录中包含Intel C ++和Fortran的运行时库。

因此,他在编译期间需要这些库 - 您不需要它们。这就是“静态”链接的要点:链接库中的所有功能都包含在编译过程之后的numpy库中。