概述

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 应用,请参见这里

入门