1. 简介
Vitis Accelerated Libraries,包含很多现成的库,这些库都是开源的,也就是说代码是公开的,而且已经优化过,可以让程序运行得更快。你不需要改变太多你的代码,就能让你的程序速度提升。
这些库有很多种,比如用于解算数学问题的、做基础数学运算的、处理稀疏矩阵的、数字信号处理的,还有一些其他的工具。这些都是很基础的功能,但是可以用在很多不同的程序上。
还有一些特别的库,它们是为了特定的领域设计的,比如处理图像、金融计算、高性能计算、图形处理、数据库管理、数据分析、数据压缩等等。这些库可以让这些特定领域的程序直接加速。
Vitis的库中还包括了一些特别为Versal™设备中的AI引擎优化过的功能,比如数字信号处理、矩阵运算等等。这意味着这些功能在Versal设备上会运行得特别快。
2. 库的组织结构
2.1 结构级别L1/L2/L3
Vitis 库分为 L1、L2 和 L3 文件夹,每个文件夹与应用程序开发的不同阶段相关:
L1 Primitives
主要包含基本的原始函数(primitives),这些函数可以单独仿真,并且可以用于Vitis HLS生成Verilog HDL和IP。这些函数是底层的,通常用于硬件开发者。
L1 中的 Makefile 和源代码有助于基于 HLS 的流程进行快速检查:
- 检查单个内核的功能(C simulation)
- 估计资源使用情况、延迟等(Synthesis)
- 运行周期精确模拟(Co-simulation)
- 打包为 IP 并获取最终资源利用率/时序详细信息(Export RTL)
特点:
- 主要提供给精通硬件的开发者,想要了解底层实现逻辑并进行性能优化
- 包含有流接口
- 通常为单个计算模块实现
- 不能被主机代码直接调用
L2 Kernels
由将L1库中的原始函数与数据移动器(data movers)集成而成,这些集成函数可以被主代码调用,使用XRT运行时库。L2库的功能是基于L1库的功能进行扩展和优化。
L2 中的 Makefile 和源代码用于从内核的各种源代码(HDL、HLS 或 XO 文件)构建 XCLBIN 文件,并使用针对设备的 OpenCL/XRT 框架编写的主机代码:
- 主要提供给了解XRT API的主机代码开发者
- 始终具有内存(DDR/HBM)接口
- 由 L1 原语函数与一些数据移动器模块链接而成
- 主机可调用
L3 Software APIs
提供C、C++和Python等编程语言的接口,允许纯软件开发者将图算法操作(如BLAS)转移到AMD平台上,而无需额外的硬件配置。L3库是最高级别的,它为软件开发者提供了一个更高层次的接口。
- 主要为纯软件工程师提供
- 功能参数与硬件无关
- 通常用于部署
- 主机可调用
2.2 文件内容
L1 子目录:
- include/hw:原始函数的头文件
- tests/hw:顶级模块,包括数据移动器和原始函数
- test/sw:调用原始函数的测试平台和基础设施支持
L2 子目录:
- include/hw:内核函数的头文件
- include/sw:调用内核函数的主机模块
- test/hw:包含用于构建每个已实现的内核函数的 Makefile
L3 子目录:
- include/sw:软件API函数的头文件
- test/sw:包含用于测试每个已实现的软件API函数的Makefile
3. 分类介绍
3.1 blas
Basic Linear Algebra Subroutines,基本线性代数子程序,包含一些矩阵和向量运算函数。
矩阵运算函数:
- 一般矩阵乘法
向量运算函数:
搜索向量元素位置
3.2 codec
编解码库,用于加速图像编码、解码和相关处理算法。
3.3 data_analytics
数据挖掘:分类、聚类、回归。
文本处理:非结构化信息的提取和转换。
地理空间:空间分析和空间数据挖掘。
3.4 data_compression
硬件加速压缩算法。
3.5 data_mover
在PL和DDR之间高效率传输数据。
3.6 database
SQL引擎开发,使用FPGA卡来加速查询执行。
3.7 dsp
DDS、FFT、FIRs、矩阵乘法(GeMM)和Widgets。
3.8 graph
图形库,包括相似性分析、分类、中心性分析、寻路、连通性分析、社区检测、搜索、图形格式。
3.9 hpc
高性能计算库,多层感知器(MLP)、二维反时间迁移(RTM)、三维RTM、共轭梯度求解器(CG)。
3.10 motor_control
FOC:Field-Orientated Control,场向控制。
SVPWM_DUTY / PWM_GEN:Space Vector Pulse Width Modulation,空间矢量脉宽调制(SVPWM)。
QEI:Quadrature Encoder Interface,四象限编码器接口。
3.11 quantitative_finance
L1:统计函数、数值方法和线性代数函数,支持实际用户实现高级建模,
L2:评估常见的金融衍生产品,如股权产品、利率产品、外汇(FX)产品和信贷产品。
3.12 security
安全算法:对称块密码,对称流密码,非对称加密,密码操作模式,消息认证码和哈希函数。
3.13 solver
矩阵分解操作,线性求解器和特征值求解器。
3.14 utils
实用库,高效地访问DDR、HBM或URAM中的内存执行数据分发、收集、重新排序、插入和丢弃。
3.15 vision
OpenCV视觉库
4. 总结
Vitis加速库为FPGA开发者提供了一系列优化的开源库,涵盖了从基础数学运算到专业领域应用的广泛功能。这些库分为三个层级:L1原语提供设计内核的基础算法,L2内核为性能优化的内核,而L3软件API则提供高级软件接口。特别地,对于Versal™ AI引擎,库中包含了专门优化的功能,以实现极致的运行效率。无论是在数据分析、图像处理、金融计算还是安全算法等领域,Vitis库都能显著提升程序的性能,简化开发流程,使得FPGA的强大计算能力更加易于访问和利用。这些库不仅支持广泛的应用场景,还能够根据用户需求进行定制和扩展,极大地推动了硬件加速的创新和应用。