将集群功能添加到C ++ 11线程应用程序

时间:2013-10-10 03:37:56

标签: c++ multithreading c++11 cluster-computing

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

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

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

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

1 个答案:

答案 0 :(得分:2)

如果不了解您尝试解决的图形问题,以下是您可能值得考虑的一些选项。

<强> MPI

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

各种AMQP协议

0MQ QPID exc。

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

<强> HPX

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