概述

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 應用,請參見這裏

入門