python-Scipy最小化函数似乎自己创建了多个线程?

我正在使用scipy最小化功能.它所调用的函数是用Cython编译的,并具有我编写的底层C实现,但这并不重要.由于某种原因,当我运行程序时,它会创建尽可能多的线程来填充我的所有cpus.例如,如果我运行top时,我只创建了要在一个CPU上运行的程序,则可以看到正在使用800%的cpu或在htop上可以看到使用了8个单独的处理器.我什至认为scipy甚至没有并行处理功能,也找不到与此相关的任何文档.有什么可能发生,有什么办法可以控制它?

解决方法:

如果有一些BLAS-implementation(具有线程支持)可用(例如Ubuntu上的默认设置),则某些表达式,例如np.dot()(据我所知只是密集的情况)将自动并行运行(reference).另一个可能的示例是稀疏矩阵分解与SuperLU.

当然,不同的最小化器将表现不同.

牛顿型方法(核心:解决稀疏线性方程组)可能基于SuperLU(如果代码不是常见的旧Fortran / C方法之一,则整个代码是独立的). CG类型的方法主要基于矩阵向量乘积(np.dot;因此稠密情况将是并行的).

要对此进行一些控制,请启动with this SO question.

上一篇:python-如何从scipy结果中提取p值


下一篇:python-有效地将大量SciPy稀疏矩阵条目设置为零