看起来我的numpy库正在使用4个线程,设置OMP_NUM_THREADS=1
并不能阻止这一点。numpy.show_config()
给出了这些结果:
atlas_threads_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = f77
include_dirs = ['/usr/include']
blas_opt_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = c
include_dirs = ['/usr/include']
atlas_blas_threads_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = c
include_dirs = ['/usr/include']
openblas_info:
NOT AVAILABLE
lapack_opt_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = f77
include_dirs = ['/usr/include']
字符串
所以我知道它是使用线程,但我不知道如何使它使用1线程的矩阵乘法。
5条答案
按热度按时间ct2axkht1#
有一些常见的多CPU库用于数值计算,包括NumPy内部。有一些环境标志,您可以在运行脚本之前设置 * 以限制它们使用的CPUS数量。
尝试设置以下所有内容:
字符串
有时候,查看多线程到底是在哪里引入的有点棘手。
其他答案显示了其他库的环境标志。它们也可以工作。
pobjuy322#
环境变量不止3个。以下是环境变量的完整列表以及使用该变量控制其生成的线程数的包。注意,在执行
import numpy
之前需要设置这些变量:字符串
在实践中,你可以做到:
型
请注意,截至2018年11月,Numpy开发人员正在努力在您执行
import numpy
之后实现这一点。一旦他们提交了这些更改,我将更新这篇文章。hwazgwia3#
关于在Python脚本中执行此操作 * 而不是在bash提示符下执行此操作,根据this thread,您可以执行以下操作(与上面的答案相同的命令):
字符串
但是**你必须在 * 执行
import numpy
之前把它放进去。**显然numpy只在导入时检查这个。(this是根据@kη伊韦斯上面的评论作为答案重新发布的。)
p5fdfcr14#
在尝试了上面的一些解决方案后,我在Numpy docs中找到了对threadpoolctl的引用。这很有效,即使numpy已经导入,也可以使用。
字符串
只要确保使用
user_api
,当你这样做时,它会列出:型
ycl3bljg5#
我可以在运行时通过以下方式解决这个问题:
字符串
我使用下面的代码来使这个片段不太可能在脚本/包中引起问题:
型