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