硬件和软件组织 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文

良好的系统设计模型能便于您为现有应用内的特定功能使用硬件加速,只需少量更改即可例化计算硬件并高效运行。在基于 Vitis HLS 的加速流程中,计算硬件的效率仍将取决于建模/编码样式和编译指示。对于 RTL 流程,则取决于所选架构。调用加速函数或 CU 以及与主机交互应尽可能自动执行,包括通过硬件对数据进行流水打拍、使用及组合多个 CU 等。

图 1. 硬件和软件组织图
VSC 支持您通过统一的 C++ 模型来编译加速器设计和应用软件接口。此图右侧显示的硬件设计是使用 AXI4 框架的系统,此系统插入标准 Vitis 平台的动态区域内。此用户定义的组合可能包含多个可复制的计算单元 (CU),其中每个 CU 均可作为处理元素 (PE) 的数据流水打拍网络,且每个 PE 均可对符合下列条件的数据进行处理:
  • 在包含 FPGA 的加速器卡本地的器件存储器(通常为 DDR)内的数据
  • 在通过 PCIe 连接到 FPGA 的 smartSSD 内的数据
  • 通过一个或多个 AXI4‑Stream 到达 PE 输入的数据。

这些 CU 必须连接到平台端口,这些端口通常分为如下两类:用于通过 DDR 在主机 CPU 上进行往来数据传输的存储器映射 AXI4 (M_AXI),或用于低带宽标量码字传输的 AXI4‑Lite。这些 CU 可对独立数据集进行操作,以达成应用固有的宏并行度,从而实现显著加速。VSC 支持为每个 M_AXI 使用数据移动器 (DM)。DM 属于 RTL IP,它能通过自动执行精确定义的协议(例如 AXI 突发)来有效实现 DDR 传输。这些 CU 还可通过器件存储器将数据传输至另一个用户定义的加速器的 CU。

VSC 可提供应用层接口,如上图左侧所示。这是一个 C++ API 接口,主要由对应每个硬件加速器或 CU 集群的两个线程组成。发送线程 (send-thread) 用于控制前传数据和在加速器上启动作业,而接收线程 (receive-thread) 则允许收集来自加速器的结果。发送线程使用名为 compute() 的指定 C 语言函数,该函数充当软件接口,用于在加速器上启动对应的调用作业。运行时层将自动完成多项详细作业,包括将此类作业调度到 CU 组上,以及管理 compute() 实参的有效数据传输。这些独立线程允许软件与硬件执行进行异步交互,从而对特定于应用的计算和数据传输进行有效建模。VSC 软件接口还可提供多项控制,用于控制与硬件之间由用户驱动的同步。

VSC 可提供 C++ 语言的统一系统组合范例,它能提供运行时层以允许硬件组合并精简 CU 与器件存储器之间的数据传输,还能有效实现开箱即用的软硬件交互。

由于硬件编译是一个极为耗时的进程,因此重要的是,硬件代码不应触发硬件重新编译。使用来自用户的专用编码样式即可避免此问题,并且 VSC 将允许创建可复用的用户空间库。这些库还能充当用户指定的硬件加速器系统之上的 C++ API 软件栈。此类库甚至可用作为动态运行时共享库,并与第三方软件应用集成。