我使用的是scipy最小化函数。它调用的函数是用Cython编译的,并且有一个我写的底层C++实现,但这并不重要。由于某些原因,当我运行我的程序时,它会创建尽可能多的线程来填满我的所有CPU。例如,如果我运行top,我可以看到800%的cpu正在使用,或者在htop上,我可以看到8个单独的处理器正在使用,而我只创建了一个要在其中一个上运行的程序我认为scipy甚至没有并行处理功能,我找不到任何与此相关的文档。可能会发生什么,有什么办法控制它吗?
最佳答案
如果有一些BLAS-implementation(支持线程)可用(例如ubuntu上的默认值),一些像np.dot()
(据我所知只有密集的大小写)这样的表达式将自动并行运行。另一个可能的例子是稀疏矩阵分解。
当然,不同的极小化者会有不同的行为。
牛顿型方法(核心:求解稀疏线性方程组)可能是基于superlu(如果代码不是常用的fortran/c代码之一,则整个代码是自包含的)。CG类型的方法主要基于矩阵向量积(np.dot;因此稠密情况将是并行的)。
要对此进行一些控制,请启动(reference)。