概述

Vitis Graph 库规定

Vitis™ 图形库提供:

  • 在各种使用案例中快速通过 FPGA 加速实施图形分析
  • 用 C/C++ 编写的高层次软件接口,无需任何额外的硬件配置,即可轻松使用
  • 用 HLS 编写的低层次硬件接口,可改善灵活性和控制性
Vitis Graph 库图

Vitis Graph 库 – 特性

目前,Vitis Graph 库包含以下用于执行图形算法的函数:

  • 相似度分析函数
    • 余弦相似度、Jaccard 相似度、K 最近邻算法
  • 中心性分析函数
    • PageRank
  • 向导函数
    • 最短的单源路径、最短的多源路径、最小生成树以及估计的直径
  • 连接性分析函数
    • 弱连接组件和强连接组件。
  • 社区检测函数
    • Louvain 模块化(从 22.1 开始,Louvain API 可以支持大型图形)、标签传播与三角形计数。
  • 搜索函数
    • 广度优先搜索和 2 跳搜索。
  • 图形格式函数
    • CSR 和 CSC 之间的重新编号、度数计算和格式转换。

Vitis 图形库 — 函数实施类型

Vitis 图形库提供三种类型的函数实施方案:L1 原语函数、L2 内核函数和 L3 软件 API 函数。FPGA 硬件开发人员可利用 L1 原语函数。L2 内核函数通过集成 L1 原语函数和数据移动器构建,这些数据移动器可通过支持 XRT 运行时库的主机代码调用。L3 软件 API 函数提供 C++ 函数接口,允许纯软件开发人员将图形运算交由 AMD 平台完成,无需其它与硬件相关的配置。下表列出了一部分这三种类型的函数。请注意,Vitis 图形库目前不提供任何在 Versal AI 引擎上运行的函数。

Vitis Graph 库特性 L1 原语函数
denseSimilarity:稠密图形的相似度函数
generalSimilarity:同时支持稠密和稀疏的相似度函数
sortTopK:输入数据的前 K 排序函数
sparseSimilarity:稀疏图形的相似度函数
L2 内核函数
bfsImpl:呼吸优先搜索算法
calcuDegree:度数计算算法
connectedComponentImpl:连接组件计算算法
convertCsrCsc: 转换 Csr 和 Csc 之间的图形格式
labelPropagation:标签传播算法
pageRankTop:页面等级算法
注意:完整的 L2 内核函数列表及介绍可在这里找到
L3 软件 API 函数
opBFS 类:bread-fist 搜索算法
opSCC 类:强连接组件计算
opTriangleCount 类:计算三角形个数
注意:完整的 L3 软件 API 函数列表及介绍可在这里找到。

如欲详细区分 L1 原语与 L2 内核函数,请参见下表。

L1 原语函数

  • 主要为精通硬件的开发人员提供,他们希望了解底层实现逻辑并进行性能优化;
  • 总是有数据流接口;
  • 通常针对单个计算模块执行;
  • 主机代码无法直接调用;

L2 内核功能

  • 主要为了解 XRT API 的主机代码开发人员提供;
  • 始终有内存 (DDR/HBM) 接口;
  • 由 L1 原语函数与一些数据移动器模块连接而成;
  • 主机可调用;

L3 软件 API 函数

  • 主要为纯软件工程师提供;
  • 功能参数与硬件无关;
  • 通常用于部署;
  • 主机可调用;

Vitis Graph 库 — 组织

这三种类型的实施方案组织在 Github 对应的 L1、L2 和 L3 目录中。下图显示了 Vitis Graph 库的主要组织,每个组织都与应用开发的不同阶段有关。

对于 L1 子目录:

  • include/hw:原语函数的报头文件
  • tests/hw/kernel:顶层模块包括数据移动器和原语函数
  • tests/hw/host:用于调用原语函数的测试平台和基础架构支持
  • tests/hw/Makefile:用于构建并运行原语函数

对于 L2 子目录:

  • include/hw:原语函数的报头文件
  • tests/hw/kernel:每个内核函数的函数封装程序
  • tests/hw/host:用于调用已编译内核函数的主机模块
  • tests/hw/Makefile:用于构建并运行内核函数

对于 L3 子目录:

  • include:软件 API 函数的报头文件
  • tests/Makefile: :用于构建并运行软件 API 函数
Vitis Graph 库组织图

在 Vitis GUI 中执行

Vitis GitHub 存储库中提供的库可通过上面介绍的、针对 L2 和 L3 函数提供的生成文件或 Vitis IDE 来编译。要在 IDE 中使用该库,首先得按库模板下载,然后必须使用该模板创建一个新的 Vitis 项目。如欲进一步了解如何在 Vitis GUI 中使用库模板创建 L2 或 L3 应用,请参见这里

入门