概要

Vitis BLAS ライブラリの提供

Vitis™ BLAS ライブラリの特長

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

Vitis BLAS ライブラリ – 関数

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

行列演算を実行するための関数:

  • 一般的な行列乗算

ベクトル演算を実行するための関数:

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

行列とベクトルの演算を実行するための関数

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

Vitis BLAS ライブラリ - 関数の実装タイプ

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

Vitis BLAS ライブラリ関数 L1 プリミティブ関数
amax, amin: ベクトル内の特定の要素の位置を探す
asum: ベクトル内の要素の大きさを合計する
dot: 2 つのベクトルの内積を計算する
axpy: ベクトルとスカラーの積を計算し、ベクトルに加算する
dot: ベクトルのユークリッドノルムを計算する
swap, scal, copy: ベクトルの要素を交換、スケーリング、またはコピーする
symv: 対称行列とベクトルを乗算する
symv: 三角行列とベクトルを乗算する
L2 カーネル関数
Gemm class: 一般的な行列乗算
Gemv class: 行列とベクトルの乗算
L3 ソフトウェア API 関数
xfblasCreate: ライブラリを初期化し、ハンドルを作成する
xfblasFree: FPGA デバイス内のメモリを解放する
xfblasGetMatrix: FPGA デバイス内のメモリに格納された行列データをホスト コンピューターのメモリにコピーする
xfblasExecute: カーネルを開始し、終了するまで待機する
注記: L3 ソフトウェア API 関数の一覧表および説明は、こちらで確認できます。

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

L1 プリミティブ関数

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

L2 カーネル関数

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

L3 ソフトウェア API 関数

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

Vitis BLAS ライブラリ – 構成

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

L1 サブディレクトリ:

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

L2 サブディレクトリ:

  • include/hw: カーネル関数のヘッダー ファイル
  • include/sw: カーネル関数を呼び出すためのホスト モジュール
  • tests/hw: 実装された各カーネル関数を構築するために使用する Makefile が含まれている

L3 サブディレクトリ:

  • include/sw: ソフトウェア API 関数のヘッダー ファイル
  • tests/sw: 実装された各ソフトウェア API 関数をテストするために使用する Makefile が含まれている
2004720-blas-library-organization

Vitis BLAS ライブラリ - Vitis IDE で実行

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

設計開始