1

我一直在和一些朋友一起将 Matlab 遗传算法转换为 C++,它目前按顺序工作。Matlab 不再是我们当前代码的一部分。

我们希望在集群上使用它,但资源有点枯竭。我们在大学有一个可用的集群,它配备了 Rocks 和 OpenMPI,但我不确定从哪里开始使用它。

我们目前有 2D 和 3D 阵列设置,其中包含数据,当系统在模型之间进行交叉或交换时,它只是尝试交换 2D 和 3D 阵列的一部分。有哪些好方法可以将这些结构跨多个节点分开?

4

2 回答 2

1

如果你在做矩阵计算,那么是否有一个很好的方法来划分计算很大程度上取决于计算本身。

我强烈推荐 Golub 和 van Loan 的书,“Matrix Computations, 3rd Ed.”。其中有一整章专门讨论并行计算(第 6 章)。

OpenMPI 是一个很好的中间件来解决这个问题。由于您是在 C++ 中执行此操作,因此您还可以查看 zeromq。两者有不同的语义,一个可能比另一个更喜欢你的问题空间或你的技能。

此外,您应该知道并行矩阵计算(通常是信号处理,但还有许多其他应用)是一个非常非常活跃的研究领域。

于 2009-04-22T01:26:42.130 回答
0

健身计算:

您通常只需要了解一个个体即可计算其适应度,因此您可以通过将个体分配到每个核心来处理整个人口。当一个人的适应度被计算出来时,把那个核心交给一个新的人。

交叉:

分而治之的方法可能非常适合这个问题。将您的数组分解为由每个 CPU 内核处理的块,然后可能添加一个全局交叉步骤(配对的子集)以确保您能够适当地在多维空间中移动。

于 2009-04-22T16:45:39.283 回答