Answers:
正如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接口。
如果您正在从事并行搜索,优化(单源最短路径)和面向边缘(最大独立集)的前沿,那么您还将对免费提供的Graph500基准感兴趣。
我还要提及STINGER,这是一种为并行性设计的动态图数据结构。根据该网站,它旨在实现以下目标:
可移植性:为STINGER编写的算法可以轻松在多种语言和框架之间进行翻译/移植
生产率:STINGER应该提供通用的抽象数据结构,以便大型图社区可以快速利用彼此的研究成果。这在哲学上类似于数值算法社区隐式使用稀疏和密集矩阵。
性能:公认没有一种单一的数据结构对于每种图形算法都是最佳的。STINGER的目标是配置一个可以很好地运行大多数算法的明智的数据结构。与广泛的一组典型图形算法中的另一种通用数据结构相比,使用STINGER不会出现明显的性能下降。STINGER应该假定共享的内存地址空间,并允许顺序或并行算法。数据结构应允许并行算法尽可能利用并发性。
它不像LEMON或Boost Graph库那样通用,并且处于开发的早期阶段。如果您检查出来,我会对您的评论感兴趣。