numpy MKL vs 标准 - 有什么要求?

numpy MKL vs Standard - What are the requirements?

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

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

    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']
    

所以我尝试浏览到目录 C:/Program Files (x86)/Intel/Composer XE/mkl/include 以查看是否有任何内容 - 但我没有安装这些库。所以理想情况下它应该不能正常工作,因为文件丢失了?

致 1:

许多人使用 Gohlke 的基于 MKL 的库 - afaik - 的主要原因是 windows 没有免费的 64 位 fortran 编译器。所以使用 MKL 并不是主要基于性能原因。 检查例如对此答案的评论:

致 2:

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

Numpy+MKL is linked statically to the Intel® Math Kernel Library. Numpy+MKL includes the runtime libraries for Intel C++ and Fortran in the numpy.core directory.

所以,他在编译期间需要那些库——你不需要它们。这就是 "static" 链接的要点:链接库中的所有功能在编译过程后都包含在 numpy 库中。