用于并行图处理的 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月前
|
消息中间件 存储 开发工具
消息队列 MQ产品使用合集之C++如何使用Paho MQTT库进行连接、发布和订阅消息
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
49 0
|
6天前
|
算法 数据可视化 机器人
Pinocchio - 开源多刚体动力学 C++、Python库
Pinocchio - 开源多刚体动力学 C++、Python库
10 2
|
1月前
|
C++
C++一分钟之-文件系统库(fs)的使用
【7月更文挑战第18天】C++17的`<filesystem>`库简化了文件系统操作,包括`path`类和`directory_iterator`。`path`用于表示路径,`directory_iterator`用于遍历目录。常用功能有路径拼接、分解,创建/删除目录,以及遍历。错误处理、跨平台兼容性和性能是使用时需考虑的关键点。示例代码展示了如何初始化`path`、创建目录、删除目录以及处理异常。
48 1
|
12天前
|
编译器 C++ 开发者
Visual Studio属性表:在新项目中加入已配置好的C++库
通过以上步骤可以确保Visual Studio中新项目成功地加入了之前已配置好的C++库。这个过程帮助开发者有效地管理多个项目中共享的库文件,提升开发效率。
18 0
|
1月前
|
存储 安全 Linux
网络请求的高效处理:C++ libmicrohttpd库详解
网络请求的高效处理:C++ libmicrohttpd库详解
|
2月前
|
存储 算法 C++
C++一分钟之-标准模板库(STL)简介
【6月更文挑战第21天】C++ STL是高效通用的算法和数据结构集,简化编程任务。核心包括容器(如vector、list)、迭代器、算法(如sort、find)和适配器。常见问题涉及内存泄漏、迭代器失效、效率和算法误用。通过示例展示了如何排序、遍历和查找元素。掌握STL能提升效率,学习过程需注意常见陷阱。
34 4
|
1月前
|
存储 C++ 容器
C++一分钟之-正则表达式库(regex)
【7月更文挑战第7天】C++从C++11开始支持正则表达式,通过`<regex>`库提供功能。本文涵盖基本概念如`std::regex`、`std::smatch`,以及`regex_search`和`regex_match`的使用。常见问题包括大小写敏感性、特殊字符转义、贪婪与非贪婪匹配和捕获组。提供的代码示例展示了如何进行匹配、不区分大小写的匹配、特殊字符匹配、贪婪与非贪婪匹配和捕获组的使用。理解并练习正则表达式能提升文本处理效率。
20 0
|
1月前
|
存储 算法 程序员
C++基础知识(八:STL标准库(Vectors和list))
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发,同时我们应该也需要知道他们的底层实现,这样在出现错误的时候我们才知道一些原因,才可以更好的去解决问题。
|
1月前
|
算法 前端开发 C++
C++基础知识(八:STL标准库 deque )
deque在C++的STL(Standard Template Library)中是一个非常强大的容器,它的全称是“Double-Ended Queue”,即双端队列。deque结合了数组和链表的优点,提供了在两端进行高效插入和删除操作的能力,同时保持了随机访问的特性。