2

我有一个多线程 C++11 程序(使用 C++11 mt 库),它将受益于更多的计算资源。在我感兴趣的规模上,内存不是问题,但可扩展并不是一件坏事。

具体来说,我要解决的问题是在图中找到最大集团的大小。为了分发程序,我采用 N 阶图并将其分解为 N 个子图,每个子图是一个唯一节点的邻域。找到每个子图的最大团的大小,并将这些中的最大值加上一个作为整个图的最大团返回。

每个图(全图和子图)的节点表示为整数数组。边缘也是如此。因此,从技术上讲,我需要在节点之间进行通信的只是一个整数数组。返回结果将是一个 int,即找到的最大 clique 的大小。

根据我的阅读,MPI 专注于需要分布式内存的问题。对于我的问题,这似乎是不必要的。问题是在 200MB 内存(16 个内核上有 16 个线程)时长达几分钟,因此,在 4GB(我的大多数计算节点的最大值)时,即使我拥有所有节点,它在计算上也是不可行的。所以,我的问题是:实现这一目标的好方法是什么?如果我对 MPI 有误,请随时纠正我。

4

1 回答 1

2

在不了解您尝试解决的图形问题的情况下,这里有一些可能值得考虑的选项。

MPI

- 你已经提到,这是你的标准学术风格,用于分布式计算的高性能计算事实上的 API,你不会出错,它几乎可以扩展到任意数量的内核。还有一个 boost C++ api。缺点是它会在第一个错误或消息失败时崩溃。

任何各种 AMQP 协议

0MQ QPID 除外

-这些也是基于消息传递但容错且性能低于 MPI。比 MPI 更容易使用,但容错可能与您的问题无关。

HPX

- 一种混合方法,以最先进的方式扩展 C++11 线程 API 并允许分布式计算。如果您最熟悉线程,这可能是一个不错的选择。

于 2013-10-10T03:41:58.777 回答