Numpy突然使用所有CPU

phy*_*Guy 6 python numpy

直到最近,当我使用像np.dot(A,B)这样的numpy方法时,只使用了一个核心.但是,从今天开始,我的linux机器的所有8个核心都在使用,这是一个问题.

最小的工作示例:

import numpy as np
N = 100

a = np.random.rand(N,N)
b = np.random.rand(N,N)

for i in range(100000):
    a = np.dot(a,b)
Run Code Online (Sandbox Code Playgroud)

在我的另一台笔记本电脑上,它在单个核心上运行良好.这可能是由于一些新的图书馆?

今天早上我通过pip更新了matplotlib和cairocffi,但这就是全部.

任何想法如何回到单核心?

编辑:

我跑的时候

np.__config__.show()
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

openblas_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
blas_mkl_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = ['openblas', 'openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
    library_dirs = ['/usr/local/lib']
Run Code Online (Sandbox Code Playgroud)

Pan*_*aga 5

这可能是因为numpy链接到多线程openBLAS库。尝试设置全局环境变量以将线程关联性设置为:

export OPENBLAS_MAIN_FREE=1

# Now run your python script.
Run Code Online (Sandbox Code Playgroud)

可以使用另一种替代方法来ATLAS代替OpenBLAS。请参阅此帖子以了解更多信息(https://shahhj.wordpress.com/2013/10/27/numpy-and-blas-no-problemo/)。这篇文章还提出了一些其他的解决方法,可能值得尝试。