用于并行图处理的 C++ 库libgrape-lite

简介: libgrape-lite是阿里巴巴的一个 C++ 库,用于并行图处理。它与先前系统的不同之处在于,它能够通过遵循GRAPE的PIE编程模型将顺序图算法作为一个整体进行并行化。

image.png

libgrape-lite是阿里巴巴的一个 C++ 库,用于并行图处理。它与先前系统的不同之处在于,它能够通过遵循GRAPEPIE编程模型将顺序图算法作为一个整体进行并行化。顺序算法可以很容易地“插入” libgrape-lite,只需进行很小的更改,并且可以并行化以有效地处理大图。除了易于编程之外,libgrape-lite 还被设计为高效灵活,以应对现实生活中的图形应用程序的规模、多样性和复杂性。

构建libgrape-lite

依赖关系

libgrape-lite是在 CentOS 7 上开发和测试的。它也应该适用于其他类 Unix 发行版。构建 libgrape-lite 需要安装以下软件作为依赖项。

  • CMake (>=2.8)
  • 符合 C++-11 标准的现代 C++ 编译器。(g++ >= 4.8.1 或 clang++ >= 3.3)
  • MPICH (>= 2.1.4) 或OpenMPI (>= 3.0.0)
  • glog (>= 0.3.4)

以下是可选功能的依赖项:

  • jemalloc (>= 5.0.0) 更好的内存分配;
  • Doxygen (>= 1.8) 用于生成文档;
  • Linux HUGE_PAGES支持,以获得更好的性能。

示例需要额外的依赖项:

构建 libgrape-lite 和示例

安装所需的依赖项后,转到 libgrape-lite 的根目录并使用 CMake 进行外源构建。

mkdir build && cd build
cmake ..
make -j

建筑物的目标包括一个共享/静态库,和两组的例子:analytical_appsgnn_sampler

或者,您可以使用以下命令构建特定目标:

make libgrape-lite # or
make analytical_apps # or
make gnn_sampler

运行 libgrape-lite 应用程序

图表格式

libgrape-lite 的输入按照LDBC Graph Analytics基准进行格式化,每个图有两个文件,一个.v包含 1 或 2 列顶点的文件,它们是一个 vertex_id,后跟分配给顶点的数据;以及一个.e包含 2 或 3 列的边文件,相应地表示源、目标和可选的边上的数据。见示例文件p2p-31.vp2p-31.e目录。

示例应用

libgrape-lite提供了来自 LDBC 基准的六种算法作为示例。确定性算法有单源最短路径(SSSP)、连通分量(WCC)、PageRank、局部聚类系数(LCC)、标签传播社区检测(CDLP)和广度优先搜索(BFS)。

要运行特定的分析应用程序,用户可以使用如下命令:

# run single-source shortest path with 4 workers in local.
mpirun -n 4 ./run_app --vfile ../dataset/p2p-31.v --efile ../dataset/p2p-31.e --application sssp --sssp_source 6 --out_prefix ./output_sssp --directed
# or run connected component with 4 workers on a cluster.
# HOSTFILE provides a list of hosts where MPI processes are launched. 
mpirun -n 4 -hostfile HOSTFILE ./run_app --application=wcc --vfile ../dataset/p2p-31.v --efile ../dataset/p2p-31.e --out_prefix ./output_wcc
# see more flags info.
./run_app --help

LDBC 基准测试

分析应用程序支持 LDBC 分析基准套件与提供的ldbc_driver. 有关详细信息,请参阅ldbc_driver。可以在此处找到 libgrape-lite 和其他最先进系统的基准测试结果。

GNN 采样器

除了离线图形分析,libgrape-lite 还可以用于处理更复杂的图形任务。作为示例,包含一个用于 GNN 训练/推理动态图的采样器(进行图更改和查询,并通过Kafka生成结果)。有关更多详细信息,请参阅examples/gnn_sampler

文档

文档是使用 Doxygen 生成的。用户可以使用以下命令在 build 目录中构建 doxygen 文档:

cd build
make doc
# open docs/index.html

最新版本的在线文档可以在https://alibaba.github.io/libgrape-lite找到

执照

libgrape-liteApache License 2.0下分发。请注意,第三方库可能与 libgrape-lite 的许可不同。

致谢

  • flat_hash_map,一个高效的 hashmap 实现;
  • 冲剂,针对收集LDBC基准性能信息的工具;
  • xoroshiro,一个伪随机数生成器。


相关文章
|
2月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
69 6
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
101 10
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
71 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
58 1
|
3月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
40 6
|
3月前
|
安全 C++
超级好用的C++实用库之环形内存池
超级好用的C++实用库之环形内存池
50 5
|
3月前
|
缓存 网络协议 Linux
超级好用的C++实用库之套接字
超级好用的C++实用库之套接字
34 1
|
3月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
105 1
|
3月前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
64 0
|
3月前
|
网络协议 Linux C++
超级好用的C++实用库之网络
超级好用的C++实用库之网络
49 0