概述

Vitis BLAS 庫

Vitis™ BLAS 庫提供:

  • 用於加速標準 BLAS(Standard Basic Linear Algebra Subroutines)的 FPGA 加速功能
  • 用 C、C++ 和 Python 編寫的高層次軟件接口,無需任何額外的硬件配置,即可輕鬆使用
  • 用 HLS 編寫的低層次硬件接口,可改善靈活性和控製性
Vitis BLAS 庫矩陣圖像

Vitis BLAS 庫 - 函數

Vitis BLAS 庫包含以下矩陣及向量運算函數:

矩陣運算函數:

  • 一般矩陣乘法

矢量運算函數:

  • 搜索向量元素位置
  • 累加向量元素的大小
  • 計算兩個向量的點積
  • 計算向量標量積
  • 計算一個向量的歐氏範數
  • 交換、縮放、複製向量

矩陣-矢量運算函數:

  • 一般矩陣向量乘法
  • 一般帶狀矩陣向量乘法
  • 對稱矩陣向量乘法
  • 三角矩陣向量乘法

Vitis BLAS 庫 — 函數實現類型

Vitis BLAS 庫提供三種類型的函數實現方案:L1 原語函數、L2 內核函數和 L3 軟件 API 函數。FPGA 硬件開發人員可利用 L1 原語函數。L2 內核函數通過集成 L1 原語函數和數據移動器構建,這些數據移動器可通過支持 XRT 運行時庫的主機代碼調用。L3 軟件 API 函數提供 C、C++ 和 Python 函數接口,允許純軟件開發人員將 BLAS 運算交由 AMD 平台完成,無需其它與硬件相關的配置。下表列出了一部分這三種類型的函數。請注意,Vitis BLAS 庫目前不提供任何在 Versal AI 引擎上運行的函數。

Vitis BLAS 庫特性 L1 原語函數
amax、amin: 搜索向量元素位置
asum:累加向量元素的大小
dot:計算兩個向量的點積
axpy:計算向量標量乘積,並與向量相加
nrm2:計算一個向量的歐氏範數
swap、scal、copy:交換、縮放或複製向量
symv:對稱矩陣向量乘法
trmv:三角矩陣向量乘法
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 函數。FPGA 硬件開發人員可利用 L1 原語函數。L2 內核函數通過集成 L1 原語函數和數據移動器構建,這些數據移動器可通過支持 XRT 運行時庫的主機代碼調用。L3 軟件 API 函數提供 C、C++ 和 Python 函數接口,允許純軟件開發人員將 BLAS 運算交由 AMD 平台完成,無需其它與硬件相關的配置。下表列出了一部分這三種類型的函數。請注意,Vitis BLAS 庫目前不提供任何在 Versal AI 引擎上運行的函數。

對於 L1 子目錄:

  • include/hw:原語函數的報頭文件
  • tests/hw:頂層模塊包括數據移動器和原語函數
  • tests/sw:用於調用原語函數的測試平台和基礎架構支持

對於 L2 子目錄:

  • include/hw:內核函數的報頭文件
  • include/sw:用於調用內核函數的主機模塊
  • tests/hw:包含 Makefiles,用於構建每個所執行的內核函數

對於 L3 子目錄:

  • include/sw:軟件 API 函數的報頭文件
  • tests/sw:包含 Makefiles,用於測試每個所執行的軟件 API 函數
2004720-blas-library-organization

Vitis BLAS 庫 — 在 Vitis IDE 中執行

Vitis GitHub 存儲庫中提供的庫可通過上麵介紹的、針對 L2 和 L3 函數提供的生成文件或 Vitis IDE 來編譯。要在 IDE 中使用該庫,首先得按庫模板下載,然後必須使用該模板創建一個新的 Vitis 項目。如欲進一步了解如何在 Vitis GUI 中使用庫模板創建 L2 或 L3 應用,請參見這裏

入門