我正在寻找C ++中的并行动态图库


11

您好scicomp社区,

我曾使用诸如NetworkX(Python),JUNGYFiles(Java)之类的框架从事图算法研究。我现在正在进入并行和高性能计算领域。对于一个新项目,我正在寻找具有以下功能的C ++图形库:

  • 具有直观的界面,可进行算法开发
  • 支持动态操作:例如,任意节点/边缘的插入和删除
  • 支持并行化:例如,使程序员免受多线程问题的影响
  • 内存开销低,适合高性能计算

请建议一些图书馆,并讨论这些标准以及利弊。

Answers:


11

Boost图形库和LEMON

正如Daniel在他的综合答案中提到的那样,功能最全的常规C ++库是Boost Graph Library。有一个新的分布式内存扩展,它可以执行一些基本算法,例如广度优先和深度优先搜索,最小生成树以及连接的组件搜索,但是我对新项目不是很熟悉。Boost Graph库本身声誉卓著,并在全球许多项目中使用。

如果您正在执行基本的HPC图形工作,则可能要从Boost Graph库开始,但要注意,许多HPC C ++编译器在使用Boost时会遇到困难(尽管它相当严格地遵守C ++标准),并且您可能需要使用Boost的较旧版本或非供应商编译器(例如GCC),以使其在HPC系统上运行。

快速浏览LEMON的存储库表明,IBM BlueGene超级计算团队参与其中,但是我看不到MPI的任何依赖关系或配置,因此目前这可能只是一个串行图库。

负载平衡和动态图(重新)分区

如果您对负载平衡和动态图分区感兴趣,则有更多选择。也许最著名的库是ParMETIS,它已于去年更新到版本4。ParMETIS具有基于顶点的加权,这对于多物理场仿真非常重要。

ParMETIS的欧洲竞争对手是PT-Scotch,它在某些类型的问题上具有更好的性能,但是与ParMETIS相似,它不经常更新。

您可能也对Zoltan感兴趣,Zoltan是Sandia国家实验室Trilinos元软件包的一部分,用于C ++科学计算。Zoltan具有自己的分层分区器,并与ParMETIS和PT-Scotch接口。

图500

如果您正在从事并行搜索,优化(单源最短路径)和面向边缘(最大独立集)的前沿,那么您还将对免费提供的Graph500基准感兴趣。


1
问题:Parallel Boost Graph Library是用于分布式内存并行性的。普通的Boost Graph库是否适合与OpenMP共享内存并行化?
clstaudt 2012年

@clstaudt-这将是特定于问题的。您将不得不更深入地了解算法的细节,以获得更好的答案(这可能是一个新问题)。
阿隆·艾玛迪亚

5

也许,Boost图形库是您所需要的。它具有解析器,可读取以GraphViz的DOT格式指定的图。虽然我不太了解内存开销,但它确实提供了并行化的变体。

另一个图库是LEMON,但我并不十分了解它,如果它支持并行化,则不会发布它。它的网站给人留下了深刻的印象;)


LEMON对我来说看起来也不错,但是我完全不知道是否可以将其用于共享内存并行代码(OpenMP)。
clstaudt 2012年

老实说,我都不是。但是也许您可以使用它来声明问题的共享数据结构,并在不同的线程中运行其算法。也许您可以将问题细分为合适的子问题。
丹尼尔·埃伯茨

5

我还要提及STINGER,这是一种为并行性设计的动态图数据结构。根据该网站,它旨在实现以下目标:

可移植性:为STINGER编写的算法可以轻松在多种语言和框架之间进行翻译/移植

生产率:STINGER应该提供通用的抽象数据结构,以便大型图社区可以快速利用彼此的研究成果。这在哲学上类似于数值算法社区隐式使用稀疏和密集矩阵。

性能:公认没有一种单一的数据结构对于每种图形算法都是最佳的。STINGER的目标是配置一个可以很好地运行大多数算法的明智的数据结构。与广泛的一组典型图形算法中的另一种通用数据结构相比,使用STINGER不会出现明显的性能下降。STINGER应该假定共享的内存地址空间,并允许顺序或并行算法。数据结构应允许并行算法尽可能利用并发性。

它不像LEMON或Boost Graph库那样通用,并且处于开发的早期阶段。如果您检查出来,我会对您的评论感兴趣。


STINGER来自佐治亚理工学院David Bader的实验室。他因在Graph500上的工作而在HPC社区中广为人知,感谢您提到这一点!
阿隆·艾玛迪亚
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.