加速:工业类比法 - 2023.2 简体中文

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

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

CPU、GPU 和可编程器件之间存在明显差异。了解这些差异是有效开发各类器件的应用和实现最优加速的关键。

CPU 和 GPU 都具有预定义的架构,具有固定数量的核、固定指令集和严格的存储器架构。GPU 通过核数量和通过采用 SIMD/SIMT 并行化来缩放性能。相比之下,可编程器件则是完全可自定义的架构。开发者创建针对应用程序需求进行最优化的计算单元。性能是通过创建深度流水打拍的数据路径而不是使计算单元数量倍增来实现的。

将 CPU 视为一系列车间,每个车间都雇佣一名技术熟练的工人。这些工人可以使用各种通用工具,让他们可以构建几乎任何东西。每个工人一次制作一件产品,先后使用不同的工具将原料转化为成品。根据任务性质,此顺序变换过程可能需要许多步骤。车间是独立的,工人可以在不分心也无需考虑协调问题的情况下完成不同的任务。

GPU 也有车间和工人,且数量更多,而工人也更专业。他们只能使用专用工具,能做的工作更少,但能非常高效地完成这些工作。GPU 工人在重复执行少量相同任务时,以及当所有人同时执行相同工作时,效率最高。毕竟,有这么多不同的工人,给所有人相同的订单效率更高。

可编程器件将这种车间类比法引入工业时代。如果把 CPU 和 GPU 看作是由大量不同工人组成的多个小组,这些小组按顺序步骤将输入变换为输出,那么可编程器件就是具有组装线和传送带的工厂。经由各组工人按组装线分配任务,将原材料逐步变换为成品。每个工人重复执行相同的任务,并且半成品通过输送带从一个工人转移到另一个工人。这样即可实现更高的产量。

不同于 CPU 和 GPU 中的车间和工人,可编程器件的另一个主要区别在于工厂和组装线当前并不存在。为了让类比更形象,我们把可编程器件视为待开发的空地。这意味着器件开发者可以建造工厂、组装线和工作站,然后按所需任务对其进行自定义,而不是使用通用工具。就像空地大小一样,器件空间不是无限的,这对于器件中可建造的工厂数量和大小都造成了限制。因此,正确设计这些工厂的架构和配置是器件编程工艺的关键。

传统的软件开发是在预定义的架构上进行功能编程的。可编程器件开发重点在于对架构进行编程以实现期望的功能。