機能概要

AMD Vitis™ BLAS ライブラリの特長:

  • 標準的な BLAS (Basic Linear Algebra Subprograms) を高速化するための FPGA アクセラレーション機能
  • Python、C/C++ で記述された上位レベルのソフトウェア インターフェイスにより、ハードウェアの設定を追加することなく簡単に適用できる
  • HLS で記述された下位レベルのハードウェア インターフェイスにより、高度な制御を柔軟に実行できる 
Vitis BLAS Library Chart

機能

Vitis BLAS ライブラリでは、次のような行列やベクトルの演算関数を提供しています。

行列演算の関数:

  • 一般的な行列乗算

ベクトル演算の関数:

  • ベクトル内の特定要素の位置を探す
  • ベクトル内の要素の大きさを合計する
  • 2 つのベクトルの内積を計算する
  • ベクトルとスカラーの積を計算する
  • ベクトルのユークリッド ノルムを計算する
  • ベクトルの要素を交換、スケーリング、またはコピーする

行列/ベクトル演算の関数:

  • 一般的な行列とベクトルの乗算
  • 一般的なバンド行列とベクトルの乗算
  • 対象行列とベクトルの乗算
  • 三角行列とベクトルの乗算

関数の実装タイプ

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

Vitis BLAS ライブラリ関数 L1 プリミティブ関数
amax、amin: ベクトル要素の位置を検索
asum: ベクトル要素の大きさを合計
dot: 2 つのベクトルのドット積を計算
axpy: ベクトルとスカラーの積を計算し、別のベクトルに加算
nrm2: ベクトルのユークリッド ノルムを計算
swap、scal、copy: ベクトルの入れ替え、スケーリング、コピー
symv: 対称行列とベクトルの乗算
trmv: 三角行列とベクトルの乗算
L2 カーネル関数
Gemm クラス: 一般的な行列乗算
Gemv クラス: 一般的な行列とベクトルの乗算
L3 ソフトウェア API 関数
xfblasCreate: ライブラリの初期化およびハンドルの作成
xfblasFree: FPGA デバイス上のメモリを解放
xfblasGetMatrix: FPGA デバイス メモリの行列をホストにコピー
xfblasExecute: カーネルを起動し、完了まで待機
注記: L3 ソフトウェア API 関数すべての一覧および解説はこちらをご覧ください。

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

L1 プリミティブ関数

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

L2 カーネル関数

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

L3 ソフトウェア API 関数

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

構成

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

L1 サブディレクトリ:

  • include/hw: プリミティブ関数用のヘッダー ファイル
  • tests/hw: データ ムーバーおよびプリミティブ関数を含むトップ モジュール
  • tests/sw: プリミティブ関数を呼び出すためのテストベンチおよびインフラ

L2 サブディレクトリ:

  • include/hw: カーネル関数用のヘッダー ファイル
  • include/sw: カーネル関数を呼び出すためのホスト モジュール
  • tests/hw: 実装された各カーネル関数をビルドするための Makefile を格納

L3 サブディレクトリ:

  • include/sw: ソフトウェア API 関数用のヘッダー ファイル
  • tests/sw: 実装された各ソフトウェア API 関数のテストに使用される Makefile を格納
Vitis BLAS Library L1 Sub-Directories

Vitis IDE で実行

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

リソース