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

bac*_*eer 4 python multithreading scipy

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

sas*_*cha 7

如果某些BLAS 实现(具有线程支持)可用(例如 Ubuntu 上的默认值),则某些表达式np.dot()(据我所知仅是密集情况)将自动并行运行(参考)另一个可能的例子是使用SuperLU进行稀疏矩阵分解。

当然,不同的最小化器会有不同的表现。

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

为了对此进行一些控制,请从这个SO问题开始。