【发布时间】:2012-11-17 00:13:25
【问题描述】:
我有一个包含大量符号计算的代码(许多多个符号积分)。我还可以访问一台 8 核 cpu 计算机(具有 18 GB RAM)和一个小型 32 cpu 集群。我更喜欢留在我教授的 8 核 pc 上,而不是在更有限的时间内使用他的集群去另一个教授的实验室,但是,我不确定它是否可以在 SMP 系统上运行,所以我正在寻找一个 Python 中的 em>并行工具,可以在 SMP 和 Clusters 上使用,当然更喜欢一个系统上的代码可以轻松轻松地修改以在其他系统上使用。
到目前为止,我发现 Parallel Python (PP) 很有希望满足我的需求,但我最近告诉 MPI 也可以做到这一点(pyMPI 或 MPI4py)。我不能同意这一点,因为网上似乎很少讨论这个问题,只有 here 声明 MPI(pyMPI 或 MPI4py)仅可用于 集群,如果我是对的关于那个“唯一”!
“Parallel Python”是我唯一的选择,还是我也可以愉快地使用基于 MPI 的解决方案?哪一个更有希望满足我的需求?
附言。似乎他们都没有非常全面的文档,所以如果您知道他们的官方网站以外的一些链接可以帮助新手进行并行计算,如果您在回答中也提到它们,我将不胜感激:)
编辑。
我的代码有两个循环,一个在另一个,外循环不能并行化,因为它是一种迭代方法(递归解决方案),每个步骤取决于值在其上一步中计算。外循环包含内循环以及3个额外方程,它们的计算取决于内循环的整个结果。然而,内循环(包含每一步可计算的 12 个方程中的 9 个)可以安全地并行化,所有 3*3 方程彼此独立,仅取决于上一步。我所有的方程计算量都很大,因为每个方程都包含许多多重符号积分。似乎我可以分别并行化 内循环的 9 个方程 和 这 9 个方程中的每个方程 中的积分计算,并且还可以并行化其他 3 个方程中的所有 积分内循环。你可以找到我的代码here,如果它可以帮助你更好地理解我的需求,它写在 SageMath 里面。
【问题讨论】:
-
我不知道这是否相关,因为它只是您整体解决方案的配套选项,但我想我会添加评论...ZeroMQ 是一种开发方式无论您的“工人”在可扩展性方面是透明的。您可以从本地进程开始,然后简单地将其扩展到通过套接字连接的工作人员。代码逻辑保持不变。
-
MPI 可以在单台计算机上使用,非常容易。但是,除非您正在执行多语言程序或有一些独立的理由来学习 MPI,否则它可能不是您想要的解决方案,因为与多处理相比,要学习的概念更多。
-
zmq 将是系统组件之间的协调和通信形式。假设您决定使用
multiprocessing模块。您可以让 8 个工作进程进入一个接受作业的工作循环,通过 zmq 推/拉进行通信。他们只是消耗工作并将结果传回另一个 zmq 套接字。如果您想将其扩展到 100 台网络机器,它们只需连接同一推/拉以接受工作。系统看不出区别。 python 多进程模块真的是你所需要的。您甚至可以让使用其他语言的工作人员进行连接。 -
这里的信息太多,无法在两个线程的 cmets 中回复,所以我将它们添加为答案,即使它不是真正的答案。我应该提一下,我很少使用 IPython 的并行功能,所以我无法将其与
multiprocessing进行比较。 -
@Owari:因为 sage,在 ipython 中运行你的代码很有挑战性!但是您的代码可以很容易地转换为 scipy/numpy/matplotlib 等价物;如果可以的话;那么剩下的部分就很容易了.. .
标签: python parallel-processing cluster-computing mpi smp