并行python,还是MPI?

owa*_*ari 6 python parallel-processing cluster-computing mpi smp

我有一个带有大量符号计算的代码(许多多个符号积分).此外,我可以访问8核cpu计算机(具有18 GB RAM)和一个小型32 cpu集群.我更喜欢留在我教授的8核PC而不是在更有限的时间内使用他的集群去另一个教授的实验室,但是,我不确定它是否适用于SMP系统,所以我正在寻找一个并行工具的Python可以同时在被使用SMP集群,当然更喜欢在一个系统上的代码是容易且最小努力可修改为其他系统上使用.

到目前为止,我发现并行Python(PP)有望满足我的需求,但我最近告诉MPI也做同样的事情(pyMPI或MPI4py).我无法批准这一点,因为在网上似乎很少讨论这个问题,只是在这里说MPI(pyMPI或MPI4py)只能用于集群,如果我对"仅"这一点是对的!

"Parallel Python"是我唯一的选择,还是我也可以愉快地使用基于MPI的解决方案?哪一个对我的需求更有希望?

PS.它们似乎没有一个非常全面的文档,所以如果你知道一些链接到他们的官方网站,可以帮助新手并行计算我会非常感激,如果你也在你的答案中提到它们:)


编辑.

我的代码在另一个内部有两个循环,外部循环不能并行化,因为它是一个迭代方法(递归解决方案),每个步骤取决于在上一步中计算的值.外环包含内环3个额外方程,其计算取决于内环的整个结果.然而,内环(其包含在每个步骤中可计算的12个方程中的9个)可以安全地并行化,所有3*3方程彼此独立,仅取决于前一步骤.我的所有方程计算都很重,因为每个方程包含许多多个符号积分.貌似我可以并行化内部循环的9个方程分别在这9个方程中的每一个中进行积分计算,并且还将内部循环旁边的其他3个方程中的所有积分并行.你可以在这里找到我的代码,如果它可以帮助你更好地理解我的需要,它写在SageMath里面.

tac*_*ell 3

我会查看multiprocessing (doc),它提供了一系列用于生成和处理子流程的好工具。

引用文档:

multiprocessing 是一个使用类似于线程模块的 API 支持生成进程的包。多处理包提供本地和远程并发,通过使用子进程而不是线程有效地回避全局解释器锁。

从评论中我认为它Poolmap满足您的目的(doc)

def work_done_in_inner_loop(arg):
    # put your work code here
    pass

p = Pool(9)
for o in outer_loop:
     # what ever else you do
     list_of_args = [...] # what your inner loop currently loops over
     res = p.map(work_done_in_inner_loop,list_of_args])
     # rest of code
Run Code Online (Sandbox Code Playgroud)

  • “多处理”可以在一组独立的计算机上运行,​​每台计算机都运行一个“远程管理器”。它们是在云中还是在本地集群中并不重要,只要您可以在它们之间连接套接字即可。这使事情变得非常简单,但这确实意味着如果您的集群中有任何奇特的功能,“多处理”将无法利用它们。 (2认同)