graph500:大规模图计算性能基准测试
graph500 Graph500 reference implementations 项目地址: https://gitcode.com/gh_mirrors/gr/graph500
项目介绍
graph500 是一个用于评估大规模图计算性能的基准测试项目。该项目旨在提供一个公平、一致的标准来衡量不同系统和算法在大规模图数据上的性能。graph500 采用了 BFS(广度优先搜索)和 SSSP(单源最短路径)两种内核,可以在单节点上以合理的性能运行 MPI(消息传递接口)代码。
项目技术分析
graph500 项目的构建过程相对简单,只需确保你的系统中安装了有效的 MPI-3 库,并设置在环境变量 PATH 中。项目移除了之前的 OpenMP、Sequential 和 XMT 版本的基准测试,专注于 MPI 版本。
在源代码目录下执行 make
命令后,如果一切顺利,将会生成四个二进制文件,其中两个是主要关注的:
graph500_reference_bfs
:运行 BFS 内核,并跳过权重生成。graph500_reference_bfs_sssp
:同时运行 BFS 和 SSSP 内核。
这两个二进制文件都需要一个整型参数,即图的规模。此外,可以通过设置环境变量 SKIP_VALIDATION=1
来禁用验证。如果设置 SKIP_BFS=1
,则 bfs_sssp
二进制文件将跳过 BFS 部分。
graph500 还支持将生成的图存储到文件或从文件中读取。通过设置环境变量 TMPFILE=<filename>
和 REUSEFILE=1
,可以保留文件。建议使用 bfs_sssp
二进制文件生成图文件,因为它会生成边和权重两个文件(filename.weights
)。bfs
二进制文件只会使用/写入边文件。如果 bfs_sssp
无法打开权重文件,即使边文件存在,它也会生成两个文件。
需要注意的是,当前设置假设你使用的是 2 的幂:总核心数和每个节点的核心数。如果节点数不是 2 的幂,可以注释掉 common.h
中定义的宏 SIZE_MUST_BE_POWER_OF_TWO
。但这样通常会导致性能下降超过 20%。如果每个节点需要使用非 2 的幂个进程,应在 src/Makefile
中的 CFLAGS
中添加 -DPROCS_PER_NODE_NOT_POWER_OF_TWO
,这将自动启用 SIZE_MUST_BE_POWER_OF_TWO
。
对于 GreenGraph500 运行,可以通过定义编译时宏 ENERGYLOOP_BFS
或 ENERGYLOOP_SSSP
来测量足够长时间循环中的平均功耗。
项目技术应用场景
graph500 适用于多种大规模图计算场景,包括但不限于:
- 社交网络分析:分析社交网络中的用户关系,找出关键节点和影响力中心。
- 网络拓扑优化:优化网络结构,提高通信效率和稳定性。
- 知识图谱处理:从知识图谱中提取有用信息,支持智能问答和推荐系统。
- 生物信息学:分析生物分子网络,支持药物发现和疾病诊断。
项目特点
-
高效性能测试:graph500 提供了 BFS 和 SSSP 两种内核,能够在不同的硬件和环境下进行高效的性能评估。
-
环境适应性:项目支持自定义环境变量,允许用户根据具体需求调整运行参数。
-
易于扩展:graph500 可以轻松扩展到多节点环境,支持大规模图数据的处理。
-
灵活性:项目允许用户自定义图的规模和结构,以及是否启用特定功能(如验证、跳过 BFS 等)。
-
功耗测量:通过编译时宏,可以测量 BFS 和 SSSP 内核在长时间运行中的平均功耗,适用于绿色计算和能效优化。
graph500 作为一个专业的大规模图计算基准测试项目,凭借其高效、灵活和适应性强的特点,为研究人员和开发人员提供了一个宝贵的工具,以评估和优化大规模图计算的性能。
graph500 Graph500 reference implementations 项目地址: https://gitcode.com/gh_mirrors/gr/graph500
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考