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

C++ 将群集功能添加到C++;11线程应用程序,c++,multithreading,c++11,cluster-computing,C++,Multithreading,C++11,Cluster Computing,我有一个多线程的C++11程序(使用C++11 mt库),它将受益于更多的计算资源。在我感兴趣的范围内,内存不是一个问题,但可伸缩性并不是一件坏事 具体来说,我要解决的问题是在一个图中找到最大团的大小。为了分发程序,我将一个N阶图分解成N个子图,每个子图都是唯一节点的邻域。找到每个子图的最大团的大小,其中的最大值加上1作为整个图的最大团返回 每个图(总图和子图)的节点表示为整数数组。边也是如此。所以,从技术上讲,我需要在节点之间通信的只是一个int数组。返回的结果将是一个int,即找到的max团

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

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

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


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

由于不太了解您试图解决的图形问题,以下是一些值得考虑的选项

MPI

-正如您已经提到的,这是您的标准学术风格,高性能计算事实上是分布式计算的API,您不会出错,它将扩展到几乎任何数量的核心。还有一个Boost C++ API。缺点是它会在第一个错误或消息失败时崩溃

任何一种AMQP协议

执行委员会

-它们也是基于消息传递的,但具有容错性,性能不如MPI。与MPI相比,使用起来稍微容易一些,但容错性可能与您的问题无关


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

英特尔发布的支持共享和分布式内存模型的版本。(但它是测试版产品。)HPX看起来正是我想要的。使用标准的C++11/14API是我决定这样做的最大因素。谢谢你的推荐。