设计原则 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

简介

您可能会使用 HLS 工具来充分发挥编写 C/C++ 代码为硬件生成 RTL 的效率增益;或者您可能期望在可编程逻辑中实现的定制硬件上加速各部分 C/C++ 算法。本章旨在帮助您了解根据 C/C++ 编写的软件算法来进行硬件综合的进程。本文档中介绍了用于设计和创建可综合的优秀软件的基本概念,凭借其中所用方法即可使用高层次综合 (HLS) 工具将此类软件成功转换为硬件。本文档中探讨的内容与工具无关,介绍的概念均为大部分 HLS 工具通用的概念。对于有经验的设计师而言,这些材料能够帮助您巩固这些概念的重要性,并帮助您了解如何触达 HLS,尤其是如何构造 HLS 代码来实现高性能设计。

吞吐量和性能

在可编程逻辑中作为定制硬件来实现的 C/C++ 函数的运行速度远高于传统 CPU/GPU 架构上可实现的速度,并且可实现的处理速率和/或性能也更高。首先需要明确在硬件加速上下文中,下列术语的含义。吞吐量定义为在单位时间内执行的特定操作的数量或者在单位时间内生成的结果数量。它是以单位时间内生成的任意对象的单位数量(汽车、摩托车、I/O 示例、存储器字数、迭代数)来度量的。例如,“存储器带宽”一词有时用于指定存储器系统的吞吐量。同样,性能的定义不仅是指提升吞吐量,而是在低功耗的前提下提升吞吐量。在当今世界里,降低功耗的重要性丝毫不亚于提升吞吐量。

架构为要

为了能够更好地理解定制硬件如何对程序中某些部分进行加速,首先您需要了解您的程序在传统计算机上是如何运行的。冯诺依曼架构是现今几乎所有计算的基础,虽然它是在 70 多年前设计完成的。此架构被视为最适合大型应用程序,旨在保障灵活性和可编程性。但随着应用程序需求给与系统的压力开始逐渐增大,CPU 开始支持多个进程的执行。多线程处理和/或多进程处理可包含多个系统进程(例如,同时执行两个或两个以上程序),或者可包含单个进程,但此进程中包含多个线程。使用共享存储器系统进行多线程编程允许软件开发者在使用固定 CPU 架构的前提下,围绕并行性来设计应用程序,因而发展势头如火如荼。但当速度不断提升的多线程 CPU 无法再满足数据处理速度时,多核 CPU 和超线程粉墨登场,用于提升吞吐量,如右图所示。

这种通用的灵活性的代价是功耗和峰值吞吐量。现如今手机、游戏和在线视频会议无处不在,所处理的数据的性质已发生了改变。为了实现更高的吞吐量,您必须将工作负载移至距离存储器更近的位置和/或将工作负载移入专用功能单元内。因此,新的挑战是定义全新可编程架构,使您能够在保留足够的可编程性的同时提升性能并降低功耗成本。

现场可编程门阵列 (FPGA) 不仅能提供这种可编程性,还能提供足够的存储器带宽,从而造就了这一高性能低功耗成本的解决方案。FPGA 与执行程序的 CPU 的不同之处在于,FPGA 可配置为定制硬件电路,其响应输入的方式与专用硬件的行为方式相同。可重配置器件(如 FPGA)包含具备卓越灵活粒度的计算元件,从初级的逻辑门到完整的算术逻辑单元(如数字信号处理 (DSP) 块),都一应俱全。当采用更高粒度时,即可将用户指定的可组合式逻辑单元(称为内核)按策略布局在 FPGA 上,以执行各种角色。可重配置 FPGA 器件的这一特性可支持创建定制宏架构,故而相比传统 CPU/GPU,FPGA 在使用特定于应用程序的并行操作方面优势显著。计算能按空间映射到器件,因而较之以处理器为核心的平台,能够提供更高的操作吞吐量。现今最新 FPGA 还可包含处理器核(基于 Arm)及其他硬化的 IP 块,无需编程到可编程逻辑中即可直接使用。