我一直在与一些朋友合作将Matlab遗传算法转换为C ++,它目前按顺序工作。 Matlab不再是我们当前代码的一部分。
我们希望在集群上使用它,但资源有点干。我们在大学有一个集群,它配备了Rocks和OpenMPI,但我不确定从哪里开始使用它。
我们目前使用其中的数据设置2D和3D阵列,当系统在模型之间进行交叉或交换时,它只是尝试交换2D和3D阵列的部分。有哪些好方法可以跨多个节点分离这些结构?
答案 0 :(得分:1)
如果您正在进行矩阵计算,那么是否有一种划分计算的好方法在很大程度上取决于计算本身。
我强烈推荐Golub和van Loan的书,“Matrix Computations,3rd Ed。”。其中有一章专门讨论并行计算(第6章)。
OpenMPI是一个用于此问题的精细中间件。既然你是用C ++做的,你也可以看看zeromq。这两者具有不同的语义,一个人可能更喜欢你的问题空间或你的技能组合。
此外,您应该知道并行矩阵计算(通常是信号处理,但还有许多其他应用程序)是一个非常非常活跃的研究领域。
答案 1 :(得分:0)
您通常只需要了解一个人来计算其适应性,因此您可以通过向每个核心发放个体来解决人口问题。当计算出个人的健康状况时,将该核心交给新人。
分而治之的方法可能非常适合这个问题。将数组分解为由每个CPU内核处理的块,然后可能添加一个全局交叉步骤(交配一对子集),以确保您能够适当地在多维空间中移动。