我一直与一些朋友合作,将MATLAB遗传算法转换为C ++,并且目前按顺序运行。 MATLAB不再是我们当前代码的一部分。

我们希望在集群上使用它,但资源有些干燥。我们在大学有一个群集,配备了岩石和OpenMPI,但我不确定从哪里开始使用它。

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

有帮助吗?

解决方案

如果您正在进行矩阵计算,那么即使有一个很好的方法来分区计算也很大程度上取决于计算本身。

我强烈推荐Golub and Van Loan Book,“ Matrix Computations,第三版”。在其中,整章专门用于并行计算(第6章)。

OpenMPI是用于此问题的良好中间件。由于您在C ++中进行此操作,因此您也可能会查看Zeromq。两者具有不同的语义,一个人可能比另一个更喜欢您的问题空间或技能。

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

其他提示

健身计算:

通常,您只需要了解一个人即可计算其健康状况,因此您可以通过将个人拖到每个核心来通过人群进行工作。计算个人的健康状况后,将那个核心一个新个人核心。

跨界:

鸿沟和征服方法可能非常适合这个问题。将您的数组分解成由每个CPU核心处理的块,然后添加一个全局交叉步骤(配对的子集),以确保您能够适当地穿过多维空间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top