我有一个多线程 C++11 程序(使用 C++11 mt 库),它将受益于更多的计算资源。在我感兴趣的规模上,内存不是问题,但可扩展并不是一件坏事。
具体来说,我要解决的问题是在图中找到最大集团的大小。为了分发程序,我采用 N 阶图并将其分解为 N 个子图,每个子图是一个唯一节点的邻域。找到每个子图的最大团的大小,并将这些中的最大值加上一个作为整个图的最大团返回。
每个图(全图和子图)的节点表示为整数数组。边缘也是如此。因此,从技术上讲,我需要在节点之间进行通信的只是一个整数数组。返回结果将是一个 int,即找到的最大 clique 的大小。
根据我的阅读,MPI 专注于需要分布式内存的问题。对于我的问题,这似乎是不必要的。问题是在 200MB 内存(16 个内核上有 16 个线程)时长达几分钟,因此,在 4GB(我的大多数计算节点的最大值)时,即使我拥有所有节点,它在计算上也是不可行的。所以,我的问题是:实现这一目标的好方法是什么?如果我对 MPI 有误,请随时纠正我。