概要

Vitis グラフ ライブラリの提供

Vitis™ グラフ ライブラリの特長は次のとおりです。

  • さまざまなユース ケースに対応するグラフ解析を高速化するための FPGA アクセラレーション機能
  • C/C++ で記述された上位レベルのソフトウェア インターフェイスにより、ハードウェアの設定を追加することなく簡単に適用できる
  • HLS で記述された下位レベルのハードウェア インターフェイスにより、高度な制御を柔軟に実行できる
Vitis Graph Library Image

Vitis グラフ ライブラリ – 関数

現在、Vitis グラフ ライブラリには、グラフ アルゴリズムを実装する次の関数があります。

  • 類似度解析
    • コサインの類似度、ジャカールの類似度、k 近傍法
  • 中心性解析
    • ページランク
  • 経路探索
    • 単一始点最短経路 (SSSP: Single Source Shortest Path)、マルチ始点最短経路 (MSSP: Multi-Sources Shortest Path)、最小全域木、直径予測
  • コネクティビティ解析
    • 弱く接続されたコンポーネントと、強く接続されたコンポーネント。
  • コミュニティ検出
    • ルヴァン モジュラリティ (22.1 から、ルヴァン API は大型のグラフをサポート可能)、ラベル伝搬、三角形カウント。
  • 検索
    • 幅優先探索と 2 ホップ探索
  • グラフ フォーマット関数
    • 番号の付け直し、角度の計算、CSR と CSC とのフォーマット変換

Vitis グラフ ライブラリ - 関数実装タイプ

Vitis グラフ ライブラリは、L1 プリミティブ関数、 L2 カーネル関数、L3 ソフトウェア API 関数という 3 つの実装タイプがあります。L1 プリミティブ関数は、主に FPGA ハードウェア開発者向けです。L2 カーネル関数は、L1 プリミティブ関数とデータ ムーバーを統合したもので、XRT ランタイム ライブラリを使用してホストコードから呼び出すことができます。L3 ソフトウェア API 関数では、C++ 関数インターフェイスを利用できるため、ソフトウェア開発者はハードウェア関連の複雑な設定を行う必要がなく、簡単にグラフ操作を AMD プラットフォームにオフロードできます。3 つのタイプの関数を下記の表にまとめています。現在、Vitis グラフ ライブラリでは、Versal AI エンジンで実行する関数を提供しておりません。

Vitis グラフ ライブラリ関数 L1 プリミティブ関数
denseSimilarity: 密グラフの類似度関数
generalSimilarity: 密と疎の両方に対応できる類似度関数
sortTopK: 入力データの上位 K 個のソート関数
sparseSimilarity: 疎グラフの類似度関数
L2 カーネル関数
bfsImpl: 幅優先探索アルゴリズム
calcuDegree: 次数計算アルゴリズム
connectedComponentImpl: 連結成分計算アルゴリズム
convertCsrCsc: Csr と Csc 間のグラフ形式変換
labelPropagation: ラベル伝搬アルゴリズム
pageRankTop: ページランク アルゴリズム
注記: L2 カーネル関数の一覧表および説明は、こちらで確認できます。
L3 ソフトウェア API 関数
opBFS class: 幅優先探索アルゴリズム
opSCC class: 強く接続されたコンポーネントの計算
opTriangleCount class: 三角形のカウント
注記: L3 ソフトウェア API 関数の一覧表および説明は、こちらで確認できます。

L1 プリミティブ関数と L2 カーネル関数の詳細な違いについては、次の表を参照してください。

L1 プリミティブ関数

  • ハードウェアの知識があり、基盤となる実装ロジックを理解した上で性能向上を目指す開発者向けに提供されています。
  • 常にストリーム インターフェイスを使用します。
  • 通常、単一の計算モジュールに対して実装されます。
  • ホスト コードから直接呼び出すことはできません。

L2 カーネル関数

  • XRT API の知識があるホスト コード開発者向けに提供されています。
  • 常にメモリ (DDR/HBM) インターフェイスを使用します。
  • L1 プリミティブ関数とデータ ムーバー モジュールを組み合わせて構築されます。
  • ホスト コードから呼び出し可能です。

L3 ソフトウェア API 関数

  • ソフトウェア開発に特化したエンジニア向けに提供されています。
  • 関数パラメーターは、ハードウェアに依存しません。
  • 通常、デプロイメントに使用されます。
  • ホスト コードから呼び出し可能です。

Vitis グラフ ライブラリ – 構成

3 つの実装タイプは、GitHub 上の対応するディレクトリ (L1、L2、L3) にそれぞれ配置されています。次の図は、Vitis グラフ ライブラリの主な構成を示しており、それぞれがアプリケーション開発の異なる段階に関連しています。

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 Library Organization Image

Vitis GUI で実行

Vitis GitHub リポジトリで公開しているライブラリは、上記で紹介した L2、L3 関数用に提供されている Makefile を使用するか、Vitis IDE を使用してコンパイルできます。IDE でライブラリを使用するには、まずライブラリ テンプレートとしてダウンロードし、そのテンプレートを使用して新しい Vitis プロジェクトを作成してください。Vitis GUI でライブラリ テンプレートを使用する L2 または L3 アプリケーションの作成手順については、こちらを参照してください。

設計開始