多核硬件上的 numpy



关于让numpy使用多核(在英特尔硬件上)进行内部和外部向量乘积、向量矩阵乘法等的最新情况如何?

如有必要,我很乐意重建numpy,但在这一点上,我正在寻找在不更改代码的情况下加快速度的方法。

作为参考,我的show_config()如下,我从未观察到使用多个内核numpy

atlas_threads_info:
    libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    language = f77
    include_dirs = ['/usr/local/atlas-3.9.16/include']
blas_opt_info:
    libraries = ['ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    define_macros = [('ATLAS_INFO', '"\"3.9.16\""')]
    language = c
    include_dirs = ['/usr/local/atlas-3.9.16/include']
atlas_blas_threads_info:
    libraries = ['ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    language = c
    include_dirs = ['/usr/local/atlas-3.9.16/include']
lapack_opt_info:
    libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    define_macros = [('ATLAS_INFO', '"\"3.9.16\""')]
    language = f77
    include_dirs = ['/usr/local/atlas-3.9.16/include']
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
mkl_info:
  NOT AVAILABLE

您可能应该首先检查 numpy 使用的 Atlas 构建是否是使用多线程构建的。您可以构建并运行以下命令来检查 Atlas 配置(直接来自 Atlas FAQ):

main()
/*
 * Compile, link and run with something like:
 *    gcc -o xprint_buildinfo -L[ATLAS lib dir] -latlas ; ./xprint_buildinfo
 * if link fails, you are using ATLAS version older than 3.3.6.
 */
{
   void ATL_buildinfo(void);
   ATL_buildinfo();
   exit(0);
}

如果你没有多线程版本的Atlas:"有你的问题"。如果是多线程的,那么你需要使用一个适当的大矩阵-矩阵乘积来练习一个多线程的 BLAS3 例程(可能是 dgemm),并查看是否使用了线程。我认为我说得对,Atlas 中的 BLAS 2 和 BLAS 1 例程都不支持多线程(这是有充分理由的,因为除了真正巨大的问题大小之外,没有性能优势)。

相关内容

  • 没有找到相关文章

最新更新