我有一个包含大量符号计算的代码(许多多重符号积分)。此外,我还可以访问 8 核 cpu 计算机(具有 18 GB RAM)和小型 32 cpu 集群。我更愿意留在我教授的 8 核 pc 上,而不是在更有限的时间内使用他的集群去另一位教授的实验室,但是,我不确定它是否适用于 SMP 系统,所以我正在寻找 <Python 中的 em>并行工具,可用于SMP 和Clusters,当然更喜欢一个系统上的代码可以轻松且轻松地修改以在其他系统上使用。
到目前为止,我发现并行 Python (PP) 很有希望满足我的需求,但我最近告诉我 MPI 也有同样的作用(pyMPI 或 MPI4py)。我不能同意这一点,因为网络上对此似乎很少讨论,只有 here据说 MPI(pyMPI 或 MPI4py)仅可用于集群,如果我对“仅”是正确的话!
“Parallel Python”是我唯一的选择,还是我也可以愉快地使用基于 MPI 的解决方案?哪一个更有希望满足我的需求?
附言。似乎他们都没有非常全面的文档,所以如果你知道除了他们的官方网站之外的一些链接可以帮助并行计算的新手,如果你也在你的回答中提到它们,我将非常感激:)
编辑。
我的代码有两个循环,一个在另一个循环中,外循环 不能并行化,因为它是一种迭代方法(递归解决方案),每一步都取决于值在其上一步中计算。外循环包含内循环以及3 个额外的方程,它们的计算取决于内循环的全部结果。但是,内部循环(包含每一步可计算的 12 个方程中的 9 个)可以安全地并行化,所有 3*3 方程彼此独立,仅取决于前一步。我所有的方程在计算上都非常繁重,因为每个方程都包含许多多个符号积分。看来我可以分别并行化内部循环的 9 个方程式 和这 9 个方程式中每个方程式的积分计算,还可以并行化其他 3 个方程式中的所有积分内循环。你可以找到我的代码 here如果它能帮助你更好地理解我的需求,它写在 SageMath 中。
最佳答案
我会查看多处理
(doc)它提供了一堆用于生成和处理子流程的好工具。
引用文档:
multiprocessing is a package that supports spawning processes using an API similar to the threading module. The multiprocessing package offers both local and remote concurrency, effectively side-stepping the Global Interpreter Lock by using subprocesses instead of threads.
根据评论,我认为 Pool
和它的 map
可以满足您的目的 (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
关于python - 并行 python 还是 MPI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617019/