機能概要

AMD Vitis™ グラフ ライブラリの特長:

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

機能

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

  • 類似性解析の関数
    • コサイン類似度、ジャッカード類似度、k 近傍法
  • 中心性解析の関数
    • PageRank
  • 経路探索の関数
    • 単一始点最短経路、複数始点最短経路、最小全域木、直径の推定
  • 接続性解析の関数
    • 弱連結成分、強連結成分
  • コミュニティ検出の関数
    • Louvain Modularity (バージョン 22.1 より、Louvain API は大規模グラフをサポート)、ラベル伝播法、三角形カウント
  • 探索用の関数
    • 幅優先探索、2 ホップ探索
  • グラフ形式処理の関数
    • 番号の再割り当て、次数計算、CSR と CSC 間の形式変換

関数の実装タイプ

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

Vitis グラフ ライブラリの関数 L1 プリミティブ関数
denseSimilarity: 密グラフ向けの類似度計算関数
generalSimilarity: 密および疎の両方に対応した類似度計算関数
sortTopK: 入力データの上位 K を並び替える関数
sparseSimilarity: 疎グラフ向けの類似度計算関数
L2 カーネル関数
bfsImpl: 幅優先探索アルゴリズム
calcuDegree: ノードの次数を算出するアルゴリズム
connectedComponentImpl: 連結成分計算アルゴリズム
convertCsrCsc: CSR と CSC の間のグラフ形式変換 
labelPropagation: ラベル伝播アルゴリズム
pageRankTop: PageRank アルゴリズム 
注記: L2 カーネル関数すべての一覧および詳細は、こちらを参照
L3 ソフトウェア API 関数
opBFS class: 幅優先探索アルゴリズム
opSCC class: 強連結成分計算
opTriangleCount class: 三角形の個数をカウントする関数 
注記: L3 ソフトウェア API 関数すべての一覧および解説はこちらをご覧ください。

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

L1 プリミティブ関数

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

L2 カーネル関数

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

L3 ソフトウェア API 関数

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

構成

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/sw: ソフトウェア API 関数用のヘッダー ファイル
  • tests/Makefile: ソフトウェア API 関数のビルドおよび実行に使用
AMD Vitis Graph Library Directories Diagram

Vitis GUI で実行

Vitis GitHub リポジトリで提供されているライブラリは、上記の L2 および L3 関数の Makefile または Vitis IDE のいずれかを使用してコンパイル可能です。IDE でライブラリを使用するには、まずライブラリ テンプレートとしてダウンロードし、そのテンプレートを使用して新しい Vitis プロジェクトを作成してください。Vitis GUI のライブラリ テンプレートを使用して L2 または L3 アプリケーションを作成する方法は、こちらをご覧ください。

リソース